对象的内存解析

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依次出栈,堆里的东西被垃圾回收。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值