Java--反射

來源:互聯網
上載者:User

標籤:--   object   access   構造   產生   color   edm   person   new   

反射的前提是擷取當要反射類的Class對象,擷取方式有如下幾種:

 1 //使用Class.forName 2 Class c = Class.forName("com.test.Person"); 3 //使用Class屬性 4 Class c = Person.class; 5 //使用getClass 6 Person p = new Person(); 7 Class c = p.getClass(); 8 //擷取基本類型的class可以使用如下方式 9 Class c = int.class;//輸出 int10 Class c = Integer.TYPE;//輸出 int11 Class c = Integer.class;//輸出 java.lang.Integer

接著建立要反射的類Person

 1 class Person { 2  private String name; 3  private int age; 4     //無參構造方法 5      public Person(){ 6  7     } 8     //有參建構函式 9     public Person(String name, int age) {10         this.name = name;11         this.age = age;12     }13     //輸出資訊14     private void getInfo() {15         System.out.println(name + "\t" + age);16     }17     //私人方法18     private void privateMethod() {19         System.out.println("調用了private方法");20     }21     //私人靜態方法22     private static void getStaticPrivateMethod(){23         System.out.println("getStaticPrivateMethod");24   }25 26     //public方法27     public void getPublicMethod(){28         System.out.println("getPublicMethod");29     }30 31     //public靜態方法32     public static void pubicStaticMethod() {33         System.out.println("調用了public static方法");34     }35     //帶有參數的公用靜態方法36     public static void getMsg(String msg){      37          System.out.println(msg);38     }39 40 }

1.反射私人方法

 1 //    反射Person類中的private方法 2     Class clazz = Class.forName("com.test.Person"); 3 //    建立Person類的執行個體,前提是Person有一個無參構造方法 4     Person person = (Person) clazz.newInstance(); 5 //    擷取Method,使用getDeclaredMethod是對私人方法進行訪問,但是必須設定setAccessible為true 6     Method method = clazz.getDeclaredMethod("privateMethod"); 7 //    這是在訪問私人方法時不對安全性進行檢查 8     method.setAccessible(true); 9 //    調用person類中的getAge方法10     method.invoke(person);

2.反射私人靜態方法

//擷取Person的Class對對象Class c = Person.class;//擷取要調用的方法,這裡需要有getDeclareMethod來擷取類的私人方法Method m = c.getDeclaredMethod("getStaticPrivateMethod")//設定私人方法的可訪問性為truem.setAccessible(true);//調用m.invoke(c);

3.反射公用方法

//擷取Class對象Class c = Person.class;//構建Person對象(前提是Person有一個無參構造方法)Person person = (Person) c.newInstance();//擷取要調用的方法Method method = c.getMethod("getPublicMethod");//調用person對象中的方法method.invoke(person);

4.反射公用靜態方法

//擷取Class對象Class cc = Person.class;//擷取要調用的方法Method method = cc.getMethod("pubicStaticMethod");//調用方法,因為是static方法,所以直接通過類來調用method.invoke(cc);

5.反射帶有參數的公用靜態方法

//擷取ClassClass c = Person.class;//擷取Method,要傳遞參數的Class對象數組,一個參數的情況也可以直接傳class,如 String.classMethod method = c.getMethod("getMsg",new Class[]{String.class});method.invoke(c,"不能說的秘密");

6.反射有參建構函式的私人方法

  //擷取ClassClass c = Person.class;//構建有參構造方法Constructor constructor = c.getConstructor(new Class[]{String.class, int.class});//通過constructor擷取Person對象執行個體Person person = (Person) constructor.newInstance(new Object[]{"Liusilong", 18});// 這裡getInfo如果是public方法的話就直接 person.getInfo();// 如果getInfo是private方法就就還需要反射私人方法,步驟如下:Method method = c.getDeclaredMethod("getInfo");method.setAccessible(true);method.invoke(person);

7.反射屬性並輸出

//        擷取Class對象    Class c = Person.class;//        產生Person類的執行個體    Person p = (Person) c.newInstance();//        擷取Person類中的私人屬性    Field name = c.getDeclaredField("name");    Field age = c.getDeclaredField("age");//        設定私人屬性可訪問    name.setAccessible(true);    age.setAccessible(true);//        設定Person對象中私人屬性的值    name.set(p, "Liusilong");    age.set(p, 18);//        擷取Person中的私人方法 getInfo    Method method = c.getDeclaredMethod("getInfo");//        設定私人方法可訪問    method.setAccessible(true);//        調用私人方法    method.invoke(p);

 

Java--反射

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.