Java中的getName(), .class 和forName()的區(qū)別
- 首先這個(gè)函數(shù)或?qū)傩远际怯脕?lái)獲得一個(gè)類型的Class對(duì)象。每一個(gè)類型在java虛擬機(jī)中都對(duì)應(yīng)一個(gè)Class對(duì)象,該對(duì)象用于java虛擬機(jī)加載一個(gè)該類型的對(duì)象到內(nèi)存中。
- 其次getClass都是用于一個(gè)Custom object的,.class用于一個(gè)類型(系統(tǒng)封裝或者用戶自定義類型),比如People類型,而forName 是Class類型的一個(gè)靜態(tài)函數(shù),用于獲得一個(gè)類型的Class對(duì)象。
- getClass返回的Class對(duì)象,是在運(yùn)行時(shí)確定的,而另外兩個(gè)都是在編譯的時(shí)候確定的。
假如我們有兩個(gè)類型People和Student,其中student繼承自People。如果執(zhí)行下面的代碼:
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;
posted on 2012-11-23 23:09 Chan Chen 閱讀(798) 評(píng)論(0) 編輯 收藏 所屬分類: Scala / Java