/***************************測試時調用的函數資源*****************************************/<br />package com.test.reflect;<br />public class MethodClass {<br /> public int myA;<br /> public int myB;<br /> private int myC;<br /> private int myD;</p><p>//列印A<br />public String printA(String inStr){<br />print("函數printA 執行開始!");<br />print(inStr);<br />print("函數printA 執行完畢!");<br />return "這是printA函數的執行結果!";<br />}<br />//列印B<br />public void printB(String inStr){<br />print(inStr);<br />}<br />//列印C<br />public void printC(String inStr){<br />print(inStr);<br />}</p><p>//列印函數<br />public void print(String inStr){<br />System.out.println(inStr);<br />}<br />}
/******************測試類別,擷取上個類的所有屬性和函數名稱,指定一個函數名稱並執行列印返回結果*************************************/<br />package com.test.reflect;<br />import java.lang.reflect.Field;<br />import java.lang.reflect.Method;<br />public class InvokeMethod {<br />/**<br /> * @param args<br /> */<br />public static void main(String[] args) {<br />// TODO Auto-generated method stub<br />try {<br />Class<?> typeClass = Class.forName("com.test.reflect.MethodClass");// 綠色表示包和類名,要把該檔案放在該工程下的lib檔案夾下<br />// 取得方法名稱<br />Method[] method = typeClass.getMethods();<br />for (int i = 0; i < method.length; i++) {<br />// 用class的getMethods()獲得所有函數名稱<br />System.out.println(method[i].getName());<br />}<br />// 取得公有屬性名稱<br />Field[] fields = typeClass.getFields();<br />for (int i = 0; i < fields.length; i++) {<br />System.out.println(fields[i].getName());<br />}<br />// 取得私人屬性名稱<br />Field[] fields2 = typeClass.getDeclaredFields();<br />for (int i = 0; i < fields2.length; i++) {<br />System.out.println(fields2[i].getName());<br />}<br />// 動態執行個體化 調用方法<br />Object object = typeClass.newInstance();<br />// 取得add方法(1)<br />Method addMethod = typeClass.getMethod("printA", String.class);// 參數1:方法名<br />// 參數2:函數接受參數類型<br />// 執行方法執行個體的invoke,返回結果<br />Object res = addMethod.invoke(object, "動態執行printA函數");// 參數1:類的執行個體// 參數2:要執行函數的輸入參數</p><p>System.out.println("執行指定函數的結果為:"+res);<br />} catch (Exception e) {<br />e.printStackTrace();<br />}<br />}<br />}