java 反射机制 之 getMethod获取公有方法 getDeclaredMethod获取所有方法 然后invoke执行其所有方法

本文介绍了Java反射机制中如何使用getMethod获取公有方法及getDeclaredMethod获取所有方法,包括private在内的非公有方法。通过invoke方法,可以执行这些获取到的方法,详细阐述了这两个API的差异及其在实际应用中的操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件结构:


Person:

package demo2;
public class Person {

    private int age;
    private String name;

    public Person( String name,int age) {
        this.age = age;
        this.name = name;
        System.out.println("构造函数Person(有参数)执行");
    }

    public Person() {
        System.out.println("构造函数Person(无参数)执行");
    }


    //公有 有参方法
    public void public_show(String str,int i)
    {
        System.out.println("public show "+str+"..."+i);
    }
    //公有 无参方法
    public void public_prin()
    {
        System.out.println("public prin");
    }


    //私有 有参方法
    private void private_show(String str,int i)
    {
        System.out.println("private show "+str+"..."+i);
    }
    //私有 无参方法
    private void private_prin()
    {
        System.out.println("private prin");
    }

}

Main:

package Main;
import java.lang.reflect.Method;

public class Main {
    public static void main(String[] args)  throws Exception {

        //获取字节码文件中 方法 再取出其公有方法

        String classname = "demo2.Person";
        //寻找名称的类文件,加载进内存 产生class对象
        Class cl = Class.forName(classname);


        /*
        //获取所有公有方法的getMethods()
        Method[] publie_Method=cl.getMethods(); //获取所有公有方法
        System.out.println("Person所有公有方法:");
        for(Method m:publie_Method)
        {
            System.out.println(m);
        }


        //获取本类中的所有的方法(私有 公共 保护)
        Method[] all_Method=cl.getDeclaredMethods();//获取本类中的所有方法 (只拿本类中的)
        System.out.println("Person本类中的所有方法:");
        for(Method m:all_Method)
        {
            System.out.println(m);
        }
        */

        /*
        运行结果:
        Person所有公有方法:
        public void demo2.Person.public_show(java.lang.String,int)
        public void demo2.Person.public_prin()
        public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
        public final void java.lang.Object.wait() throws java.lang.InterruptedException
        public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
        public boolean java.lang.Object.equals(java.lang.Object)
        public java.lang.String java.lang.Object.toString()
        public native int java.lang.Object.hashCode()
        public final native java.lang.Class java.lang.Object.getClass()
        public final native void java.lang.Object.notify()
        public final native void java.lang.Object.notifyAll()
        Person本类中的所有方法:
        public void demo2.Person.public_show(java.lang.String,int)
        public void demo2.Person.public_prin()
        private void demo2.Person.private_show(java.lang.String,int)
        private void demo2.Person.private_prin()
         */

        //获取一个Person对象
        System.out.println("获取一个Person对象:");
        Object obj=cl.newInstance();
        System.out.println();


        //1.顺手拿一个 公有 无参方法 public void demo2.Person.public_prin()
        Method Person_public_prin=cl.getMethod("public_prin",null);
        System.out.println("获取执行 public void demo2.Person.public_prin() :");
        Person_public_prin.invoke(obj,null);

        System.out.println();

        //2.拿一个 公有 有参方法 public void demo2.Person.public_show(java.lang.String,int)
        Method Person_public_show=cl.getMethod("public_show",String.class,int.class);
        System.out.println("获取执行 public void demo2.Person.public_show(java.lang.String,int) :");
        Person_public_show.invoke(obj,"神奇的我",12);

        System.out.println();

        //3.拿一个 私有 无参方法 private void demo2.Person.private_prin()
        Method Person_private_prin=cl.getDeclaredMethod("private_prin",null);
        Person_private_prin.setAccessible(true);
        System.out.println("获取执行 private void demo2.Person.private_prin() :");
        Person_private_prin.invoke(obj,null);

        System.out.println();

        //4.拿一个 私有 有参方法 private void demo2.Person.private_show(java.lang.String,int)
        Method Person_private_show=cl.getDeclaredMethod("private_show",String.class,int.class);
        Person_private_show.setAccessible(true);
        System.out.println("获取执行 private void demo2.Person.private_show(java.lang.String,int) :");
        Person_private_show.invoke(obj,"神奇的私有",23);

        System.out.println();
    }
}


运行结果:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值