亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中反射機制有什么用

發布時間:2021-12-27 10:18:27 來源:億速云 閱讀:170 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“Java中反射機制有什么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Java中反射機制有什么用”這篇文章吧。

反射:

可以動態的獲取指定類中的成員,以及建立類對象。

好處:提高了程序的擴展性。

張三,李四等這些生活中的對象,可以通過Person類的形式對其進行描述。

當class文件產生以后,這些class文件也是生活中的事物,那么對這些class文件也可以進行描述,該描述對應的類型就是Class。

在java中,每一個字節碼文件都有一一個與之對應的Class對象。不僅包括引用數據類型,也包括基本數據類型。int.Class

String.class----Class        Class class1=String.class;        String s="abc";       Class class2=s.getClass();        Class class3 = Class.forName("java.lang.String");

以上就是獲取字節碼文件的三種方式。

   以前操作對象的時候用的是new關鍵字完成,并通過對象.成員方式進行調用

Person p= new Person();         //1.光加載Person.class文件。         //2.對對象進行初始化。         p.function("heihei");         //在對象調用成員方法時,需要明確兩個因素:                 1.對象  2.獲取參數列表

現在可以通過字節碼對象完成以上動作。

//加載Person.class文件,獲取Person.class文件對象的Class對象         Class clazz = Class.forName("Person");         //通過字節碼文件對象,對指定類進行創建并初始化。         Person p=(Person)clazz.newInstance();         //通過對象調用成員         //p.function("heihei");

類可以作為參數進行傳遞,那么方法也一樣可以作為參數進行傳遞,因為方法存在于字節碼文件內, 所以可以通過Class對象獲取字節碼文件中的內容。

Method m =  Class.getMethod("function",String.class);          m.invoke(p,"heihei");

類或者方法都作為參數傳遞這樣對于開發到底有那些好處呢?

需求:設計一個主板,為了提高后期的擴展性,也就是為了后期提高電腦的額功能,對外提供了PCI的接口。以方便電腦功能的擴展。

interface PCI{                      void open();                     void close();                 }                 class MainBoard{                     public void usePCI(PCI p){                         p.open();                         p.close();                         }                 }                 class MainBoardDemo{                     public static void main(String[] args){                         MainBoard mb=new MainBoard();                            //mb.usePCI(null);                                 mb.usePCI(NetCard);                         }                 }

后期,要進行電腦功能的擴展,需加入一個網卡,只需要定義一個網卡類實現PCI接口,只要覆蓋這個規則,主板就可以使用該板卡。

class NetCard implements PCI{                        public void open();{                               system.out.println("open");                          }                            public void close();{                               system.out.println("close");                          }                  }

那么為了使用其網卡,還需要做一個步驟就是在已定義好的應用程序中,建立網卡對象,并作為參數傳入,那么就是對原有的程序進行修改。這樣不利于程序的健壯性。

可不可以在不修改源碼的基礎上運行后期出現的這些子類對象呢?

只要在前期設計時,將后期指定的類進行對象的建立,這樣后期的子類對象就不需要再建立對象,只要將子類名稱告知即可。

為了獲取后期對象,并在前期可以使用,或對外提供了一個配置文件。前期程序可以直接操作該配置文件,后期的子類只需要將子類名稱存入配置文件即可。

這時就需要動態的獲取指定的類并預先創建對象

就用到了反射機制。重新修改一下應用程序。             class MainBoardDemo{                      public static void main(String[] args){                          MainBoard mb=new MainBoard();                          File file=new File("conf.txt");                          BufferenReader buff = new BufferenReader(new FileReader(file));                          String className = buff.readLine();                          Class clazz = Class.forName(className);                          PCI p = (PCI)clazz.newInstance();                          mb.usePCI(p);                          }                  }

配置文件conf.txt

      當后期出現網卡或者聲卡的時候,只需要將該子類的全類名存入配置文件即可, 源程序不需要進行修改

      在該例中,可以了解,反射給我們的程序帶來了很強的擴展性。

以上是“Java中反射機制有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

华安县| 石首市| 武城县| 安多县| 保山市| 墨竹工卡县| 景德镇市| 金川县| 西充县| 大冶市| 和硕县| 巴林右旗| 乐平市| 普定县| 环江| 平陆县| 大冶市| 曲松县| 兰西县| 松潘县| 广河县| 曲周县| 双鸭山市| 含山县| 内黄县| 怀集县| 黔江区| 神农架林区| 西和县| 会理县| 恩施市| 明溪县| 遂昌县| 精河县| 桂阳县| 乐清市| 莫力| 兴宁市| 微博| 武威市| 阜宁县|