Java反射基礎(二)

來源:互聯網
上載者:User

標籤:strong   file   靜態   void   imp   edm   setname   exception   span   

擷取域

  1. 通過反射API可以擷取到類中公開的靜態域和對象中的執行個體域。得到表示域的java.lang.reflect.Field類的對象之後,就可以擷取和設定域的值。

      與擷取構造方法類似,Class類中有4個方法用來擷取域:

      getFileds()、getFiled(fieldName)、 getDeclaredFields()、getDeclaredField(fieldName),其含義與擷取構造方法的4個方法類似。

      靜態域和執行個體域的區別是:在使用靜態域的時候,不需要提供具體對象執行個體,使用null即可,也可以使用對象執行個體;而使用執行個體域的時候,必須提供對象執行個體。 

 1 package jichu; 2 /** 3  *@author 作者  Yu chenchen 4  *@version 建立時間:2017年4月29日 下午1:32:38  5  *類說明: 6  */ 7 public class User { 8     public String name; 9     public static int age;10     private double salary;11     12     public void print1(){13         System.out.println("調用公有非靜態print1方法");14     }15     public static void print2(){16         System.out.println("調用公有靜態print2方法");17     }18     private void print3(){19         System.out.println("調用私人print3方法");20     }21     22     public String getName() {23         return name;24     }25     public void setName(String name) {26         this.name = name;27     }28     public static int getAge() {29         return age;30     }31     public static void setAge(int age) {32         User.age = age;33     }34     public double getSalary() {35         return salary;36     }37     public void setSalary(double salary) {38         this.salary = salary;39     }  40 }

 

 1 package jichu; 2  3 import java.lang.reflect.Field; 4  5 /** 6  *@author 作者  Yu chenchen 7  *@version 建立時間:2017年4月29日 下午12:20:50  8  *類說明: 9  */10 public class TestReflectionFields {11 12     public void test() throws Exception{13         //擷取公開執行個體域14         User user = new User();15         Field fieldName = User.class.getDeclaredField("name");16         //設定執行個體域值時,必須傳入執行個體對象17         fieldName.set(user, "ycc");18         19         //擷取靜態域20         Field fieldAge = User.class.getDeclaredField("age");21         //設定靜態域值時,傳入null22         fieldAge.set(null, 25);23         //設定靜態域值時,也可以傳入執行個體對象24         fieldAge.set(user, 26);    25         26         //擷取私人域27         Field fieldSalary = User.class.getDeclaredField("salary");28         //必須設定可以訪問私人域許可權29         fieldSalary.setAccessible(true);30         fieldSalary.set(user,1000.00); 31         32         System.out.println(user.name);33         System.out.println(User.age);34         System.out.println(user.getSalary());35        36     }37     public static void main(String[] args) {38         try {39             new TestReflectionFields().test();40         } catch (Exception e) {41             e.printStackTrace();42         }43     }44 }

輸出:

ycc
26
1000.0

擷取方法

  4個擷取方法:

     getMethods() 、 getMethod(methodName)、 getDeclaredMethod(methodName)、  getDeclaredMethods()

 1 package jichu; 2  3 import java.lang.reflect.Method; 4  5 /** 6  *@author 作者  Yu chenchen 7  *@version 建立時間:2017年4月29日 下午1:23:01  8  *類說明: 9  */10 public class TestReflectionMethods {11 12     public static void main(String[] args) throws Exception {13         User user = new User();14         //擷取公有非靜態方法15         Method method1 = User.class.getDeclaredMethod("print1");16         method1.invoke(user);17         18         //擷取公有靜態方法19         Method method2 = User.class.getDeclaredMethod("print2");20         method2.invoke((User)null);21         //也可以這樣22         method2.invoke(user);23         24         //擷取私人方法25         Method method3 = User.class.getDeclaredMethod("print3");26         //必須設定可以訪問私人方法許可權27         method3.setAccessible(true);28         method3.invoke(user);29 30     }31 32 }

輸出:

調用公有非靜態print1方法
調用公有靜態print2方法
調用公有靜態print2方法
調用私人print2方法

 

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.