日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对于反射的一些总结(一)

發布時間:2023/12/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对于反射的一些总结(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.? Class類:??

1.1.?? 關于 Class 類的概述:????

??????? 我們要了解反射,首先就要了解 Class 這個類。接下來就先來了解一下Class類吧!

??????? Class 類的實例表示一個正在運行的 Java 應用程序的類和接口。例如:枚舉是一種類,注釋是一種接口。每個數組屬于被映射為 Class 類型的實例(對象)創建的一個類,所有具有相同元素類型和維數的數組都共享該 Class 對象?;镜?Java 類型(boolean、byte、char、short、int、long、float 和 double)和關鍵字 void 也表示為 Class 對象。

??????? Class 沒有公共構造方法。Class 對象是在類加載時由 Java 虛擬機以及通過調用類加載器中的 defineClass 方法自動構造的我們可以通過這個Class 類型的對象來進行得到一些信息:某個類的數據成員名、方法和構造器、某個類到底實現了哪些接口。

對于上面說這么多總結而言,就是下面的幾句話:

  對于每個類而言:

   ?、? 、JRE 都為其保留一個不變的 Class 類型的對象。一個 Class 對象包含了特定某個類的有關信息。

    ②? 、Class 對象只能由系統建立對象。

   ?、? 、一個類在 JVM 中只會有一個Class實例 每個類的實例都會記得自己是由哪個 Class 實例所生成。

1.2.?? 關于 Class 類中的方法:

  1.?? 如何獲取Class類的實例,可以通過三種方式來進行獲取!

?    ①、通過 class 屬性來進行獲取 Class 類對象,該方法最為安全可靠,程序性能更高。

      ?如 :Class clzz = String.class

?   ?、凇⑼ㄟ^對象的getClass()來進行獲取 Class類對象。這種方式最為少用。

??    ? ? ?如:String str = new String(); Class clazz = str.getClass();

    ?③、通過 Class 類的靜態方法 forName() 來進行獲取 Class類對象。這種方式最為常用。

???      ??如 :Class clazz = Class.forName(“java.lang.String”);

??? Class類的常用方法

方法名

功能說明

static Class forName(String name)

返回指定類名 name 的 Class 對象

Object newInstance()

調用缺省構造函數,返回該Class對象的一個對象(實例)

Object newInstance(Object []args)

調用當前格式構造函數,返回該Class對象的一個對象(實例)

getName()

返回此Class對象所表示的實體

(類、接口、數組類、基本類型或void)名稱

Class getSuperClass()

返回當前Class對象的父類的Class對象

Class [] getInterfaces()

獲取當前Class對象的接口

ClassLoader getClassLoader()

返回該類的類加載器

Class getSuperclass()

返回表示此Class所表示的實體的超類的Class

1.3.?? 什么是類加載器(ClassLoader)?

????   類裝載器是用來把類(class)裝載進 JVM 的。JVM 規范定義了兩種類型的類裝載器:啟動類裝載器(bootstrap)和用戶自定義裝載器(user-defined class loader)。 JVM在運行時會產生3個類加載器組成的初始化加載器層次結構 ,如下圖所示:

?    

  相關代碼:? ?

1 public void getClassLoaderName() { 2 3 // 獲取一個系統類加載。(這里是獲取的是當前類的類加載器)。 4 5 ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); 6 7 System.out.println(systemClassLoader); 8 9 // 獲取一個系統類加載的父類加載器擴展類加載器。 10 11 ClassLoader extensionClassLoader = systemClassLoader.getParent(); 12 13 System.out.println(extensionClassLoader); 14 15 // 獲取一個擴展類加載器的父類加載器引導類加載器。 16 17 ClassLoader classLoader = extensionClassLoader.getParent(); 18 19 System.out.println(classLoader); 20 21 } View Code

調用該方法后的執行結果:

?

  通過系統類加載器獲取 classpath 下的資源:

  InputStream in = this.getClass().getClassLoader().getResourceAsStream("test.properties");

  System.out.println(in);

那么接下來就來說一下反射(Reflection)參見地址?http://www.cnblogs.com/Vincent-NMT/p/6083106.html中的內容。

轉載于:https://www.cnblogs.com/Vincent-NMT/p/6083089.html

總結

以上是生活随笔為你收集整理的对于反射的一些总结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。