Java基础教程-什么是java反射?
Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。
它使得Java程序可以在运行时获取类的信息,并且通过这些信息来实现一些高级的功能,如泛型、注解、动态代理等。反射机制的核心是反射API,它包括了Class类、Constructor类、Method类、Field类等,通过这些类可以实现对类的动态操作。
Java的注解原理是基于反射机制实现的。当代码中出现了注解时,编译器会将注解信息写入到class文件中,而这些注解信息最终会被JVM读取并解析。在运行时,通过反射机制可以获取到这些注解信息,以便根据注解信息进行处理。
简单的反射例子:
public class MyClass {
private String name;
public int age;
public MyClass(String name, int age) {
this.name = name;
this.age = age;
}
public void sayHello() {
System.out.println("Hello, my name is " + this.name + ", I am " + this.age + " years old.");
}
}
public class ReflectionExample {
public static void main(String[] args) {
try {
// 获取MyClass类的Class对象
Class<?> clazz = Class.forName("MyClass");
// 获取类的构造方法
Constructor<?> constructor = clazz.getConstructor(String.class, int.class);
// 创建类的实例
Object obj = constructor.newInstance("Tom", 20);
// 获取类的属性
Field field = clazz.getDeclaredField("age");
field.setAccessible(true);
int age = field.getInt(obj);
System.out.println("Age is " + age);
// 获取类的方法
Method method = clazz.getDeclaredMethod("sayHello");
method.invoke(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
}