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


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

執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM