java体现反射的简单示例
下面这个示例展示了反射的多个特点,包括动态获取类信息、动态创建对象、动态调用方法和访问字段等。请注意,为了简化示例,省略了异常处理和其他细节。
class Dog {
private String name;
public Dog() {}
public Dog(String name) {
this.name = name;
}
public void doSomething() {
System.out.println(name + ": 2024旺旺旺...");
}
public String toString() {
return "你好!我是" + name;
}
}
public class ReflectExample {
public static void main(String[] args) throws Exception {
// 获取类的信息
Class<?> clazz = Dog.class;
String className = clazz.getSimpleName();
int modifiers = clazz.getModifiers();
Package pkg = clazz.getPackage();
System.out.println("Class Name: " + className); // 类名
System.out.println("Modifiers: " + Modifier.toString(modifiers)); // 类修饰符
System.out.println("Package: " + pkg.getName()); // 包名
// 通过无参构造创建对象实例
Object instance = clazz.newInstance();
// 获取构造函数并创建对象
Constructor<?> constructor = clazz.getConstructor(String.class);
instance = constructor.newInstance("旺财");
// 获取和调用方法
Method method = clazz.getMethod("doSomething");
method.invoke(instance);
// 获取和设置字段的值
Field field = clazz.getDeclaredField("name");
field.setAccessible(true);
Object value = field.get(instance);
System.out.println("Field Value: " + value); // Field Value: 旺财
field.set(instance, "旺财2");
System.out.println(instance); //你好!我是旺财2
// 获取Deprecated类的注解,判断是否废弃
Annotation annotation = clazz.getAnnotation(Deprecated.class);
System.out.println("Is Deprecated: " + (annotation != null));
}
}
Class Name: Dog
Modifiers:
Package: com.xxx.abcd
旺财: 2024旺旺旺...
Field Value: 旺财
你好!我是旺财2
Is Deprecated: false
Process finished with exit code 0
这个示例中,我们定义了一个 Dog 类,它具有私有字段 name 和两个方法 doSomething() 和 toString() 。在 ReflectExample 类中,我们使用反射来获取类的信息、创建对象实例、获取和调用方法、获取和设置字段的值,以及获取类的注解。