最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Class類的作用與深入理解

 更新時(shí)間:2017年10月16日 17:07:03   作者:沖雪  
這篇文章主要介紹了Java中Class類的作用與深入理解的相關(guān)資料,希望通過本文能幫助到大家讓大家理解這部分內(nèi)容,需要的朋友可以參考下

Java中Class類的作用與深入理解

  在程序運(yùn)行期間,Java運(yùn)行時(shí)系統(tǒng)始終為所有的對(duì)象維護(hù)一個(gè)被稱為運(yùn)行時(shí)的類型標(biāo)識(shí)。這個(gè)信息跟蹤著每個(gè)對(duì)象所屬的類。JVM利用運(yùn)行時(shí)信息選擇相應(yīng)的方法執(zhí)行。而保存這些信息的類稱為Class。可能容易產(chǎn)生混淆,容易想到class。不過二者沒什么關(guān)系,class不過是描述類的一個(gè)關(guān)鍵字。而Class卻是保存著運(yùn)行時(shí)信息的類。

       它能做什么?Class類可以幫助我們?cè)诔绦蜻\(yùn)行時(shí)分析類,說白了就是獲取類中的值??赡芩查g就想到了反射,沒錯(cuò)!Class一般就是和反射配套使用的,因?yàn)槲覀兿駽lass提供一個(gè)類或一個(gè)類的類名,Class就可以提供我們很多信息,比如屬性/方法/修飾符/構(gòu)造器/類名等等。然后我們就可以進(jìn)一步進(jìn)行反射。不過,還是先來簡(jiǎn)單了解下Class類的內(nèi)容和使用方式吧!

        我們通常用以下方法來獲取Class對(duì)象:

 String str = new String();
 Class cl = str.getClass();

        因?yàn)檫@個(gè)類包含太多信息,所以我們可以通過它來獲得具體一個(gè)類的域/方法和構(gòu)造器。下面列舉一些常用的方法:

 public static void main(String[] args) throws Exception {
 // 以String.class為例
 String str = new String();
 Class cl = str.getClass();
 /**
  * 獲取包名+類名<br>
  * java.lang.String
  */
 cl.getName();
 /**
  * 只獲取類名 - String
  */
 cl.getSimpleName();
 /**
  * 獲取數(shù)組的Class對(duì)象<br>
  * 因?yàn)樗械腏ava類都繼承自O(shè)bject,數(shù)組也一樣.所以數(shù)組本身也是個(gè)Class, 得到數(shù)組的Class自然也可以轉(zhuǎn)回?cái)?shù)組.
  */
 cl.getComponentType();
 /**
  * 返回構(gòu)造器數(shù)組,包括超類的公有成員.
  */
 cl.getConstructors();
 /**
  * 返回方法數(shù)組,包括超類的公有成員.
  */
 cl.getMethods();
 /**
  * 返回域數(shù)組,包括超類的公有成員.
  */
 cl.getFields();
 /**
  * 返回全部構(gòu)造器數(shù)組,無論是public/private還是protected,不包括超類的成員.
  */
 cl.getDeclaredConstructors();
 /**
  * 返回全部域數(shù)組,無論是public/private還是protected,不包括超類的成員.
  */
 cl.getDeclaredFields();
 /**
  * 返回全部方法數(shù)組,無論是public/private還是protected,不包括超類的成員.
  */
 cl.getDeclaredMethods();
 /**
  * 獲取類前的修飾符
  */
 cl.getModifiers();
 }

        我們可以通過一個(gè)類來獲取Class對(duì)象,進(jìn)而獲取此類的信息。也可以通過全類名來獲取Class對(duì)象。

Class cl = Class.forName("java.lang.String");

        有了這個(gè)類的Class對(duì)象,我們就可以創(chuàng)建這個(gè)類的對(duì)象。最方便/快速的方法是調(diào)用newInstance()。默認(rèn)情況下,它默認(rèn)調(diào)用無參構(gòu)造來返回一個(gè)對(duì)象。

String str = (String)(Class.forName("java.lang.String").newInstance());

        以下是用Constructor通過獲取構(gòu)造器來創(chuàng)建對(duì)象:

// 調(diào)用無參的私有構(gòu)造函數(shù)
 Constructor c1 = Class.forName("java.lang.String")
  .getDeclaredConstructor();
 c1.setAccessible(true);
 String str1 = (String) c1.newInstance();
 // 調(diào)用有參的私有構(gòu)造函數(shù)
 Constructor c2 = Class.forName("java.lang.String")
  .getDeclaredConstructor(new Class[] { String.class });
 c2.setAccessible(true);
 String str2 = (String) c2.newInstance("hello");

        Class不是太難,因?yàn)樗褪莻€(gè)信息類。在運(yùn)行時(shí)跟蹤類,掌握類的全部信息。

如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Java 字符串連接的性能問題分析

    Java 字符串連接的性能問題分析

    這篇文章主要介紹了Java 字符串連接的性能問題分析的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • spring?jpa設(shè)置多個(gè)主鍵遇到的小坑及解決

    spring?jpa設(shè)置多個(gè)主鍵遇到的小坑及解決

    這篇文章主要介紹了spring?jpa設(shè)置多個(gè)主鍵遇到的小坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring Boot 添加MySQL數(shù)據(jù)庫及JPA實(shí)例

    Spring Boot 添加MySQL數(shù)據(jù)庫及JPA實(shí)例

    本篇文章主要介紹了Spring Boot 添加MySQL數(shù)據(jù)庫及JPA,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java8使用Stream流實(shí)現(xiàn)List列表查詢、統(tǒng)計(jì)、排序以及分組

    Java8使用Stream流實(shí)現(xiàn)List列表查詢、統(tǒng)計(jì)、排序以及分組

    List的Stream流操作可以簡(jiǎn)化我們的代碼,減少程序運(yùn)行的壓力,應(yīng)對(duì)上面的問題,下面這篇文章主要給大家介紹了關(guān)于Java8使用Stream流實(shí)現(xiàn)List列表查詢、統(tǒng)計(jì)、排序以及分組的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • springboot自定義Starter過程解析

    springboot自定義Starter過程解析

    這篇文章主要介紹了springboot自定義Starter過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java雙向循環(huán)鏈表的實(shí)現(xiàn)代碼

    java雙向循環(huán)鏈表的實(shí)現(xiàn)代碼

    這篇文章介紹了java雙向循環(huán)鏈表的實(shí)現(xiàn)代碼,有需要的朋友可以參考一下
    2013-09-09
  • SpringMVC DispatcherServlet組件實(shí)現(xiàn)解析

    SpringMVC DispatcherServlet組件實(shí)現(xiàn)解析

    這篇文章主要介紹了SpringMVC DispatcherServlet組件實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 詳解在Java中如何優(yōu)雅的停止線程

    詳解在Java中如何優(yōu)雅的停止線程

    線程,作為并發(fā)編程的基礎(chǔ)單元,允許程序同時(shí)執(zhí)行多個(gè)任務(wù),在Java中,線程可以理解為程序中的獨(dú)立執(zhí)行路徑,通過使用線程,開發(fā)者可以創(chuàng)建更加響應(yīng)靈敏、效率更高的應(yīng)用程序,本文小編將給大家介紹一下Java中如何優(yōu)雅的停止線程,需要的朋友可以參考下
    2023-11-11
  • java 中Object與Objects的區(qū)別在哪里

    java 中Object與Objects的區(qū)別在哪里

    這篇文章主要介紹了java 中Object與Objects的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • springboot+kafka中@KafkaListener動(dòng)態(tài)指定多個(gè)topic問題

    springboot+kafka中@KafkaListener動(dòng)態(tài)指定多個(gè)topic問題

    這篇文章主要介紹了springboot+kafka中@KafkaListener動(dòng)態(tài)指定多個(gè)topic問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論

山阴县| 垣曲县| 息烽县| 永福县| 和平县| 庆元县| 承德县| 海阳市| 马尔康县| 安乡县| 大洼县| 崇州市| 鄂托克旗| 武宁县| 瓦房店市| 宁晋县| 子长县| 山丹县| 盐边县| 焦作市| 瑞安市| 乡宁县| 乐东| 乳源| 洞头县| 涿鹿县| 涪陵区| 泰州市| 镇巴县| 周口市| 龙江县| 碌曲县| 谢通门县| 山东省| 安西县| 林甸县| 商丘市| 漳浦县| 万州区| 富裕县| 宿州市|