5.反射例子

通過學習瞭解到, Java反射機制是在運行狀態中,對於任意一個,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱爲Java語言的反射機制。

Java反射機制主要提供下面幾種用途:

  • 在運行時判斷任意一個對象所屬的類
  • 在運行時構造任意一個類的對象
  • 在運行時判斷任意一個類所具有的成員變量和方法
  • 在運行時調用任意一個對象的方法

一個例子程序就能很好的解釋反射了.

 

 

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Reflection {

 
 public static void main(String[] args) throws ClassNotFoundException,
   InstantiationException, IllegalAccessException,
   IllegalArgumentException, InvocationTargetException {
  String str = "T";
  Class c = Class.forName(str);// Class類表示正在運行的類,它沒有構造方法,現在的class類所表示的類是T

  Object o = c.newInstance();// 創建正在運行的Class對象所表示的類的一個實例 此時就是 new T()
  // 相當於 Object o =new T() o就可以當一個正常的實例T()使用了 也可以直接轉換 T
  // o=(T)c.newInstance()
  System.out.println(o.getClass().getName());

  //Field 類能拿到一個類的屬性  參考java.lang.reflect.*
  
  
  Method methods[] = c.getMethods();
  for (Method m : methods) {
   if (m.getName().equals("f")) {
    // m.invoke(o, null);//調用m這個方法 相當於o.m()
    // 第二個參數是m這個方法的可變參數,可以根據情況傳0-n個參數
    m.invoke(o, 1, 2);
    // 例如,m.invoke(o,"aa",5,"ss")
    //m.getReturnType()  拿到返回值類型
    Object ps[] = m.getParameterTypes();//可以查看這個方法的參數類型
    for (Object p : ps) {
     System.out.println(p.toString());//一次打印出方法m的參數類型int,int
    }
   }
  }

 }

}

class T {
 public T() {
  System.out.println("T constractor!");
 }

 public void f(int i, int j) {
  System.out.println("T fff");

 }

}

 

發佈了24 篇原創文章 · 獲贊 5 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章