【8】java面向对象 类的组合 JVM中内存原理 Object类的方法

类的组合
类和类之间的两种关系:
1.继承
2.组合:把一个类当作属性 例如private Tools tool;

非四类八种的全局变量 JVM在堆也会初始化为null
非四类八种的变量都只占一个字节,因为里面存放的是地址
非四类八种的数据类型,可选值只有两种,null或new
组合类一般前面加static,保证所有方法中都可以使用它
程序一运行起来,就会在堆中初始化类中的方法 ,常量池里面的方法会被加载到静态方法区,堆里面的方法会被加载到私有方法区。
静态方法区里面的方法是在栈中直接可以用的,而私有方法区里的方法被调用时首先要找堆,再通过堆去找这个方法,然后再把它拿到栈里去运行,例如ban.tools.getHight();
这样设计的目的就是为了不让静态方法去修改堆中的数据,因为常量池里面的数据只有一份,它无法区分改的是哪个,以最后修改的数据为主,而堆中可以有多份,并且数据互相独立,每一个都有相应的副本,各自改各自的内存空间。

在这里插入图片描述
Object类的方法
clone
分身术 多层影分身
不一定成功,可能会失败
使用时要用接口cloneable并抛出异常
该方法运行时底层自动调用toString方法,打印一个返回值

equals
比较两个栈中的局部变量指向的是不是同一块堆内存
我们可以通过ait+shift+s->Generate hashCode() and equals()重写它
重写之后是比较两个变量的内容是否相同
String类已经把equals方法重写过了,所以比较的是内容
hashCode()算法是通过哈希吗算法隐藏地址的一种算法,打印出的地址是隐藏的,
用系统方法重写后表示打印出真实地址

finalize
当垃圾回收器确定不存在对该对象的更多引用时,由垃圾回收器调用此方法
子类重写此方法,可以配置系统资源或执行其他清除。

toString
打印包名、类名+地址
重写后可以看到堆内存里面存放具体的数据

猜你喜欢

转载自blog.csdn.net/tcbdbd/article/details/89205184