- JAVA反射机制
- 一. 反射的定义
- 二. 反射机制用处
- 三. 反射的实现方式有哪些
- 四. 实现Java反射的类
- 五. 关于class对象和这个class类
- 六. class类 :代表一个类,是Java反射机制的起源和入口
- 七. 反射机制的优缺点
首先我们得知道什么是java反射机制,所谓反射机制就是在运行的时候,可以获取一个类中的所有属性和方法,也可以调用一个对象的任意方法 。在java中,给定一个类名,就能通过反射机制获取到类的所有信息。简单来说 是java语言种的一种机制,可以通过这种机制动态的实例化对象,读写属性,调用方法
二. 反射机制用处1.通过反射机制可以访问java对象的属性,方法,构造方法等
2.当我们使用IDE ( 如 EclipseIDEA) 时 输入一个对象或者类,并想调用他的属性和方法时,一按 . 点号,编译器就会自动列出它的属性或者方法
3 反射机制最重要的是开发各种通用框架,为了保证框架的通用性,他们可能需要根据配置文件加载不同的类或者对象,调用不同的方法,这个时候就必须使用到反射了,运行时动态加载需要的加载的对象。
加载数据库驱动的jdbc就是典型的反射
Class.forName(‘com.mysql.jdbc.Driver.class’);//动态加载MySQL的驱动类
还有hibernate,Struts等框架使用反射实现的
三. 反射的实现方式有哪些获取Class对象的4种方法:
1.Class.forName(“完整类名”)
2.类名.class
3.对象名.getClass()
4.基本类型的包装类,可以调用包装类的Type属性来获得该包装类的Class对象
注1:ClassNotFoundException (类名错误/少jar包)
注2:同一类,类对象只会在JVM加载一次
1.Class:表示正在运行的Java应用程序种的类和接口
2.Field:提供有关类和接口7的属性信息,以及对它的动态访问权限
3.Constructor:提供关于类的单个构造方法信息以及它的访问权限
4.Method:提供类或接口某个方法信息
5.Modifier:访问修饰符
- Class对象的由来是将class文件读入内存,并为之创建一个Class对象
-
对于类加载机制与双亲委派模型感兴趣的小伙伴可以阅读这篇文章:https://blog.csdn.net/a745233700/article/details/90232862
六. class类 :代表一个类,是Java反射机制的起源和入口- 用于获取与类相关的各种信息, 提供了获取类信息的相关方法
- Class类继承自Object类
- Class类是所有类的共同的图纸
- 每个类有自己的对象,同时每个类也看做是一个对象,有共同的图纸Class,存放类的结构信息,能够通过相应方法取出相应的信息:类的名字、属性、方法、构造方法、父类和接口。
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。也就是jvm中有N多的实例每个类都有该Class对象。(包括基本数据类型)
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的defineClass 方法自动构造的。也就是这不需要我们自己去处理创建,JVM已经帮我们创建好了。
没有公共的构造方法,方法共有64个太多了。下面用到哪个就详解哪个吧
原文:https://blog.csdn.net/sinat_38259539/article/details/71799078
七. 反射机制的优缺点优点:
- 可以动态获取类的实例,提高灵活性
- 与动态编译结合
缺点:
1)性能较低,需要通过解析字节码,解析内存中的对象
解决的方法:
- 通过setAccessible(true)关闭JDK的安全检查来提升速度
- 多次创建一个类的实例,有缓存速度快一些
- ReflectASM工具,通过字节码生成的方式加快反射速度
2)相对不安全,破坏了封装性(通过反射可以获取私有方法和属性)



