千锋java技术培训教师分享java面向对象中的对象创立与运用。类是对象的笼统,为对象定义了属性和行为,但类自身既不带任何数据,也不存在于内存空间中。而对象是类的一个详细存在,既具有独立的内存空间,也存在共同的属性和行为,属性还能够随着本身的行为而发作改动。接下来演示如何用类创立对象,创立对象之前,必需先声明对象,其语法格式如下:
类名 对象名;
类是自定义类型,也是一种援用类型,因而该对象名是一个援用变量,默许值为null,表示不指向任何堆内存空间。接下来需求对该变量停止初始化,Java运用new关键字来创立对象,也称实例化对象,其语法格式如下:
对象名 = new 类名();
上述示例中,运用new关键字在堆内存中创立类的对象,对象名援用此对象。声明和实例化对象的过程能够简化,其语法格式如下:
类名 对象名 = new 类名();
接下来演示创立Person类的实例对象,详细示例如下:
Person p = new Person();
上述示例中,“Person p”声明了一个Person类型的援用变量,“new Person()”为对象在堆中分配内存空间,最终返回对象的援用并赋值给变量p,如图4.1所示。
对象实例化后,就能够访问对象的成员变量和成员办法,其语法格式如下:
对象名.成员变量;
对象名.成员办法();
接下来经过一个案例来学习访问对象的成员变量和调用对象的成员办法,如例4-1所示。
例4-1 TestPersonDemo.java
1 class Person {
2 String name; // 声明姓名属性
3 int age; // 声明年龄属性
4 public void say() { // 定义显现信息的办法
5 System.out.println("姓名:"+name+",年龄:"+age);
6 }
7 }
8 public class TestPersonDemo {
9 public static void main(String[] args) {
10 Person p1 = new Person(); // 实例化第一个Person对象
11 Person p2 = new Person(); // 实例化第二个Person对象
12 p1.name = "张三"; // 为name属性赋值
13 p1.age = 18; // 为age属性赋值
14 p1.say(); // 调用对象的办法
15 p2.say();
16 }
17 }
程序的运转结果如图4.2所示。
实例化了两个Person对象,并经过“对象.属性”的方式为成员变量赋值,经过“对象.办法”的方式调用成员办法。从运转结果可发现,变量p1、p2援用的对象同时调用了say()办法,但输出结果却不相同。这是由于用new创立对象时,会为每个对象开拓独立的堆内存空间,用于保管对象成员变量的值。因而,对变量p1援用的对象属性赋值并不会影响变量p2援用对象属性的值。为了更好天文解,变量p1、p2援用对象的内存状态如图4.3所示。
对象的内存关系
例如图中没有为p2对象的成员变量赋值,但从图4.3中可发现,p2对象的name值为null,age值为0。这是由于在实例化对象时,Java虚拟时机自动为成员变量停止初始化,依据成员变量的类型赋相对应的初始值。
另外,需要我们留意的是,一个对象能被多个变量所援用,当对象不被任何变量所援用时,该对象就会成为渣滓,不能再被运用。接下来演示渣滓是如何产生的,如例4-2所示。
例4-2 TestObjectRef.java
1 class Person {
2 String name; // 声明姓名属性
3 int age; // 声明年龄属性
4 public void say() { // 定义显现信息的办法
5 System.out.println("姓名:"+name+",年龄:"+age);
6 }
7 }
8 public class TestObjectRef {
9 public static void main(String[] args) {
10 Person p1 = new Person(); // 实例化第一个Person对象
11 Person p2 = new Person(); // 实例化第二个Person对象
12 p1.name = "张三"; // 为p1对象name属性赋值
13 p1.age = 18; // 为p1对象age属性赋值
14 p2.name = "李四"; // 为p2对象name属性赋值
15 p2.age = 28; // 为p2对象age属性赋值
16 p2 = p1; // 将p1对象传送给p2对象
17 p1.say(); // 调用对象的办法
18 p2.say();
19 }
20 }
程序的运转结果如图所示。
例图中,第16行代码p2被赋值为p1后,会断开原有援用的对象,而和p1援用同一对象。因而打印如图4.6所示结果。此时,p2原有援用的对象不再被任何变量所援用,就成了渣滓对象,不能再被运用,只等候渣滓回收机制停止回收。渣滓产生的过程,如图4.5所示。
图上图中,首先实例化两个对象p1和p2,其次分别为p1和p2的属性赋值,最后将p2重新赋值为p1,p2将断开原有援用,此时被断开援用的对象,也不被其他援用变量所援用,就成为渣滓空间,等候被回收。
想要学习java技术开发,能够参考千锋提供的java学习路线,这个Java学习路线罗列了各阶段完好的java学习技术问题,依据千锋提供的java学习路线图,能够让你对学好java技术开发需求控制的学问有个明晰的理解,并能快速入门java开发。