Java 反射机制原理与用法详解
什么是 Java 反射机制
Java 反射是指程序可以自己获取自身的信息,如类名、属性、方法、注解等。通过反射,可以在运行时动态地获取类的信息、动态创建类对象、动态调用类的方法。
Java 反射的主要应用
-
动态生成Java类对象
-
动态获取类的属性、方法和注解等信息
-
动态调用类的方法
反射原理
Java反射机制是基于JVM来实现的,它会在程序运行时将类的信息加载到内存中,并且把这些信息封装成对象(Class对象),程序通过Class对象就可以访问类的属性和方法等信息,实现对该类的操作。
Java反射机制主要包含以下几个类:
-
Class类:表示已经被JVM加载的类,包含了该类的所有信息,通过这个类可以获取方法、属性等信息。
-
Field类:表示类的成员变量(属性)。
-
Method类:表示类的方法。
-
Constructor类:表示类的构造方法。
Java 反射的用法
获取类的信息
// 通过类的全名获取Class对象
Class clazz = Class.forName("com.example.demo.User");
// 获取类的所有属性
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
System.out.println(f.getName());
}
// 获取类的所有方法
Method[] methods = clazz.getMethods();
for (Method m : methods) {
System.out.println(m.getName());
}
// 获取类的所有构造方法
Constructor[] constructors = clazz.getConstructors();
for (Constructor c : constructors) {
System.out.println(c.getName());
}
动态创建类对象
// 通过类名获取Class对象
Class clazz = Class.forName("com.example.demo.User");
// 通过Class对象创建类对象
User user = (User) clazz.newInstance();
动态调用方法
// 获取Method对象
Method method = clazz.getMethod("sayHello", String.class);
// 通过Method对象调用类方法
Object result = method.invoke(user, "Jone");
// 输出“Hello, Jone”
System.out.println(result);
示例说明
示例一:动态创建 JSON 对象
// 引入 fastjson 库
import com.alibaba.fastjson.JSONObject;
public class Main {
public static void main(String[] args) {
// 利用反射机制动态创建JSONObject对象
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "Tom");
jsonObject.put("age", 18);
jsonObject.put("gender", "male");
// 输出json对象
System.out.println(jsonObject.toJSONString());
}
}
示例二:ORM框架Mybatis的字节码注解
// 引入注解包
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "age", column = "age")
})
User getUserById(String id);
}
在这个例子中,Mybatis的Mapper接口使用了注解的方式,可以通过反射机制获取这些注解信息,并根据这些信息动态生成SQL语句,完成数据库操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 反射机制原理与用法详解 - Python技术站