java反射:java方法反射的基本操作

    前面我們學習了通過類類型來獲取類中相應方法,那麼我們可以通過java反射機制對類中的方法進行調用等基本操作嗎?
    我們調用類中函數時,都是通過類的實例進行調用,接下來我們來通過一段代碼測試一下如何利用java反射進行類中方法的調用

class A{
    public void print() {
        System.out.println("我有你");
    }
    public void print(int a,int b) {
        System.out.println(a+b);
    }
    public void print(String a,String b) {
System.out.println(a.toUpperCase()+","+b.toLowerCase());
    }
}

    要想唯一確定一個函數,通過函數名加參數列表即可以確定。在類A中有三個的函數,分別爲無參的函數和兩個有參函數,則我們通過java方法反射來進行函數的調用:

    public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        //要獲取print(int,int)方法,首先要獲得類的信息,獲取類的信息首先要獲得類的類類型
    A a=new A();
    Class c=a.getClass();//獲取類的類類型
   /*
    * 獲取方法名稱和參數列表,得到方法
    * getMethod()獲取的是public的方法
    * getDeclaredMethod()方法獲取的是自己聲明的方法
    */
   Method m=c.getMethod("print", new Class[] {int.class,int.class});//利用數組來表示參數列表
   //方法的反射操作,用m對象來進行方法的調用
   Object o=m.invoke(a,new Object[] {1,2});//數組傳參
   Method m2=c.getMethod("print", new Class[] {String.class,String.class});
   Object o2=m2.invoke(a, "hello","world");//直接傳參
   System.out.println(o2); //函數爲void類型,則返回的對象爲空
    Method m3=c.getMethod("print");//調用的函數無參,則可以直接不寫參數,或者寫一個沒有元素的數組new Class[]{}
    Object o4=m3.invoke(a);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章