一、需要重写(3种)
1.toString()
返回String类型,是将对象以字符串的形式输出
重写:
public String toString(){
}
2.equals(Object obj)
返回Boolean类型,用于判断this和obj是否相等
重写:
public boolean equals(Object obj){
if(this == obj) return true;
if(obj == null) return false;
Student other = (Student) obj; // 强转
}
3.hashCode()
返回int类型,生成对象的哈希值,与内存中的存储位置有关
默认实现使用C++底层代码,计算方式通过内存空间来计算,new出的对象,物理位置都不同,因此每个new对象哈希值都不一样
重写规则: 与equals方法一致
- equals判断相等的两个对象,必须保证哈希值一样;不相等,保证哈希值尽量不同。
二、类加载相关(3种)
4.Class getClass()
加载-方法区-字节码对象
加载工具:类加载器 ClassLoader(反射)
加载的触发条件:
- 实例化对象——new
- 静态方法/静态变量
- 使用子类时,父类需要加载
- Class.forName(“类名”(——java.lang.String包中))——手动加载
- String.class->获得类的字节码对象
5.Object clone():浅克隆-复制
浅克隆:clone() -> 复制引用
深克隆:对象的读写 -> 复制对象
若要使用clone()方法,则要求对象是可以克隆的
Cloneable():为了标记是可克隆的,没有任何方法/属性,不常用
6。void finalize() - GC——垃圾回收
内存泄漏:内存被无效对象占用
- GC:在程序运行时开始启动,不定时回收所标记的垃圾,也可以手动调用GC->System.gc()
- 没有引用的对象会被内存标记为垃圾,故原则上,java中是不存在内存泄漏的
- finalize()在对象被回收时调用
三、线程相关(5种)
7-9.wait()*3
导致线程进入等待,必须配合锁来使用。
10、11.notify()/notifyAll()
notify() —— [随机]唤醒[一个]对象上等待的线程
notifyAll() —— 唤醒所有对象上等待的线程