JAVA基础关于---内存

我们就来探究一下         内存里的天地。
        
        首先呢,我们把mian()调出来:
[java]  view plain  copy
  1. public static void main(String[] args){        Person person1=new Person();        //new了一个系统默认的Person的构造方法  
  2.         person1.getInfo();  
  3.         //************************  
  4.         person1.name="米老师(1)";  
  5.         person1.age=19;  
  6.         person1.getInfo();              //赋值区  
  7.         //************************  
  8.         Person person2=new Person("米老师",18);     //new是Person的重载的构造方法,内带参数name,age  
  9.         person2.getInfo();  
  10.         //**************************  
  11.         Teacher teacher1=new Teacher();           
  12.         teacher1.getInfo();                     //重写父类Person类的getInfo方法  
  13.         //**************************  
  14.         teacher1.name="姜老师1";  
  15.         teacher1.age=21;  
  16.         teacher1.sex="女1";  
  17.         teacher1.getInfo();             //赋值区  
  18.         //**************************  
  19.         Teacher teacher2=new Teacher("姜老师",20,"女");  
  20.         teacher2.getInfo();  
  21.   }  


首先,是第一句
[java]  view plain  copy
  1. Person person1=new Person();  

我们知道,他调用的是Person构造方法中那个没有参数的,所以执行完这一句,内存中是什么样子的呢?



这就是为什么getInfo方法中打印出来,name为null,age为0,因为name是string类型,里面没有东西,所以是null,而age是int类型,默认等于0;


那接下来的赋值语句在内存中又是如何体现的呢?



执行完这个操作后,处于栈那得的局部变量被垃圾回收机制清除,变成这样:



栈里有一个person1,指向堆里对应的内容


那第二种有参数的构造方法(方法重载)又是个什么东西呢?在内存中怎样体现,结合person1:



Person(String _name,int _age)构造方法有自己的变量_name和_age,_name和_age把值赋给Person类的成员变量name,age然后进而改变堆里面的属性值,当该方法完成后,栈里面回收垃圾,




接下来就是老师Teacher的实例化了

那对于teacher1来说,是个什么情况呢?



new完成后,堆里面有这么个东西,其实吧,name和age是由父类Person继承来的,而Teacher还有一个自己的sex属性,所以是这么个情况,变现成这样,而他的赋值操作和上面Person是一样的


清理垃圾


我想剩下那个就不用我画了吧,大家也试着画一下。


那在这,我还有一个问题,“父类的引用指向子类的对象,在这个情况下,父类的引用只可以访问子类继承于父类的那一部分属性和方法以及子类重写的父类的方法在Teacher对应的内存图里面又该怎么体现呢?”
用代码来说就是
[java]  view plain  copy
  1. Person teacher1=new Teacher();  

我的理解是,Person定义了对象teacher1的类型是Person类型,他是把teacher1当成一个人来看,而不是一个老师,所以他只能拥有person具有的属性,而不能访问子类teacher自己定义的方法。teacher在这里只是一个人,不是一个老师



现在大家明白了吧,接下来大家可以去查一下,如何让teacher1的sex属性上面有值呢?也就是说,输出我的性别是男或者女!其实这个问题我们已经解决了。好好看看吧
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值