鲁春利的工作笔记,谁说程序员不能有文艺范?
Java程序在运行期间可以动态加载、解析和使用一些在编译阶段并不确定的类型,这一机制被称为反射(Reflection)或自省(Introspection)。Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。这种“看透class”的能力(the ability of the program toexamine itself)被称为introspection(内省、内观、反省)。Reflection和introspection是常被并提的两个术语。
Class类是Reflection API 中的核心类。在类加载时,java虚拟机会自动创建相应的Class对象。
在java.lang.Object 类中定义了getClass()方法,因此对于任意一个Java对象,都可以通过此方法获得对象的类。
Class类的实例用于表示运行时的java数据类型,包括类、接口、数组、枚举、注解、基本数据类型甚至void等。
使用 Reflection 步骤总结:
一、获得你想操作的类的 java.lang.Class 对象
获得Class对象:
- 针对引用数据类型:
调用静态方法:Class.forName();
Class.forName("p1.Person"); Class.forName("com.mysql.jdbc.Driver");
调用Object类中定义的getClass()方法
Person person = new Person(); Class cs = p.getClass(); Class strClass = "Hello World".getClass()
使用.class表达式
Class strClass = String.class; Class personClass = p1.Person.class; Class jdbcClass = com.mysql.jdbc.Driver.class;
- 针对基本数据类型及void
使用.class表达式
Class intClass = int.class; Class dobClass = double.class; Class voidClass = void.class;
调用相应封装类的Type属性
Class IntegerClass = Integer.TYPE; Class voicClass = Void.TYPE;
二、取得类的成员信息
调用例如 getDeclaredMethods 等方法
三、使用 Reflection API 来操作类的成员信息
在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中。
时间: 2024-10-05 04:43:33