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

匿名 (未验证) 提交于 2019-12-02 21:52:03

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

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

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

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

这么一讲很强大有没有!

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

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

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

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("全路径名")来实现

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!