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

Java--getClass()和.Class的區(qū)別

時間:2020-05-08 22:56:38 類型:JAVA
字號:    

  在程序運行時期動態(tài)獲得對象類型信息的操作,對比傳統(tǒng)編程和反射的區(qū)別。

  傳統(tǒng)編程:在編譯階段決定使用的類型

  反射:動態(tài)獲得類型

  每個類都會產(chǎn)生一個對應(yīng)的Class對象,也就是保存在.class文件。所有類都是在對其第一次使用時,動態(tài)加載到JVM的,當(dāng)程序創(chuàng)建一個對類的靜態(tài)成員的引用時,就會加載這個類。Class對象僅在需要的時候才會加載。

  類加載器首先會檢查這個類的Class對象是否已被加載過,如果尚未加載,默認(rèn)的類加載器就會根據(jù)類名查找對應(yīng)的.class文件。

  獲得Class對象的三種方式

  Object的getClass()

  靜態(tài)加載.class

  通過Class的靜態(tài)方法forName(String className),最為常用

  反射通俗理解是把類中各個組成部分映射成一個對象。加載過程:

  反射加載類,JVM會檢測是否有.class類文件

  如果沒有,則會把.class文件加載從磁盤中加載進(jìn)內(nèi)存

  自動創(chuàng)建一個Class對象,通過這個對象可以得到要創(chuàng)建的對象實例

  getClass和.Class區(qū)別?

  我們一般所使用的對象都直接或間接繼承自O(shè)bject類,getClass()是Object類的方法,它可以獲得一個實例的類型類。

  類型類指的是代表一個類型的類,因為一切皆是對象,類型也不例外,在Java使用類型類來表示一個類型。所有的類型類都是Class類的實例。

  public static void main(String[] args) {

  ClassA a=new ClassA();

  System.out.println(a.getClass());

  System.out.println(ClassA.class);

  }

  對象a是A的一個實例,ClassA是某一個類,在Java中表示一個特定類型的類型類可以用“類型.class”的方式獲得,因為a.getClass()獲得是ClassA的類型類,也就是ClassA.class。所以ClassA.class和a.getClass()是一樣的。

  類型類是一一對應(yīng)的,父類的類型類和子類的類型類是不同的,因此,假設(shè)ClassA是ClassB的子類,那么ClassB.class和a.getClass是不一樣的。

  getClass方法,有多態(tài)能力,運行時可以返回子類的類型信息,

  .class是沒有多態(tài)的,是靜態(tài)解析的,編譯時可以確定類型信息。

  ————————————————

  版權(quán)聲明:本文為CSDN博主「mayfla」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

  原文鏈接:https://blog.csdn.net/mayfla/java/article/details/80096624


<