Java 反射调用方法实例,动态动用方法实例
生活随笔
收集整理的這篇文章主要介紹了
Java 反射调用方法实例,动态动用方法实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
包結構
?
Hello.java
package test;public class Hello {public double add (double score1, double score2){return score1 + score2;}public void print(){System.out.println("OK");}public static double mul(double score1, double score2){return score1 * score2;} }?
CalculatorTest.java
package test;import java.lang.reflect.Method;class Calculator{public Calculator(){//這個構造器僅有一個參數:nameSystem.out.println("Calculator 構造函數");}public String eDIo(String str){String str_temp = "";str_temp = str.replace("World", "Hello");return str_temp;} }public class CalculatorTest {public static void main(String[] args) throws Exception {Calculator cal = new Calculator();String str_class_name = cal.eDIo("test.World");//方法一:通過類的.class屬性獲取//Class<Hello> clz = Hello.class;//方法二:通過類的完整路徑獲取,這個方法由于不能確定傳入的路徑是否正確,這個方法會拋ClassNotFoundExceptionClass clz = Class.forName(str_class_name);//方法三:new一個實例,然后通過實例的getClass()方法獲取//Hello?s?=?new?Hello();//Class<Hello>?clz?=?s.getClass();//1.?獲取類中帶有方法簽名的mul方法,getMethod第一個參數為方法名,第二個參數為mul的參數類型數組Method method = clz.getMethod("mul", new Class[]{double.class, double.class});//invoke?方法的第一個參數是被調用的對象,這里是靜態方法故為null,第二個參數為給將被調用的方法傳入的參數Object result = method.invoke(null, new Object[]{2.0, 2.5});//如果方法mul是私有的private方法,按照上面的方法去調用則會產生異常NoSuchMethodException,這時必須改變其訪問屬性//method.setAccessible(true);//私有的方法通過發射可以修改其訪問權限System.out.println(result);//結果為5.0//2.?獲取類中的非靜態方法Method method_2 = clz.getMethod("add", new Class[]{double.class, double.class});//這是實例方法必須在一個對象上執行Object result_2 = method_2.invoke(new Hello(), new Object[]{2.0, 2.5});System.out.println(result_2);//4.5//3.?獲取沒有方法簽名的方法printMethod method_3 = clz.getMethod("print", new Class[]{});Object result_3 = method_3.invoke(new Hello(), null);//result_3為null,該方法不返回結果} }?
運行結果
Calculator 構造函數
5.0
4.5
OK
總結
以上是生活随笔為你收集整理的Java 反射调用方法实例,动态动用方法实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux查找字符串包含在某目录所有文件
- 下一篇: linux安装selenium、chro