成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java中反射機制詳解

開發 后端
反射:可以動態的獲取指定類中的成員,以及建立類對象。好處:提高了程序的擴展性。

反射:

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

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

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

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

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

  1. String.class----Class  
  2.  
  3.      Class class1=String.class;  
  4.  
  5.      String s="abc";  
  6.      Class class2=s.getClass();  
  7.  
  8.      Class class3 = Class.forName("java.lang.String");  

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

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

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

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

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

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

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

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

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

  1. interface PCI{   
  2.                    void open();  
  3.                    void close();  
  4.                }  
  5.                class MainBoard{  
  6.                    public void usePCI(PCI p){  
  7.                        p.open();  
  8.                        p.close();  
  9.                        }  
  10.                }  
  11.                class MainBoardDemo{  
  12.                    public static void main(String[] args){  
  13.                        MainBoard mb=new MainBoard();  
  14.                           //mb.usePCI(null);  
  15.                                mb.usePCI(NetCard);  
  16.                        }  
  17.                }  

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

  1. class NetCard implements PCI{  
  2.                       public void open();{  
  3.                              system.out.println("open");  
  4.                         }  
  5.                           public void close();{  
  6.                              system.out.println("close");  
  7.                         }  
  8.                 }  

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

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

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

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

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

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

配置文件conf.txt

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

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

原文鏈接:http://www.cnblogs.com/zxl-jay/archive/2011/09/25/2190585.html

【編輯推薦】

  1. 關于OpenJDK作為Linux平臺默認Java的解答
  2. Java Web框架Play Framework 2.0預覽版發布
  3. Java 8決定采用跟C#一樣的Lambda句法
  4. 深入Java,初探JVM
  5. Java中的IO整理完整版
責任編輯:艾婧 來源: 青春流水指間、的博客
相關推薦

2011-03-09 09:11:52

java反射機制

2011-04-01 14:50:56

Java的反射機制

2010-08-11 09:40:44

LINQ

2011-05-26 15:23:34

JavaReflection

2009-04-10 09:55:44

C#反射.NET

2012-04-05 13:50:38

Java

2010-02-04 11:23:25

C++反射機制

2017-03-24 09:44:33

Java反射機制

2017-05-17 15:28:15

Java反射機制

2009-02-03 09:42:53

JAVA類JVM指令forName方法

2025-02-05 12:22:21

2009-06-17 13:57:54

java實例Reflection

2011-06-08 10:06:32

C#

2022-10-21 14:12:06

2012-02-08 09:44:52

Java反射

2010-09-17 13:02:11

JAVA反射機制

2010-07-07 18:34:43

UML公共機制

2021-11-24 08:33:09

Android廣播機制應用程序

2010-09-17 12:39:51

JAVA反射機制

2012-02-08 09:53:25

Java反射
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91亚洲精选 | 亚洲天堂中文字幕 | 涩爱av一区二区三区 | 艹逼网| 国产精品明星裸体写真集 | 国产精品美女久久久免费 | 欧美成人一区二区 | 成人午夜免费在线视频 | 国产精品福利视频 | caoporn国产精品免费公开 | 国产精品视频久久 | 国产成人精品一区二区三区 | 国产久 | 亚洲成人免费视频在线观看 | 亚洲精品99 | 精品成人69xx.xyz| 国产女人第一次做爰毛片 | 久久久久久亚洲国产精品 | 欧美日韩看片 | 亚洲乱码一区二区三区在线观看 | 国产一区二区日韩 | 乱码av午夜噜噜噜噜动漫 | 精品欧美一区二区三区久久久小说 | 国产精品99久久久久久久久久久久 | 精品久久久久久一区二区 | 免费观看羞羞视频网站 | 国产精品国产三级国产aⅴ中文 | 久久久入口 | 久久久久久久久久久爱 | 亚洲毛片在线 | 日韩一区二区三区四区五区六区 | 韩日精品视频 | 午夜不卡一区二区 | 福利视频网站 | 又黑又粗又长的欧美一区 | 91久久网站 | 日本视频一区二区 | 成人久久久 | 国产精品久久久99 | 欧美综合一区 | 国产一区二区电影 |