@TryLoveCatch
2022-04-18T20:31:45.000000Z
字数 2559
阅读 860
Java知识体系
加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。
反射之所以被称为框架的灵魂,主要是因为它赋予了我们在运行时分析类以及执行类中方法的能力。
通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。
Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。
简单来说,反射机制指的是程序在运行时能够获取自身的信息。在 Java 中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。
public class DebugInvocationHandler implements InvocationHandler {
/**
* 代理类中的真实对象
*/
private final Object target;
public DebugInvocationHandler(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args) throws InvocationTargetException, IllegalAccessException {
System.out.println("before method " + method.getName());
// 这里用到了反射!!!!!
Object result = method.invoke(target, args);
System.out.println("after method " + method.getName());
return result;
}
}
https://zhuanlan.zhihu.com/p/152635495
所以说:
https://blog.csdn.net/wo541075754/article/details/105133115
-- | Object.class | Class.forName() | new Object().getClass() |
---|---|---|---|
编译器or运行期? | 编译器 | 运行期 | 编译器 |
执行类的初始化? | 否 | 是 | 是 |
需要依赖反射类的包? | 是 | 否 | 是 |
不一样,如上所述:
反射在达到一定次数时,会动态编写字节码并加载到内存中,这个字节码没有经过编译器优化,也不能享受JIT优化。
https://javaguide.cn/java/basis/reflection.html#%E4%BD%95%E4%B8%BA%E5%8F%8D%E5%B0%84
https://www.cnblogs.com/wkfvawl/p/14806214.html
https://www.jianshu.com/p/4e2b49fa8ba1
https://blog.csdn.net/wo541075754/article/details/105133115
https://blog.csdn.net/One_hundred_nice/article/details/103607140