Java 对象的创建与引用

本文最后更新于:2024年3月18日 凌晨

Java 对象的创建与引用

创建对象及访问对象成员

  • 定义java类后,就可以使用"new+构造方法”来创造类的对象,并将创建的对象赋给某个引用变量,就可以使用"引用变量名,属性”访问对象的属性,并将创建的对象赋给某个引用变量,就可以使用"引用变量名。属性"访问对象的属性,使用"引用变量名。方法名(实参表)"访问对象的方法,同一类可以创建任意个对象,每个对象有各自的值空间,对象不同则属性值也不同,在许多场合,对象也称为类的实例,相应地,对象的属性也叫实例变量,而对象的方法也叫实例方法,实例方法通常用来获取对象的属性或更改属性值。
  • 创建对象的同时给引用变量赋值的具体语句格式如下:
1
<类型> 引用变量名 = new <类型>([参数])
  • 其中,<类型>为类的名字,new操作实际就是调用类的构造方法创建对象,如果一个类未定义构造方法,则系统会提供默认的无参构造方法,例如:
1
Point p1 = new Point();
  • 也可以通过变量类型定义语句定义引用变量,后创建对象给其赋值,例如:
1
2
3
Point p2,p3;
p2 = new Point();
p3 = p2;
  • 为了演示对象的创建,不妨在例5-1程序中增加一个main()方法,并添加如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main (String args[]){
Point p1 = newL Point(); // 创建一个Point对象。
Point p2 = new Point(); // 创建另一个Point对象。
Point p3 = new p1;
p1.setX(5); // 修改p1的x属性值为5
p1.setY(8); // 修改p1的y属性值为8
p2.x=12;
System.out.println("p1"+p1);
System.out.println("p2"+p2);
System.out.println("p3的x属性值="+p3.getX());
}

p1点: 5,8
p2点: 12,0
p3的x属性值=5

说明

  • 在main()方法中创建了两个Point对象,并通过变量p1和p2保存其引用,通过p1和p2可以访问这两个对象,有时直接称对象p1和对象p2,但必须注意的是,p1和p2只是引用变量,其作用是方便访问对象成员,程序中创建Point对象时,其属性没有明确赋值,那么对象属性的初始值由相应数据类型的默认值决定,这里,整型的属性赋初值0
  • 执行后续代码,将变量p1赋值给变量p3,表示这两个变量引用同一个对象,接下来的3行,分别针对p1对象执行的setX()和setY()方法修改其x和y属性值,修改p2对象的x属性值为12,最后几条语句输出对象时将调用对象的toString()方法。
  • 值得一提的是,对象和引用变量是两个独立的东西,在程序运行过程中要注意其赋值变化,Java垃圾回收处理器将自动发现并清除程序中没有任何引用变量指向的对象。

对象的初始化和构造方法

  • 在创建对象时,要给对象的属性成员分配内存空间,并进行初始化,如果定义属性成员时没有指定初值,则系统按默认规则设定初值,特别地,引用类型的成员变量的默认初值为null,在定义属性成员时也可以指定初值,如下代码所示:
1
2
3
4
public class Point{
private int x = 10;
...
}
  • 则创建对象时,每个Point对象的属性x的初值均按上述赋值设定为10
  • 指定初值的另一种方法是通过初始化块来设置,如下代码所示:
1
2
3
4
5
6
7
8
public class Point{
private int x;
...
{// 初始化块。
x = 20;
}
...
}
  • 初始化块是在类中直接用{…}括住的代码段,不在任何方法中。

注意

  • 在有初始化块存在的情况下,首先按属性定义的初值设置给属性赋值,然后执行初始化块代码重新赋值,更为常用的给对象设置初值的方式是通过构造方法,它在以上的赋初值情况执行完后才调用构造方法。
  • 构造方法是给对象设置初值的规范方式,前面介绍的方式给所有对象的某属性设置同样的初值,而构造方法是根据方法参数给对象属性赋不同初值。
  • 如果一个类未指定构造方法,则系统自动提供一个无参构造方法,该方法的方法体为空,形式如下:
1
public Point(){}	// 系统默认的无参构造方法。
  • 构造方法是类的一种特殊方法,定义构造方法时要注意以下问题:
    • 构造方法的名称必须与类名同名。
    • 构造方法没有返回类型。
    • 一个类可提供多个构造方法,这些方法的参数不同,在创建对象时,系统自动调用能满足参数匹配的构造方法为对象初始化。
  • 以下为Point类的一个构造方法。
1
2
3
4
public Point(int x1, int y1){
x = x1;
y = y1;
}
  • 使用该构造方法可以创建一个Point对象赋给变量p4
1
Point p4 = new Point(20,30);
  • 则p4的x和y属性分别为20和30

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!