上圖中除了registerNatives方法用于注冊(cè)本地方法朵你。
getClass方法
可以返回這個(gè)實(shí)體的Class對(duì)象各聘,可以用來獲得這個(gè)類的元數(shù)據(jù)。在反射中經(jīng)常使用抡医。
clone方法
被用來拷貝一個(gè)新對(duì)象躲因。在Java中使用等號(hào)只是拷貝對(duì)象的引用并不是對(duì)象,需要拷貝對(duì)象的時(shí)候忌傻,可以借助clone方法大脉。
要通過clone方法復(fù)制某一個(gè)對(duì)象,在該類中必須實(shí)現(xiàn)java.lang.Cloneable接口水孩。
下面的代碼將演示淺拷貝镰矿。
class Province{
private String name;
Province(String name){
this.name = name;
}
}
@Data
public class Student implements Cloneable{
private String name;
private int age;
private Province province;
public Student(String name, int age, Province province) {
this.name = name;
this.age = age;
this.province = province;
}
@Override
protected Object clone() {
try {
return super.clone();
}catch (CloneNotSupportedException e){
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
Province province = new Province("Shanxi");
Student student1 = new Student( "student1",23, province);
Student student2 = (Student) student1.clone();
student1.setName("student2");
System.out.println(student1.getName());
System.out.println(student2.getName());
}
}
toString方法
toString提供對(duì)象的字符串表示形式。
類Object的默認(rèn)toString()方法返回一個(gè)字符串俘种,該字符串包括該對(duì)象的類名稱衡怀,"@"字符以及該對(duì)象的哈希碼的無符號(hào)十六進(jìn)制表示形式。
當(dāng)需要打印對(duì)象引用時(shí)安疗,toString方法就會(huì)被調(diào)用抛杨。
public class Student {
private String name;
private int age;
public Student(int age, String name){
this.age = age;
this.name = name;
}
public static void main(String[] args) {
Student student = new Student(23, "mianjingxiangjie");
System.out.println(student.toString());
}
}
打印出的結(jié)果是:
Student@4554617c
hashCode方法
對(duì)于每個(gè)對(duì)象,JVM都會(huì)生成一個(gè)唯一的數(shù)字荐类,即哈希碼怖现。它為不同的對(duì)象返回不同的整數(shù)。這個(gè)方法為HashMap玉罐、HashSet等方法提供支持屈嗤。針對(duì)上面的toString方法的演示代碼中,添加一個(gè)hashcode方法吊输,指定對(duì)象的哈希碼饶号。
@Override
public int hashCode() {
return 200;
}
打印的結(jié)果將為:
Student@c8
其中c8是16進(jìn)制表示,轉(zhuǎn)化為10進(jìn)制就是12*16+8=200季蚂,正好是hashcode的返回值茫船。
equals方法
被用來比較兩個(gè)對(duì)象是否相等。在重寫equals的時(shí)候也需要重寫hashCode方法扭屁。
HashMap和HashSet中判兩個(gè)對(duì)象是否相等算谈,首先比較hashCode,如果hashCode相等才回執(zhí)行equals方法料滥。
finalize方法
這個(gè)方法在垃圾回收之前被執(zhí)行然眼,可以通過重寫finalize方法來重置系統(tǒng)資源,執(zhí)行清理活動(dòng)并且最大程度的減少內(nèi)存泄漏葵腹。
可以通過下面的實(shí)例來測(cè)試:
public class Student {
private String name;
private int age;
public Student(int age, String name){
this.age = age;
this.name = name;
}
public void finalize(){
System.out.println("對(duì)象被回收高每!");
}
public static void main(String[] args) {
Student student = new Student(23, "mianjingxiangjie");
System.out.println(student.toString());
student = null;
System.gc();
}
}
上面的代碼會(huì)輸出如下結(jié)果:
Student@4554617c
對(duì)象被回收屿岂!
wait方法
調(diào)用線程放棄鎖并且進(jìn)入睡眠狀態(tài),直到其他線程進(jìn)入同一個(gè)monitor并且執(zhí)行notify喚醒線程鲸匿。
notify雁社,notifyAll 方法
和wait相反,用于喚醒線程晒骇。