创建对象与引用变量
创建对象
ClassName objectRefVar = new ClassName();
这条语句包含了三个部分:
-
创建对象 ——new ClassName();
用new操作符创建了一个对象(实例化),且相应的构造方法被调用;新创建的对象在内存中被分配空间。它们可以通过引用变量来访问. -
声明对象引用变量 ——ClassName objectRefVar;
本质上来说,一个类是一个程序员定义的类型。类是一种引用类型,这意味着该类类型的变量都可以引用该类的一个实例(即实例化对象)。实例对象的数据和方法可以运用点操作符(.)通过对象的引用变量进行访问。
-
将对象的引用赋值给这个引用变量——objectRefVar = new ClassName();
下面是一个例子:
Circle myCircle-new Circle();
变量 myCircle中放的是对 Circle 对象的一个引用
注意事项:
- 从表面上看,对象引用变量中似乎存放了一个对象,但事实上,它只是包含了对该对象的引用。严格地讲,对象引用变量和对象是不同的,但是大多數情况下,这种差异是可以忽略的。因此,可以简单地说 myCircle 是一个 Circle 对象,而不用冗长地描述说, myCircle 是一个包含对 Circle 对象引用的变量
- 另外在 Java 中,数组被看作是对象。数组是用 new 操作符创建的。一个数组变量实际 上是一个包含数组引用的变量。
- 创建匿名对象
new Circle()或者 System.out.println("Area is " + new Circle(5).getArea();
前面的语句创建了一个 Circle 对象。后面的语句创建了一个 Circle 对象,然后调用它的 getArea 方法返回其面积
基本类型变量和引用类型变量的区别
存储的值
每个变量都代表一个存储值的内存位置。声明一个变量时,就是在告诉编译器这个变量 可以存放什么类型的值。
赋值
基本类型赋值:
引用类型赋值:
注意:
- 如图 9-9 所示,执行完赋值语句 C1-C2 之后,C1指向 C2 所指的同一个对象。C1 以前引用的对象就不再有用,因此,现在它就成为垃圾。垃圾会占用内存空间。Java 运行系统会检测垃圾并自动回收它所占的空间,这个过程称为垃圾回收(garbage collection)。
- 如果你认为不再需要某个对象时,可以显式地给该对象的引用变量赋null 值。如 果该对象没有被任何引用变量所引用,Java 虚拟机将自动回收它所占的空间。
引用数据和NULL
如果一个引用类型的数据域没有引用任何对象,那么这个数据域就有一个特殊的 Java 值 null,如图所示:
null 同 true 和 false— 样都是一个直接量。true 和 false 是 boolean 类型直接量, 而 null 是引用类型直接量。
- 引用类型数据域的默认值是 null
- 数值类型数据域的默认值是 0
- boolean 类型数据域的默认值是 false
- 而 char类型数据域的默认值是 ’\u00000。
特别注意:Java 没有给方法中(如main方法)的局部变量设置默认值,局部变量还是需要初始化