Java反射机制之获取类的字节码文件

先贴上Java反射机制的概念:
  JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意一个方法和属性;

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

这么一讲很强大有没有!

反射的机制的实现还有仰仗Class类,因为想要剖析一个类就必须先要获取到该类的字节码文件对象,而Class类用于表示.class文件(字节码)

而且从获取到剖析使用的都是Class类的方法。

获取类字节码方法有三种:

1、通过实例化对象的 stu.getClass() 获取到字节码文件

getClass()方法其实是Object的一个方法,Class继承了Object,所以我们可以直接使用。

public class Test01 {
    public static void main(String[] args) {
        Student stu=new Student();
        Class c=stu.getClass();
        System.out.println(c.getName());
    }
}

结果:com.reflection.model.Student

当然这种方法没什么意义,因为我们都 new 实例化对象了,就没有必要反射了。

2、通过类的 .class 属性获取类的字节码文件

import com.reflection.model.Student;
public class Test02 {
    public static void main(String[] args) {
        Class c= Student.class;
        System.out.println(c.getName());
    }
}

结果:com.reflection.model.Student

这种方法比第一种方法稍好,当也有不足之处,因为需要导入类的包,这样做依赖性太强,不利于解耦。

3、通过类的全路径名获取Class对象 使用Class.forName(“全路径名”)来实现

此处可能会报出 ClassNotFoundException 异常因为 你给的全路径名可能不存在,因此给他加一个try{}cath(){}

public class Test03 {
    public static void main(String[] args) {
        try {
            Class c=Class.forName("com.reflection.model.Student");
            System.out.println(c.getName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

结果:com.reflection.model.Student

比较前两个方法我们可以看出第三种方法才是我们需要的。

虽然这里用是 全路径名 输出的结果也是 全路径名,但取到的是一个 类的字节码文件,可以用它做很多事。

https://www.cnblogs.com/mww-NOTCOPY/p/11218024.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值