java 对象变量_java面向对象中的对象创建与使用

原标题:java面向对象中的对象创建与使用

程序员很难找到女朋友?这个不存在的,我们分分钟就可以new出无数个对象!后宫佳丽三千人,就是这么拽!

28fa30371083be301902d3924b559ead.png

好了,牛皮吹完了还是继续干活把!

今天的技术笔记是分享:java面向对象中的对象创建与使用。

接下来演示如何用类创建对象,创建对象之前,必须先声明对象,其语法格式如下:

类名 对象名;

类是自定义类型,也是一种引用类型,因此该对象名是一个引用变量,默认值为null,表示不指向任何堆内存空间。接下来需要对该变量进行初始化,Java使用new关键字来创建对象,也称实例化对象,其语法格式如下:

对象名 = new 类名();

上述示例中,使用new关键字在堆内存中创建类的对象,对象名引用此对象。声明和实例化对象的过程可以简化,其语法格式如下:

类名 对象名 = new 类名();

接下来演示创建Person类的实例对象,具体示例如下:

Person p = new Person();

上述示例中,“Person p”声明了一个Person类型的引用变量,“new Person()”为对象在堆中分配内存空间,最终返回对象的引用并赋值给变量p,如图所示:

f2f123961f35a44e1380b225b05f4502.png

对象实例化后,就可以访问对象的成员变量和成员方法,其语法格式如下:

对象名.成员变量;

对象名.成员方法();

接下来通过一个案例来学习访问对象的成员变量和调用对象的成员方法,如例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 }

程序的运行结果如图所示。

502393ec2a9fe0943700aefe78a626f1.png

例4-1中,实例化了两个Person对象,并通过“对象.属性”的方式为成员变量赋值,通过“对象.方法”的方式调用成员方法。从运行结果可发现,变量p1、p2引用的对象同时调用了say()方法,但输出结果却不相同。这是因为用new创建对象时,会为每个对象开辟独立的堆内存空间,用于保存对象成员变量的值。因此,对变量p1引用的对象属性赋值并不会影响变量p2引用对象属性的值。为了更好地理解,变量p1、p2引用对象的内存状态如图所示。

1fbeb1d944cb69671ea64371204eebfc.png

例4-1中没有为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 }

程序的运行结果如图所示。

f6dbea04f77e5ae562a5897894f0161e.png

例4-3中,第16行代码p2被赋值为p1后,会断开原有引用的对象,而和p1引用同一对象。因此打印如图4.6所示结果。此时,p2原有引用的对象不再被任何变量所引用,就成了垃圾对象,不能再被使用,只等待垃圾回收机制进行回收。垃圾产生的过程,如图所示。

aaefaf673c73cecd71ebdd982a1a1b09.png

图中,首先实例化两个对象p1和p2,其次分别为p1和p2的属性赋值,最后将p2从新赋值为p1,p2将断开原有引用,此时被断开引用的对象,也不被其他引用变量所引用,就成为垃圾空间,等待被回收。

好了,记录完毕,欢迎各位大神批评指正!返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值