1.对象的产生:对象是类 new 出来的
Person p1 = new Person()
;执行完之后的状态
在上述语句中:等号左边以类名Person 做为变量类型定义了一个变量p1,来指向等号右边通过new 关键字创建的一个Person类的实例对象,变量p1 就是对象的引用句柄,对象的引用句柄是在栈中分配的一个变量,对象本身是在堆中分配的。
Person作为变量类型,p1作为被创建的一个persons类的实例对象,(他是栈中分配的一个变量,是new Person在堆中的一个地址码,本身则是在堆中分配的)
局部变量是保存在栈中,new出来的东西保存在堆中。
即:p1 是保存在栈中,new Person()是保存在堆中。
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的都是变量类型都是引用类型,如上面的Person及数组。
2.对象的使用:
创建新的对象之后,使用"对象名.对象成员"的格式,来访问对象成员
class TestPerson{
public static void main(String[] args){
Person p1 = new Person();
Person p2 = new Person();
p1.age = -30;
p1.shout();
p2.shout();
}
}
实例:
class Car{
String color = "red";
int sum = 4;
void show(){
int a = 10;
System.out.println("color=" +color+",num="+num);
}
}
class CarTest{
public static void main(String[] args){
Car c1 = new Car();
Car c2 = new Car();
c1.color ="blue";
c1.show();
c2.show();
}
}
个人总结:
1. 两个对象在栈中对应两个地址码,首先创建之后,堆里的color和num 都是有初始值的,赋值改变。
2. c1.show()执行完,a=10出栈,结束生命(后进先出),然后执行c2.show(),重新加载变量a,执行完成。
3.最后,a 出栈,c2,c1依次出栈,堆里的东西被垃圾回收。