java 中如何获取字节码文件的相关内容
2017-04-06 09:48
871 查看
java 中如何获取字节码文件的相关内容
反射机制是指在运行状态中,对任意一个类(class文件),都能知道这个类的所有属性和方法;对任意一个对象,都能调用这个对象的方法和属性。这种动态的获取信息和动态的调用对象的方法的功能称为――Java语言的反射机制。
简单点说,动态的获取类中的信息,这就是Java的反射机制。
在Java的反射机制中,我们可以通过配置文件信息,然后通过类名来获取类中包含的详细信息,如构造函数、成员变量和成员函数等。在接下来,作者将分别演示如何通过类名来获取类中包含的信息。
一、获取字节码文件的构造函数
import java.lang.reflect.Constructor; public class GetClassConstructor { public static void main(String[] args) throws Exception { createNewObject_2(); } public static void createNewObject_2() throws Exception { /** * 当获取指定名称对应类中的所体现的对象时,而且该对象的初始化不适用空参的构造函数 * 可以先通过该类的字节码文件对象,获取空参的构造函数 * 该方法为:getConstructor(parameterTypes) */ // 包名一定要写全,否则会报"java.lang.ClassNotFoundException"异常 String name = "src.Person"; // 找寻该名称类文件,并加进内存,产生Class对象 Class clazz = Class.forName(name); // 获取指定的构造函数对象 Constructor constructor = clazz.getConstructor(String.class, int.class); // 通过该构造器对象的newInstance进行对象的初始化 constructor.newInstance("小明", 12); } public static void createNewObject() throws ClassNotFoundException, InstantiationException, IllegalAccessException { String name = "src.Person"; // 找寻该名称类文件,并加进内存,产生Class对象 Class clazz = Class.forName(name); // 产生该类的实例对象(空参) Object obj = clazz.newInstance(); } }
二、获取字节码文件的成员变量
import java.lang.reflect.Field; public class GetClassField { public static void main(String[] args) throws Exception { getField(); } /** * 获取字节码文件中的成员变量 */ public static void getField() throws Exception { Class clazz = Class.forName("src.Person"); Field field = null; // 获取本类字段,包含私有 field = clazz.getDeclaredField("age"); // 对私有字段的访问取消权限检查,可称之为暴力访问 field.setAccessible(true); Object obj = clazz.newInstance(); field.set(obj, Integer.valueOf(89)); Object o = field.get(obj); System.out.println(o); } }
三、获取字节码文件的成员函数
import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class GetClassMethod { public static void main(String[] args) throws Exception { getMethod_3(); } public static void getMethod_3() throws Exception { Class clazz = Class.forName("src.Person"); Method method = clazz.getMethod("walkInfo", new Class[]{String.class, Integer.TYPE}); Object obj = clazz.newInstance(); method.invoke(obj, new Object[]{"小强", Integer.valueOf(20)}); } public static void getMethod_2() throws Exception { Class clazz = Class.forName("src.Person"); // 获取空参数的方法 Method method = clazz.getMethod("show", (Class[]) null); Constructor constructor = clazz.getConstructor(new Class[]{String.class, Integer.TYPE}); Object obj = constructor.newInstance(new Object[]{"小明", Integer.valueOf(12)}); method.invoke(obj, (Object[]) null); } /** * 获取指定Class中的公有函数 */ public static void getMethod() throws Exception { Class clazz = Class.forName("src.Person"); // 获取的都是类中的公有方法 Method[] methods = clazz.getMethods(); // 获取本类中的所有方法 methods = clazz.getDeclaredMethods(); Method[] var5 = methods; int var4 = methods.length; for (int var3 = 0; var3 < var4; ++var3) { Method method = var5[var3]; System.out.println(method); } } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:
相关文章推荐
- Java中如何获取spring中配置的properties属性文件内容
- 获取字节码文件的相关内容
- Java中如何获取spring中配置的properties属性文件内容
- Java如何获取文件的内容类型?例如:image/gif
- Java中如何获取spring中配置的properties属性文件内容
- Java中如何获取spring中配置的properties文件内容
- Java中如何获取spring中配置的properties属性文件内容
- java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容
- 如何从SQL Server备份文件中获取数据库相关信息?
- [Java] 利用xpdf库获取pdf文件的指定范围文本内容
- java中如何获取远程计算机post提交的数据并把这些数据写入本地的txt文件中
- Java如何获取文件编码格式
- 使用java读取txt里边的文件内容并获取大小(M).txt
- java开发中如何获取远程文件的大小
- 如何用java实现在网页中保存html编辑器 编辑好的 html 文件?!(如blog里发文章的时候把要发表的内容以html文件的形式保存到服务器上?)
- Java如何获取文件编码格式
- java文件操作类 可以获取子目录和文件列表和文件内容
- JAVA中如何把system.out.println里的内容写入文件
- java中如何获取当前文件的物理路径?
- java,文件中的内容为中文时,如何处理?