反射

反射的定义

反射是在java程序运行时,还能动态的得到某个对象的所有属性和方法信息。并且可以动态执行某个对象的指定方法,或修改指定属性。这就是反射。

简单的反射使用
public class Person  implements Serializable{

private static final long serialVersionUID = -5293639382415756109L;
public int pid;
private String pname;

public Person() {
    
}
public Person(String name) {
    this.pname = name;
}

public Person(int pid, String pname) {
    this.pid = pid;
    this.pname = pname;
}
public String getPname() {
    return pname;
}

//getPid是一个私有的方法
public int getPid() {
    return pid;
}

public void setPid(int pid) {
    this.pid = pid;
}

public void setPname(String pname) {
    this.pname = pname;
}

//add是一个私有的方法
private String add(Integer i, Integer j) {
    return i + j + "";
}
}

这是一个简单的测试类,下面是反射获得的

     Class c = Person.class;
     
     (2)对象名.getClass()
     Person person = new Person();
     Class c2 = person.getClass();

     (3)Class.forName("全限定名")
    // 全限定名 一定是包含包名的 包名.类名
     Class c3 = Class.forName("com.temp.Person");

    (4)类.getClassLoader().loadClass("全限定名")
     Class c4 = Person.class.getClassLoader().loadClass("com.temp.Person");

    (5)子类.class.getSuperClass()
    // 父类class对象  (这返回的是Object的Class对象)
    Class c5 = Person.class.getSuperclass();
    
    // (6)包装类.class
    Class c6 = Integer.class;
获得到的主要内容

根据对应类的Class对象得到全限定名、类名、包名
Class c1 = Class.forName(“com.temp.Person”);
System.out.println(“全限定名” + c1.getName());
System.out.println(“类名” + c1.getSimpleName());
System.out.println(“包名” + c1.getPackage());

获取类的方法 (Method 类)
        Class c1 = Person.class;
        Object object = c1.newInstance();
        // getMethod(方法名,参数数据类型(无参数传Null)) 获取公共方法
        Method setPid = c1.getMethod("setPid", int.class);
        // invok (对象名, 参数列表)=对象名.方法名 执行方法
        setPid.invoke(object, 1);
        Method getPid = c1.getMethod("getPid", null);
        System.out.println("执行公共getPid返回结果:" + getPid.invoke(object, null));

        // getDeclaredMethod(方法名,参数数据类型(无参数传null)) 获取私有方法
        Method add = c1.getDeclaredMethod("add", Integer.class, Integer.class);
        add.setAccessible(true);
        System.out.println("执行私有add返回结果:" + add.invoke(object, 1, 2));
        // getReturnType() 得到返回值方法的数据类型的Class对象
        Class re = add.getReturnType();
        System.out.println("add方法的返回类型"+re.getName());

        // getParameterTypes() 得到方法参数列表()
        Class[] cal = add.getParameterTypes();
        for (Class cc : cal) {
            System.out.println(cc.getName());
        }
        System.out.println("----遍历add的参数列表------结束");
        // getDeclaredMethods() 得到类的所有方法
        Method[] methods = c1.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println(method.getName());
        }
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值