Java中反射

來源:互聯網
上載者:User

標籤:read   RKE   配置   public   使用   load   work   dna   getc   

類載入的三種機制1、通過getClass
People p =new People();Class c = p.getClass();
2、People.class
Class c1=People.class;
3、Class.forName("tianpo.com.demo.People");
Class c2=Class.forName("tianpo.com.demo.People");
對象比較
//比較記憶體位址,類載入器只會建立一次System.out.println(c==c2); //比較的是屬性值System.out.println(c.equals(c2));
反射

其實就是把class檔案進行結構拆解:

  1. 建構函式(有參/無參)
  2. 成員變數(屬性)
  3. 方法
反射建構函式
Class c =Class.forName("tianpo.com.demo.People");## 有參Constructor constructor=c.getConstructor(String.class,int.class);## 無參Constructor constructor1=c.getConstructor();Object obj=constructor.newInstance("dd",22);People p =(People)obj;System.out.println(p);
暴力反射(不建議使用,破壞了封裝性、安全性)
//建構函式是私人的 private People(String name, int age) {    super();    this.name = name;    this.age = age;}Class c =Class.forName("tianpo.com.demo.People");Constructor constructor=c.getDeclaredConstructor(String.class,int.class);//暴力反射,取消運行時許可權檢查constructor.setAccessible(true);Object obj=constructor.newInstance("dd",22);System.out.println(obj);
動態調用內部方法
Class c = Class.forName("tianpo.com.demo.People");Constructor con = c.getConstructor();Method m =c.getMethod("eat");Object obj1=con.newInstance();m.invoke(obj1);
擷取所有成員變數
Class c = Class.forName("tianpo.com.demo.People");# 擷取所有public類型的成員變數Field[] fs=c.getFields();# 擷取所有privateField[] fs1=c.getDeclaredFields();for(Field field:fs){    System.out.println(field);}Field field=c.getDeclaredField("age");Constructor con = c.getConstructor();Method m =c.getMethod("eat");Object obj1=con.newInstance();//動態賦值field.set(obj1,18);System.out.println(obj1);
反射的泛型擦除
ArrayList<String> array = new ArrayList<String>();array.add("張三");// 編譯時間會做類型檢查//array.add(10);Class c = array.getClass();Method m = c.getMethod("add",Object.class);m.invoke(array,10);m.invoke(array,13.8);System.out.println(array);
通過配置執行調用建立一個config.properties
className = tianpo.com.demo.PeoplemethodName = eatclassName = tianpo.com.demo.StudentmethodName = StudyclassName = tianpo.com.demo.WorkermethodName = Work
反射調用
FileReader rd = new FileReader("config.properties");Properties pro = new Properties();pro.load(rd);rd.close();String className = pro.getProperty("className");String methodName = pro.getProperty("methodName");Class c =Class.forName(className);Method m = c.getMethod(methodName);Object obj=c.newInstance();m.invoke(obj);

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.