【入门】反射基本操作
前言
反射之所以被称为框架的灵魂,主要是因为它赋予了我们在运行时分析类以及执行类中方法的能力。
通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。
来自:JavaGuide
应用场景
- 动态代理
- 注解 (思考一下为什么,你写一个@Component,Spring就会帮你管理这个Bean?
Class<User> userClass = User.class;
Annotation[] annotations = userClass.getAnnotations();
for (Annotation annotation : annotations) {
// 这一步骤可以处理好多事情
System.out.println(annotation.annotationType());
}
示例
public class User {
private String name;
private Integer age;
public User() {
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
public class App2 {
public static void main(String[] args) {
Class<User> userClass = User.class;
User user = null;
try {
// 通过反射实例化对象
user = userClass.newInstance();
user.setName("测试1");
System.out.println(user.getName()); // 测试1
// 获取方法
Method setName = userClass.getDeclaredMethod("setName", String.class);
setName.invoke(user,"测试2");
System.out.println(user.getName()); // 测试2
// 获取private属性,并设置值
Field name = userClass.getDeclaredField("name");
name.setAccessible(true);
name.set(user, "测试3");
System.out.println(user.getName()); // 测试3
Field[] declaredFields = userClass.getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println(declaredField.getName());
}
} catch (Exception e) {
System.out.println(e);
}
}
}
总结
反射,可以根据类元信息,访问、修改、获取一些对象的信息。
本文来自博客园,作者:帅气的涛啊,转载请注明原文链接:https://www.cnblogs.com/handsometaoa/p/17488599.html