java有兩個獲得類名的方法getClass()和class(),這兩個方法看似一樣,實則不然。這兩個方法涉及到了java中的反射。.class 用于類 而 getClass()用于對象。.class和getClass()使用java程序可以得到運行時的類,其實得到就是 Class一個泛型 的 Class對象 T就是你所調(diào)用對象的運行時的類 的類型。
反射
所謂反射,可以理解為在運行時期獲取對象類型信息的操作。傳統(tǒng)的編程方法要求程序員在編譯階段決定使用的類型,但是在反射的幫助下,編程人員可以動態(tài)獲取這些信息,從而編寫更加具有可移植性的代碼。嚴格地說,反射并非編程語言的特性,因為在任何一種語言都可以實現(xiàn)反射機制,但是如果編程語言本身支持反射,那么反射的實現(xiàn)就會方便很多。
聯(lián)系
一般情況下,getclass()方法和class()方法是等價的,都可以獲得一個類型名,例如下面:
class A{ public void func(){ } } public class Test { public static void main(String[] args) { A a = new A(); System.out.println(a.getClass()+" "+A.class); } }
輸出的結(jié)果為:class A class A
區(qū)別:
兩者最直接的區(qū)別就是,getClass()是一個類的實例所具備的方法,而class()方法是一個類的方法。
另外getClass()是在運行時才確定的,而class()方法是在編譯時就確定了。
例如下面的程序:
class Father{ public void showName() { System.out.println("Father..."); } } class Child extends Father{ public void showName() { System.out.println("children"); } }
Father father = new Child();
System.out.println(Father.class); 結(jié)果是 Father
System.out.println(father.getClass()); 結(jié)果是Child
Class主要用于反射機制。
———————————————— 版權(quán)聲明:本文為CSDN博主「youngogo」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/youngogo/article/details/82080425