内存分析
内存分析1例题(无参构造器)
解释语句:Person p1 = new Person();
1 看等号右边 new Person 。Person是在方法区内,有字节码信息。
2 new一个对象放在堆里面。地址一般为16进制(图例为ox99,ox是16进制标志)person中有两个属性,无方法体。
3 p1是新对象,存放在栈里面。有位子存放堆里对应p1的地址数据。
内存分析2例题(有参构造器)
解释语句:Person p = new Person(1,20,”海淀”);
栈:局部变量,形参
堆:new出来的东西
方法区:字节码信息
解释语句:Person p = new Person(1,20,”海淀”);
1 从=右边开始解释,先加载出来Person的字节码信息(保存在方法区,)
2 参照字节码信息开始创造对象,有一个字节码信息指向,开辟完空间开始初始化(放入栈里面,a=1,b=20,c=ox99先进后出)
3 对于字符串“海淀”有专门的存储区域,在方法区,名字叫字符串常量池
特点:唯一(有直接用,没有就放进去)
4 id=a 即堆里面放入id=a,以此类推
5 当构造器执行完了,形参数据就没有用了,栈中的abc自动消除
6 当下图代码执行完成后,形成一个区域,名字随便写,例如0x88
7 把0x88赋给左侧p,p是局部变量放入栈,p中写地址0x88。
8 当这句话执行完了。p就没了,p指向的数据(堆中数据)也就没了,垃圾收集器收走了。
内存分析3例题
This–属性
This指的是当前对象自身。
你想要表示一个属性的时候,前面就加上this.,在重名的时候不可以省略,其他情况可省略。
This–方法
与其他方法中的代码相同(代码复用率低),引用this调用自身Person
/this./eat();//同一个类中this可省略
This–构造器
方法可以用this传递,构造器也可以。
this(age); //this修饰构造器必须放在第一行,与方法的表示方式不同。
Static
Static修饰的东西先与对象存在(static在方法区内,里面有没有东西都会存在。)
Static中只会保留最后的数值。
是不是所有的属性都有static修饰?
对于不常用的内容你用static修饰就消耗空间了。
Static修饰怎么调用:
(1)对象名.属性名:systom.out.println(t1.sid);
(2)类名.属性名:----------推荐
Test.sid=90;
System.out.println(Test.sid);