java有兩個(gè)獲得類名的方法getClass()和class(),這兩個(gè)方法看似一樣,實(shí)則不然。這兩個(gè)方法涉及到了java中的反射。.class 用于類 而 getClass()用于對(duì)象。.class和getClass()使用java程序可以得到運(yùn)行時(shí)的類,其實(shí)得到就是 Class一個(gè)泛型 的 Class對(duì)象 T就是你所調(diào)用對(duì)象的運(yùn)行時(shí)的類 的類型。
反射
所謂反射,可以理解為在運(yùn)行時(shí)期獲取對(duì)象類型信息的操作。傳統(tǒng)的編程方法要求程序員在編譯階段決定使用的類型,但是在反射的幫助下,編程人員可以動(dòng)態(tài)獲取這些信息,從而編寫更加具有可移植性的代碼。嚴(yán)格地說(shuō),反射并非編程語(yǔ)言的特性,因?yàn)樵谌魏我环N語(yǔ)言都可以實(shí)現(xiàn)反射機(jī)制,但是如果編程語(yǔ)言本身支持反射,那么反射的實(shí)現(xiàn)就會(huì)方便很多。
聯(lián)系
一般情況下,getclass()方法和class()方法是等價(jià)的,都可以獲得一個(gè)類型名,例如下面:
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()是一個(gè)類的實(shí)例所具備的方法,而class()方法是一個(gè)類的方法。
另外getClass()是在運(yùn)行時(shí)才確定的,而class()方法是在編譯時(shí)就確定了。
例如下面的程序:
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主要用于反射機(jī)制。
———————————————— 版權(quán)聲明:本文為CSDN博主「youngogo」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/youngogo/article/details/82080425