- 首先這個函數或屬性都是用來獲得一個類型的Class對象。每一個類型在java虛擬機中都對應一個Class對象,該對象用于java虛擬機加載一個該類型的對象到內存中。
- 其次getClass都是用于一個Custom object的,.class用于一個類型(系統封裝或者用戶自定義類型),比如People類型,而forName 是Class類型的一個靜態函數,用于獲得一個類型的Class對象。
- getClass返回的Class對象,是在運行時確定的,而另外兩個都是在編譯的時候確定的。
假如我們有兩個類型People和Student,其中student繼承自People。如果執行下面的代碼:
People people =
new
Student();
try{
System.out.println(Class.forName("People") == People.class);
System.out.println(Class.forName("People") == people.getClass());
System.out.println(people.getClass() == People.class);
System.out.println(Class.forName("People"));//People
System.out.println(people.getClass());//Student
System.out.println(People.class);//People
}catch(Exception e)
{
e.printStackTrace();
}
Student student = new Student();
try{
System.out.println(Class.forName("Student") == Student.class);
System.out.println(Class.forName("Student") == student.getClass());
System.out.println(student.getClass() == Student.class);
System.out.println(Class.forName("Student"));//Student
System.out.println(student.getClass());//Student
System.out.println(Student.class);//Student
}catch(Exception e)
{
e.printStackTrace();
}
-----------------------------------------------------
Silence, the way to avoid many problems;
Smile, the way to solve many problems;