通過反射訪問類的私有方法(無參)
阿新 • • 發佈:2019-04-23
code red tde 執行方法 奔跑吧 類類型 tom bject exc
Person類:
package com.fanshe.entity; public class Person { private String name; private int age; private void fun(){ System.out.println("奔跑吧騷年!"); } private void fly(){ System.out.println("要上天!"); } }
測試類:
package com.fanshe.test;import java.lang.reflect.Method; import org.junit.Test; import com.fanshe.entity.Person; public class PersonTest { @Test public void test1() throws Exception{ //1.獲取Person類的類類型 //Class c = Person.class; Class c = Class.forName("com.fanshe.entity.Person");//在不知道類名的情況下,一般用這種方法,例如Tomcat創建servlet對象,<servlet-class>標簽中的類名//2.使用類類型創建對象 //Person p = (Person) c.newInstance(); Object p = c.newInstance(); //3.創建一個方法的反射對象 //Method m = c.getMethod("fun");//這是獲取到public的方法,如果是私有方法則會報錯 Method m = c.getDeclaredMethod("fun");//獲取私有方法 //也可以創建方法反射對象數組,這種方法是在不知道Person中方法名的情況下使用 //Method[] ms = c.getDeclaredMethods();//if (ms.length > 0) { // for (Method m : ms) { // //設置對私有方法的訪問權限 // m.setAccessible(true); //執行方法 // m.invoke(p); // } //} //4.設置對私有方法的訪問權限 m.setAccessible(true); //5.執行方法 m.invoke(p); } }
執行結果:
通過反射訪問類的私有方法(無參)