为了账号安全,请及时绑定邮箱和手机立即绑定

java 反射 自定义类的类类型是Class

标签:
Java
package com.curtis.reflect;

import java.lang.reflect.Method;

public class ClassMessage {

    public static void main(String[] args) throws Exception {
        Person p1 = new Person();
        p1.setIdCard("1000");
        p1.setName("Curtis");
        p1.setAge(27);
        // 1、System.out.println(p1);

        // 2、p1.eat();

        Class c1 = Person.class;
        Class c2 = p1.getClass();
        Class c3 = Class.forName("com.curtis.reflect.Person");

        // 3、System.out.println(c1==c2);// true
        // 4、System.out.println(c2==c3);// true

        // 5、System.out.println(c1.getName()); // 全类名 com.curtis.reflect.Person
        // 6、System.out.println(c1.getSimpleName());// Person

        // 自定义类的实例化对象,要找自定义类中的方法能找到
        // 现在自定义类是Class 的实例化对象,那么Class 类的实例化对象,找到自定义方法中的方法也很正常

        Method method = c1.getMethod("eat");
        // 7、System.out.println(method);

        // 根据下面代码执行结果来看,结果是一样的;
        // invoke 方法传入的是对象实例(因为eat 无参数列表,所以invoke没有第二个参数)
        p1.eat();

        // 8、
        method.invoke(p1);

        // 总结:
        // 自定义Person 类,类类型是Class
        // 为什么叫反射,正常流程是:类的实例化对象,对方法进行调用;
        // 现在反过来,Class 类的实例找到方法,再通过invoke 方法实现方法的调用;
    }

}

class Person {

    private String idCard;
    private String name;
    private Integer age;

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person [idCard=" + idCard + ", name=" + name + ", age=" + age + "]";
    }

    public void eat() {
        System.out.println("eat 方法被调用了");
    }

}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Python工程师
手记
粉丝
62
获赞与收藏
1091

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消