日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

.class和getClass()深度理解

時(shí)間:2020-01-29 16:23:05 類型:JAVA
字號(hào):    

  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


<