java反射入門備忘

來源:互聯網
上載者:User

Class類--java類的抽象,是一個特殊的類.

當初理解為每個用class定義的java類,不管是系統定義還是自訂的類,都是Class的執行個體;現在自我糾正,Class類的執行個體是各個類在記憶體中的位元組碼,張老師講每個類的位元組碼是不同的,所以每個類的位元組碼在記憶體裡儲存的內容也是不同的,這些不同的記憶體空間對應的對象就是Class類的執行個體(有點像是指向java類的位元組碼的指標啊).

  

得到Class對象

三種方法得到Class對象:

1。直接指定位元組碼對象 Class cls = x.class;

2。通過類的對象調用getClass()方法獲得

3. 通過Class.forname(String str)方法指定

 

Constructor類是對java類的構造方法的抽象,通過反射構造類的執行個體,

Constructor constr = new String().getClass().getConstructor(x.class...); //x.class是對應構造方法的參數所屬的Class對象,可變參數

String str = constr.newInstance(x...);  //x是構造方法的參數,不是Class對象,但必須是x.class的一個執行個體對象,可變參數

用new String().getClass().newInstance()調用無參數的構造方法

 

 

Field是對java類的的成員變數的抽象,每個Field對象都是類的屬性.

String heima = new String("heima");

Field field = heima.getClass().getField(x);//x是屬性名稱,類型為String

field.get(heima);//heima是所要獲得值的屬性的所屬對象

//field和指向類變數的指標很相似

對私人變數的擷取,getField()只能擷取可見的變數,對於私人變數則不能擷取

Field field = new Object().getClass().getDeclaredField(x);//x是屬性名稱,類型為String;獲得指定的類的已聲明屬性

只是擷取field對象還不能取出對應的屬性的值

field.setAccessible(true);//設定為可訪問,則field所對應的屬性不再受private限制(很拽的方法)

field.get(obj);

 

 

Method是java類的方法的抽象,每個Method對象都是類的一個方法

Method method = new String().getClass().getMethod(String strName,x.class...);//擷取類的指定的方法,getMethod()的參數strName是方法名,String類型,x.class是方法的參數類型,是Class對象,可變參數

method.invoke(obj,x);//調用方法,obj是調用方法的對象,若為靜態方法,可為null;x是x.class的執行個體對象,即方法的參數

和變數一樣,當要調用類的私人方法時,採用同樣的方式也可

自訂一個類TestPoint

public class TestPoint {
 
 public String name;
 
 public TestPoint(String name) {
  super();
  this.name = name;
 }

 private void toString()
 {
  System.out.println(name);
 }
 
}

通過反射調用toString()方法

TestPoint tp = new TestPoint("這是私人方法調用");
  Method tpMethod = tp.getClass().getDeclaredMethod("toString");//因為是無參數的方法,只有一個方法名的參數
  tpMethod.setAccessible(true);
  tpMethod.invoke(tp);//這裡也只有一個參數

 

反射的基礎就是Class類,只有先獲得了Class對象才可以進行反射的相關操作.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.