Java开发笔记(七十八)面向对象的后门——反射

本文探讨了Java中的反射机制,它是面向对象的一个重要特性。通过`类名.class`和`实例名.getClass()`可以获取Class对象,进一步利用Class对象可以访问类的私有属性和方法。反射不仅提供逆向操作,还揭示了Java类的内部奥秘,常用于高级应用。Class、Field和Method是反射技术的核心,它们允许开发者在运行时动态地操作类的成员。
摘要由CSDN通过智能技术生成

作为一门面向对象的编程语言,Java认为一切皆是对象,每个对象都能归属于某个类,甚至每个类均可提取出一种特殊的类型,即Class类型。早在前面介绍多态的时候,就提到每个类都存在独一无二的基因,通过比较实例的类基因与具体类名的类基因,即可分辨某个实例是否属于目标类。例如,若想获取公鸡类的类型,则可通过“类名.class”得到该类的Class对象,详细的获取代码如下所示:

// 第一种方式:通过“类名.class”获取
Class clsFromClass = Cock.class;
System.out.println("clsFromClass name = " + clsFromClass.getName());

相对应的,若想获取公鸡实例的类型,则可通过“实例名.getClass()”得到该实例的Class对象,详细的获取代码如下所示:

// 第二种方式:通过“实例名.getClass()”获取
Cock cock = new Cock();
Class clsFromInstance = cock.getClass();
System.out.println("clsFromInstance name = " + clsFromInstance.getName());

既然Class也是一种数据类型,那么Class对象也能调用该类型的实例方法,比如上面两段例子代码都调用了Class的getName方法,该方法返回的是Class对象蕴含着的目标类类名,而且是包含完整包路径的类名。假如分别运行前面的两段示例代码,就会依次观察到如下的日志信息,从中可见getName方法确实返回了完整的类名:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值