首页 > 编程语言 > 详细

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

时间:2019-07-20 16:18:51      阅读:83      评论:0      收藏:0      [点我收藏+]

先贴上Java反射机制的概念:

AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

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

这种动态获取的信息以及动态调用对象的方法的功能称为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

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

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

下一篇将会讲到  使用 Class中的方法获取 类中的 方法和属性(包括构造方法)

 

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!