1. 程式人生 > >通過反射訪問類的私有方法(無參)

通過反射訪問類的私有方法(無參)

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); } }

執行結果:

技術分享圖片

通過反射訪問類的私有方法(無參)