Object
11个方法,无构造器
1.String toString() - 将对象以字符串形式输出
类中需重写
System.out.println(a.toString());
2.boolean equals(Object obj) - 判断this和obj是否相等
System.out.println((new String("string").equals(new String("string"))));
3.native int hashCode() - 生成对象的哈希值,内存中的存储位置有关
默认实现使用c++底层代码,计算方式-通过内存空间来计算,new出的对象,物理位置都不同,因此每个new对象哈希值都不同
HashSet/HashMap 会使用哈希值,hashCode()
重写的规则:和equals方法一致
equals判断相等的两个对象,必须保证哈希值一样
equals判断不相等的两个对象,哈希值尽量不同
4.Class getClass()
加载 - 方法区 - 字节码对象
加载的触发条件:
------------------------- 类加载器ClassLoader(反射)
--------------------------实例化对象 new
--------------------------静态方法/静态变量
--------------------------使用子类,父类加载
Class.forName(“java.lang.String”) – 手动加载指定类
String.class -> 获得类的字节码对象
类加载:类的字节码信息加载到JVM的方法区中
Class 类型 - 对象 - 一个
5.Object clone():克隆-复制
浅克隆:clone() - 复制引用
深克隆:对象的读写 - 复制对象
要求对象是可以克隆的 Cloneable(空) 标记是可克隆的
6.void finliaze() - GC 垃圾回收
内存泄露:内存被无效对象占用
GC:在程序运行时开始启动,不定时回收内存所标记的垃圾
也可以手动调用GC,System.gc()
没有引用的对象,会被内存标记为垃圾
原则上,Java中是不存在内存泄漏的
finliaze() 在对象被回收时调用的
跟线程有关的方法(5种)
wait()*3:线程归还时间片
notify()/notifyAll():唤醒wait()的线程