Java反射机制(初步认识)

举报
YuShiwen 发表于 2022/03/31 00:05:06 2022/03/31
【摘要】 反射的实质: 就是在得到Class对象之后,反向获取Class对象的对象。 解读:Class的对象好比一个类,反向获取Class对象(也就是类)的对象。 其中类字面常量反射,通过把xxx.class字节...

反射的实质:

就是在得到Class对象之后,反向获取Class对象的对象。
解读:Class的对象好比一个类,反向获取Class对象(也就是类)的对象。
其中类字面常量反射,通过把xxx.class字节码文件反射回去生成编译前的类。
不清楚Class类的可以点击查看本人另一篇博文:Class与class的区别

对Class类解读:

我们通常认为类是对象的抽象和集合,Class就相当于是对类的抽象和集合。
也可以认为对象是类的实例,类是Class的实例。

运用反射机制:

在获得Class对象后我们可以调用:
Class对象.getDeclaredConstructor().newInstance()
方法去获取Class对象的对象
例子:

package Task;
import org.junit.Test;

public class Try0 {
    @Test
    public void toTry() throws Exception {
        //forName方法:参数为其类的路径
        Class a = Class.forName("Task.Try1");
        System.out.println(a);

        //通过对象得到类
        Try1 try1 = new Try1();
        Class b = try1.getClass();
        System.out.println(b);

        //类字面常量,通过把xxx.class字节码文件反射回去生成编译前的类
        Class c = Try1.class;
        System.out.println(c);

        //JAVA9之后废弃newInstance()方法
        //反射机制,用Class的对象a(Try1类型) 生成了Try1的对象try2,并且调用了try2的toPrint方法。 
        Try1 try2 = (Try1) a.getDeclaredConstructor().newInstance();
        System.out.println(try2+try2.toPrint());
        
        //反射机制,用Class的对象b(Try1类型) 生成了Try1的对象try3,并且调用了try3的toPrint方法。
        Try1 try3 = (Try1) b.getDeclaredConstructor().newInstance();
        System.out.println(try3+try3.toPrint());
        
        //反射机制,用Class的对象c(Try1类型) 生成了Try1的对象try4,并且调用了try4的toPrint方法。
        Try1 try4 = (Try1) c.getDeclaredConstructor().newInstance();
        System.out.println(try4+try4.toPrint());
    }
}

class Try1 {
    public String toPrint(){
        return "调用了toPrint";
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

输出结果:
在这里插入图片描述
可以看到生成了不同的Try1对象,和new出来的对象一样,可以使用对象的方法等等。

文章来源: blog.csdn.net,作者:Mr.Yushiwen,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/MrYushiwen/article/details/107380536

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。