189 8069 5689

面向对象基础-创新互联

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

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比齐河网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式齐河网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖齐河地区。费用合理售后完善,10多年实体公司更值得信赖。

左侧程序的运行方式解释:首先是有一个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;
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站题目:面向对象基础-创新互联
标题来源:http://cdxtjz.cn/article/coedgc.html

其他资讯