一、獲取某個特定的方法,通過反射機制。 package com.bjpowernode.java_learning; import java.lang.reflect.*; public class D119_1_ReflectMethodOfSpecialClass { public sta ...
一、獲取某個特定的方法,通過反射機制。
package com.bjpowernode.java_learning; import java.lang.reflect.*; public class D119_1_ReflectMethodOfSpecialClass { public static void main(String[] args) throws Exception{ /** * D118_CustomerService cs = new D118_CustomerService(); * boolean isSucess = cs.login("admin","123"); * * 接下來通過反射的方法,來獲取某一個類的某個函數 * */ //1.獲取類 Class c = Class.forName("com.bjpowernode.java_learning.D118_CustomerService"); //2.獲取某個特定的方法 //通過:方法名+形參列表 Method m = c.getDeclaredMethod("login",String.class,String.class); //login是D118_CustomerSercice中存在的類 //通過反射機制執行login方法 Object o = c.newInstance(); //調用o對象的m方法,傳遞"admin","123"參數,方法的執行結果是retValue Object retValue = m.invoke(o,"admin","123"); //列印出來 System.out.println(retValue); } }
通過放射機制,我們模糊的執行了某個類的方法,相比之前的直接創建一個對象更加靈活。
二、反編譯某個類的所有構造方法
我們先分別演示單個函數的修複符、構造方法名,然後通過StringBuffer來寫出所有的構造方法。
package com.bjpowernode.java_learning; import java.lang.reflect.*; public class D119_2_DecompilationOfAllConstructer { public static void main(String[] args) throws Exception{ //1.獲取一個類 Class c = Class.forName("java.lang.String"); //2.獲取所有的構造方法 Constructor[] cs = c.getDeclaredConstructors(); for(Constructor con:cs) { //獲取修飾符 System.out.println(Modifier.toString(con.getModifiers())); //獲取構造方法名 System.out.println(c.getName()); //構造方法的形式參數列表 Class[] parameterTypes = con.getParameterTypes(); for(Class parameterType:parameterTypes) { System.out.println(parameterType.getSimpleName()); } System.out.println("================="); } //反編譯 StringBuffer sb = new StringBuffer(); sb.append(Modifier.toString(c.getModifiers())+" class"+c.getSimpleName() + "{\n"); //構造方法 for(Constructor con:cs) { sb.append("\t"); sb.append(Modifier.toString(con.getModifiers()) + " "); sb.append(c.getSimpleName()+"("); Class[] parameterTypes = con.getParameterTypes(); for(int i=0;i<parameterTypes.length;i++) { Class parameterType = parameterTypes[i]; if(i==parameterTypes.length-1) { sb.append(parameterType.getSimpleName()); }else { sb.append(parameterType.getSimpleName()+","); } } sb.append("){}\n"); } sb.append("}"); System.out.println(sb); } }
三、源碼:
D119_1_ReflectMethodOfSpecialClass.java
D119_2_DecompilationOfAllConstructer.java
https://github.com/ruigege66/Java/blob/master/D119_1_ReflectMethodOfSpecialClass.java
https://github.com/ruigege66/Java/blob/master/D119_2_DecompilationOfAllConstructer.java
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料