java筆記-reflect.Method讀取
阿新 • • 發佈:2018-12-16
利用反射機制對所有方法進行操作
CustomerService類:
package reMethod; public class CustomerService { //登入 public boolean login(String name,String pwd) { if("admin".equals(name)&&"123".equals(pwd)) { return true; } return false; } //退出 public void logout() { System.out.println("系統已安全退出!"); } }
測試類:
package reMethod; import java.lang.reflect.*; public class ReflectTest { public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub //獲取類 Class c = Class.forName("reMethod.CustomerService"); //獲取所有方法 Method[] ms =c.getDeclaredMethods(); for(Method m:ms) { //方法的修飾符 System.out.println(Modifier.toString(m.getModifiers())); //方法的返回值型別 Class returnType = m.getReturnType(); System.out.println(returnType.getName()); //方法名 System.out.println(m.getName()); //方法的形式引數列表 Class[] parameterTypes = m.getParameterTypes(); //獲取形參列表 for(Class p:parameterTypes) { //for迴圈輸出形參名 System.out.println(p.getSimpleName()); } } } }
執行結果:
關於類中方法的反編譯:
package reMethod; import java.lang.reflect.*; public class ReflectTest { public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub //獲取類 Class c = Class.forName("reMethod.CustomerService"); //獲取所有方法 Method[] ms =c.getDeclaredMethods(); //類中方法的反編譯 StringBuffer sb = new StringBuffer(); sb.append(Modifier.toString(c.getModifiers())+" class "); sb.append(c.getSimpleName()+"{\n"); //輸出形參 for(Method m:ms) {//for迴圈輸出類中所有方法 sb.append("\t"); sb.append(Modifier.toString(m.getModifiers())+" "); //修飾符 sb.append(m.getReturnType().getSimpleName()+" "); //返回值型別名 sb.append(m.getName()+"("); //方法名 //形參 Class[] parameterTypes = m.getParameterTypes(); //獲取所有形式引數 for(int i=0;i<parameterTypes.length;i++) {//for迴圈輸出所有形式引數名 Class p = parameterTypes[i]; if(i==parameterTypes.length-1) { sb.append(p.getSimpleName()); }else { sb.append(p.getSimpleName()+","); //不是最後一個形參則加上逗號 } } sb.append("){}\n"); } sb.append("}"); System.out.println(sb); } }
反編譯執行結果: