面向对象基础

本文详细介绍了Java中对象的内存分配,包括类在方法区的存储、栈与堆内存的区别以及对象创建的过程。强调了当两个变量指向同一对象时,修改内容的同步性。此外,还探讨了构造器的作用,包括无参数和有参数构造器,并解释了this关键字的用途,特别是在解决同名变量冲突时的角色。最后,文章提到了Java的自动垃圾回收机制。
摘要由CSDN通过智能技术生成

对象的内存图: 类在哪里存放?

左侧程序的运行方式解释:首先是有一个Car类和 Test类, Car类中存放的是该类的属性和方法,当Test.class加载到方法区之后开始加载main方法,此时Car.class也加载到方法区中 随之的还有成员变量name和price,还有成员方法,在主方法中,当创建car1对象时,他会现在栈中开辟一个c1的对象,然后当new这个对象的时候,会在堆内存中再开辟一块空间,这个空间里存放的就是该类的属性和方法成员的引用地址,而引用地址就是成员方法在方法区中的地址,最后会将堆内存中的对象空间的地址赋值给栈内存中的c1。

那如果是两个变量指向同一对象的情况呢?

 当执行完 Student s2 = s1这个语句的时候,栈内存中会开辟一个s2空间指向s1空间中记录地址的堆内存中的对象空间,因此此时当用s2来修改内容的时候s1中的内容也会被修改因为这两个对象指向的是同一片空间。 

P.s: Java存在自动垃圾回收器,当s1和s2为null的时候,此时堆内存中的对象就没有值也就没有用了,此时java会自动将其清理掉。

构造器

构造器的作用:

无参数构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值。初始化对象属性,例如String类型的就为null,Int类型的为0.....
有参数构造器:在初始化对象的时候,同时可以接收参数为对象进行赋值。

细节:当你定义一个类时,java会默认自带无参构造器,但是当你写了有参构造器但是没写无参构造器时会报错,因为 有参构造器会覆盖无参构造器,这个时候就要自己手动去写一个无参构造了。

this关键字

this可以出现在构造器和成员方法中

this的作用:代表当前对象的地址,谁调用的方法用的就是谁的地址。

l 可以用于指定访问当前对象的成员变量、成员方法。最大的作用就是区分同名变量,例如你在方法中传递参数的参数名与你类中的变量名相同,但是这个时候你想将参数传递给对象的属性,但是此时他会因为变量名对参数本身进行访问。

例如:

public Car(String name,double price)
{
    price = price;
    name = name;
}

 此时你如果想通过构造器来给对象属性赋值的话 就会出现下面这种情况

Car c = new Car("奔驰",45);

 因为在这个构造方法中,因为就近原则因此传递进来的price不会赋值给类中属性的price,他只会自己访问自己一边,因此test中打印类中属性为默认值。因此我们如果想得到传进来的值应该这样修改代码。

public Car(String name,double price)
{
    this.price = price;
    this.name = name;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值