Java——動態調用類中方法


在Java中,調用類的方法有兩種方式:對於靜態方法可以直接使用類名調用,對於非靜態方法必須使用類的對象調用。反射機制提供了比較另類的調用方式,可以根據需要指定要調用的方法,而不必在編程時確定。調用的方法不僅限於public的,還可以是private的。編寫程序,使用反射機制調用Math類的靜態方法sin()和非靜態方法equals()。

思路如下:使用Math.class.getDeclaredMethod("sin", Double.TYPE);訪問指定的方法,其中”sin”表示要訪問的方法的名稱為sin,Double.TYPE表示入口參數的類型為double。

Method 是對於方法的抽象,比如Math類,其中有Math.sin(double d),Math.abs(double d),sin abs都是方法,Method則是代表方法的類。
Math.class.getDeclaredMethod("sin", Double.TYPE),獲取了一個表示Math類靜態方法——sin的方法對象,getDeclaredMethod是可變參數的,第一個參數總是方法的名字,后面的是參數類型數組,有幾個參數寫幾個,sin只有一個double參數,所以只有一個Double.TYPE。
下面的equals同樣。
第一句是通過Method類的invoke來調用方法:
相當於Double sin1 = Math.sin(new Integer(1));

代碼如下:

import java.lang.reflect.Method; 
public class DongTai { 
    public static void main(String[] args) { 
        try { 
            System.out.println("調用Math類的靜態方法sin()"); 
            Method sin = Math.class.getDeclaredMethod("sin", Double.TYPE); 
            Double sin1 = (Double) sin.invoke(null, new Integer(1)); 
            System.out.println("1的正弦值是:" + sin1); 
            System.out.println("調用String類的非靜態方法equals()"); 
            Method equals = String.class.getDeclaredMethod("equals", Object.class); 
            Boolean mrsoft = (Boolean) equals.invoke(new String("明日科技"), "明日科技"); 
            System.out.println("字符串是否是明日科技:" + mrsoft); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM