左侧程序的运行方式解释:首先是有一个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://lswzjz.com/article/coedgc.html