对象和类
Posted shuitailiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象和类相关的知识,希望对你有一定的参考价值。
对象和类:
使用一个通用类来定义同一类型的对象。
使用构造方法构造对象
构造方法的特殊之处
1.构造方法必须和所在类名字相同
2.构造方法没有返回值类型
3.构造方法是在创建一个对象时有new操作符调用的。构造方法的作用是初始化对象。
如果用户没有定义构造方法,类会隐式定义一个方法体为空的无参构造方法,被称为默认构造方法,当且仅当类中没有明确定义任何构造方法是才会自动提供。
通过引用变量访问对象
对象是通过对象引用变量(reference variable)来访问的,该变量包含了对对象的引用。
类是程序员定义的类型。类是一种引用类型(reference type),这意味着该类类型的变量都可以引用该类的一个实例。
在Java中,数组被看作对象。一个数组变量实际上是一个包含数组引用的变量。
在面向对象编程中,对象成员指该对象的数据域和方法。对象的数据访问和方法调用可以通过点操作符( . )来进行。( . )操作符也称为对象成员访问操作符(object member access operator)。
例:myCircle.radius引用myCircle的半径
myCircle.getArea()调用myCircle 的getArea方法。
方法作为对象的操作被调用
数据域radius称为实例变量(instance variable),因为它依赖某个具体的实例。
getArea方法称为实例方法(instance method),因为只能在具体的实例上调用它。是非静态的方法。
实例方法被调用的对象称为调用对象(calling object)。
通常,我们创建一个对象,然后将它赋值给一个变量,之后就可以使用这个变量来引用对象。
有时候,对象在创建之后并不需要引用。在这种情况下,可以创建一个对象,而并不将它明确的赋值给一个变量,如:
new Circle(); 创建一个Circle对象
或者
System.out.println(“Area is ” + new Circle(7).getArea()); 创建一个Circle对象然后调用它的getArea()方法返回其面积。 这种方式创建的对象称为匿名对象(anonymous object)。
引用数据域和null值
数据域也可以是引用型的。
String是一个预定义的Java类
如果一个引用类型的数据域没有引用任何对象,那么这个数据域既要有一个特殊的Java值null。
引用型数据域的默认值是null
数值类型数据域的默认值是0
boolean类型数据的默认值是false
char类型数据域的默认值是‘u0000’
Java没有给方法中的局部变量赋默认值
基本类型变量和引用类型变量的区别
每一个变量都代表了一个保存了存储值的内存位置。声明一个变量时,就是在告诉编译器这个变量可以存放什么类型的值。
对基本类型变量来说,对应内存所存储的值是基本类型值。
对引用类型变量来说,对应内存所存储的值是一个引用,是对象的存储地址。
静态变量、常量和方法
静态变量被类中的所有对象共享。
静态方法不能访问类中的实例成员(即实例数据域和方法)。
如果想让一个类的所欲实例共享数据,就要使用静态变量(static variable),也称为类变量(class variable)。
静态变量将变量值存储在一个公共的内存地址。如果某一个对象修改了静态变量的值,那么同一个类的所有对象都会收到影响。
Java支持静态变量和静态方法。无需创建类的实例就可以调用静态方法。
实例方法和实例数据都是从属于实例的,所以在实例创建之后才可以使用,通过引用变量来访问。
如果一个变量或方法依赖于类的某个具体实例,就应定义为实例变量或实例方法。
如果一个变量或方法不依赖于类的某个具体实例,就应定义为实例变量或实例方法
可见性修饰符
如果没有使用可见性修饰符,那么默认类、方法和数据域是可以被同一个包中的任何一个类访问的。称为包私有(package-private)或包访问(package-access)。
修饰符private只能应用在类的成员上。。
修饰符public 可以应用在类或类的成员上。
数据域封装
为避免对数据域的直接修改,应使用private修饰符将数据域声明为私有的,称为数据域封装(data field encapsulation)。
私有数据域不能被对象从定义该私有域的类外访问。
为了访问私有数据域,可以提供一个获取方法(getter)返回数据域的值,获取方法称为访问器(accessor)。
为了更新数据域,可以提供一个设置(setter)方法更新数据域的值,设置方法称为修改器(mutator)。
向方法传递对象参数
给方法传递一个对象,是将对象的引用传递给方法。
Java只有一种参数传递方式:值传递(pass-by-value)。
对象存储在堆中。
当传递基本数据类型的参数时,传递的时实参的值。
当传递引用类型的参数时,传递的时对象的引用。
引用上的按值传参在语义上最好描述为按共享传参(pass-by-sharing),即在方法中引用的对象和传递的对象是一样的。
对象数组
对象的数组实际上是引用变量的数组。
当使用new操作符创建对象数组后,这个数组中的每个元素都是默认值为null的引用变量。
不可变对象和类
创建一个一旦创建其内容就不能再改变的对象,称为不可变对象(immutable object)。它的类称为不可变类(immutable class)。
不可变类需要满足三个要求:
- 所有数据域都是私有的。
- 没有修改器方法。
- 没有返回一个指向可变数据域的引用的访问器方法。
变量的作用域
一个类中的实例变量和静态变量称为类变量(class variable)或数据域(data field)。
在方法内部定义的变量称为局部变量。
如果一个局部变量和一个类变量具有相同的名字,那么局部变量优先,同名的类变量将被隐藏(hidden)。
this引用
关键字this引用对象自身。它也可以在构造方法内部用于调用同一个类的其他构造方法。
关键字this是一个对象可以用来引用自身的引用名。
可以用this关键字引用对象的实例成员。
在引用被方法或者构造方法的参数所隐藏的数据域以及调用一个重载的构造方法时,this是必需的。
使用this引用数据域
使用数据域作为设置方法或者构造方法的参数,可以使的代码易于阅读,避免创建不必要的名字。这种情况下,在设置方法中需要使用this关键字来引用数据域。
隐藏的静态变量可以通过ClassName.staticVariable引用。
隐藏的实例变量可以使用this 来访问。
使用this调用构造方法
关键字this可以用于调用同一个类的另一个构造方法。
Java要求,在构造方法中语句this(arg-list)应在任何其他可执行语句之前出现。
如果一个类有多个构造方法,最好尽可能使用this(参数列表)实现它们。
通常,无参数或参数较少的构造方法可以用this(arg-list)调用参数较多的构造方法。
关键术语:
action 动作 |
dot operator . 操作符 |
anonymous object 匿名对象 |
getter 获取方法 accessor 访问器 |
attribute 属性 |
instance 实例 |
behavior 行为 |
instance method 实例方法 |
class 类 |
instance variable 实例变量 |
class’s variable 类变量 |
instantiation 实例化 |
client 客户 |
immutable class 不可变类 |
constructor 构造方法 |
immutable object 不可变对象 |
data field 数据域 |
no-arg constructor 无参构造方法 |
data field encapsulation 数据域封装 |
null value 空值 |
default constructor 默认构造方法 |
object 对象 |
object-oriented programming OOP 面向对象程序设计 |
reference variable 引用变量 |
package-private 包私有 package-access 包访问 |
setter 设置方法 mutator修改器 |
private constructor 私有的构造方法 |
state 状态 |
property 属性 |
static method 静态方法 |
public class 公共类 |
static variable 静态变量 |
reference type 引用类型 |
this keyword this关键字 |
Unified Modeling Language UML 统一建模语言 |
|
以上是关于对象和类的主要内容,如果未能解决你的问题,请参考以下文章