Java反射机制解析 - 日理万妓 2022-04-23 12:36 229阅读 0赞 首先在反射之前我们要先了解java类的整个加载机制:**我们的.java源码文件通过编译之后会生成一个JVM可识别的二进制字节码.class文件,每一个类都会产生一个Class对象,保存在对应的.class字节码文件中,类装载器在会将这些类装载到JVM中。类装载器一般会在类的首次使用时或者一个静态(static)成员引用时,就会触发类加载器动态的将类加载到JVM中(另外JVM预先加载某些类也是被允许的),加载过程中,类的加载器会先在JVM的静态方法区检查一遍这个Class对象时候已经被加载过了,如果没有加载,则默认的加载器就会根据类名查找对应的.class文件,将其读取到jvm中,然后将这个类的信息保存在静态方法区,类的信息包括:类的全限定名、父类的全限定名、字段信息、方法信息、类的访问修饰符等。这是整个类的加载机制**; 反射与常规区别在于:.class文件里面的信息对于我们来说是未知的,只有加载到JVM的方法区才可以得到这个类的方法、属性等进行调用,也就是说常规时是在编译的时候打开和检查.class文件,而反射则是在运行时打开和检查.class文件,查找类中的方法属性等,所以我们可以于运行时加载、探知、使用编译期间完全未知的class。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。既一种“看透class”的能力 优缺点:**优点**体现在它的动态编译上,能够运行时确定类型,绑定对象,灵活性高,也降低了类之间的耦合度;**缺点**在于通过这种方式创建对象一般比较慢,性能较低,同时安全性低,也破坏了java封装的一个思想。 反射的实现:java反射机制的实现要要借助Class、Constructor、Field、Method这四个类;其中class代表的是类对象,Constructor-类的构造器对象,Field-类的属性对象,Method-类的方法对象,这些类的对象由JVM在启动时创建;这样的话就可以使用Contructor创建新的对象,用get()和set()方法获取和修改类中与Field对象关联的字段,用invoke()方法调用与Method对象关联的方法。另外,还可以调用getFields()、getMethods()和getConstructors()等许多便利的方法,以返回表示字段、方法、以及构造器对象的数组,这样,对象信息可以在运行时被完全确定下来了。 伪代码: 定义一个学生类 package pers.ly.learn.reflection; public class Student { private String name; public Student() { super(); // TODO Auto-generated constructor stub } public Student(String name) { super(); this.name = name; } @Override public String toString() { return "Student [name=" + name + "]"; } } 测试使用反射方式创建对象: package pers.ly.learn.reflection; import java.lang.reflect.InvocationTargetException; public class Test { public static void main(String[] args) { Student student = null; try { student = (Student)Class.forName(Student.class.getName()).getConstructor(String.class).newInstance("daa"); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | ClassNotFoundException e) { e.printStackTrace(); } System.out.println(student); } } 反射的其他应用实例:java的动态代理、Hibernate、mybatis、Spring AOP等后端框架都大量使用到反射原理来实现
相关 Java反射机制应用案例解析 Java反射机制是Java语言提供的一种允许程序在运行状态中了解类信息、动态调用方法以及获取对象属性值等能力的机制。 以下是一个简单的反射机制应用案例解析: 1. **创建 拼搏现实的明天。/ 2024年09月18日 09:12/ 0 赞/ 4 阅读
相关 Java反射机制实例解析 Java反射机制是Java语言提供的一种能力,允许程序在运行时检查类的信息(如方法、属性等)并动态调用这些信息。 下面是一个简单的实例解析: ```java // 创建一个 我就是我/ 2024年09月16日 21:51/ 0 赞/ 14 阅读
相关 Java反射机制深入解析 Java的反射机制是一种强大的工具,它允许我们在运行时检查类、方法和字段的信息。以下是反射机制深入解析的关键点: 1. 类加载:当Java应用需要访问一个类时,Java虚拟机 亦凉/ 2024年09月15日 05:03/ 0 赞/ 7 阅读
相关 Java反射机制的应用案例解析 Java的反射机制允许我们在运行时动态地查看类的信息,操作对象等。以下是一个具体的应用案例解析: **案例:获取指定类的所有属性** 1. **使用反射创建Class对象* 缺乏、安全感/ 2024年09月13日 02:48/ 0 赞/ 11 阅读
相关 Java反射机制常见问题:示例解析 在Java编程中,反射机制是一种强大的工具,它允许我们在运行时检查类、方法和字段的信息。然而,使用反射可能会遇到一些常见的问题。下面是一些示例来解析这些问题: 1. **安全 ゝ一世哀愁。/ 2024年09月13日 01:36/ 0 赞/ 20 阅读
相关 Java反射机制深入解析 Java的反射机制是一种强大的工具,它允许程序在运行时检查和修改类、对象及方法的信息。下面对Java反射机制进行深入解析: 1. **Class**:这是反射的主要对象类型, 忘是亡心i/ 2024年09月11日 19:57/ 0 赞/ 43 阅读
相关 Java反射机制滥用问题案例解析 在Java编程中,反射是一种强大的工具,它允许我们在运行时检查类、对象和方法的信息。然而,如果滥用反射,可能会导致性能下降,安全风险增加等问题。 以下是几个常见的滥用反射的案 拼搏现实的明天。/ 2024年09月06日 02:48/ 0 赞/ 23 阅读
相关 Java反射机制解析 首先在反射之前我们要先了解java类的整个加载机制:我们的.java源码文件通过编译之后会生成一个JVM可识别的二进制字节码.class文件,每一个类都会产生一个Class对象 - 日理万妓/ 2022年04月23日 12:36/ 0 赞/ 230 阅读
相关 java反射机制详细解析 (一)什么是反射机制? 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动 喜欢ヅ旅行/ 2021年09月15日 02:32/ 0 赞/ 324 阅读
还没有评论,来说两句吧...