java反射底层原理。
Java反射机制是java的这门语言所独有的,这也是面试官喜欢问的知识点之一,我们不能仅仅从会使用反射这个类以及类中方法,来认定自己会这个知识点,我认为这太过于表面,不是我们学习java的正确的方式。
首先我们先了解反射的相关概念:反射是指java运行状态中,任何类都能知道当前类的属性和方法,任何对象都能调用当前对象的属性和方法。
我们首先来看一个例子:
package com.javabase.reflect;import java.lang.reflect.Field;
import java.lang.reflect.Method;public class Demo01 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {Class p1 = Class.forName("com.javabase.reflect.person");System.out.println(p1.getName());Method m1 = p1.getMethod("test2");System.out.println(m1);Field[] fields = p1.getFields();for (Field f:fields){System.out.println(f.getName());}}
}
这是个简单的反射的例子,其中我认为反射的最重要的一句代码,也是java发射的核心代码 — Class.forName(“当前类的地址”);,这是该类被加载到java虚拟机的过程。我们可以从forName中的源码可以看出
public static Class<?> forName(String className)throws ClassNotFoundException {Class<?> caller = Reflection.getCallerClass();return forName0(className, true, ClassLoader.getClassLoader(caller), caller);}
我们可以看出有个类加载的过程
就是将当前类的对象加载到java虚拟机中,得到了类对象,类对象存在java的堆中,所有的类的类对象都被java虚拟机存储在jvm中的堆中,方便java虚拟机对类对象的管理。
可以通过上述的例子来画出java虚拟机中运行的图。
这就是我的个人理解,如有错误,还望各位指教。
java反射底层原理。
Java反射机制是java的这门语言所独有的,这也是面试官喜欢问的知识点之一,我们不能仅仅从会使用反射这个类以及类中方法,来认定自己会这个知识点,我认为这太过于表面,不是我们学习java的正确的方式。
首先我们先了解反射的相关概念:反射是指java运行状态中,任何类都能知道当前类的属性和方法,任何对象都能调用当前对象的属性和方法。
我们首先来看一个例子:
package com.javabase.reflect;import java.lang.reflect.Field;
import java.lang.reflect.Method;public class Demo01 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {Class p1 = Class.forName("com.javabase.reflect.person");System.out.println(p1.getName());Method m1 = p1.getMethod("test2");System.out.println(m1);Field[] fields = p1.getFields();for (Field f:fields){System.out.println(f.getName());}}
}
这是个简单的反射的例子,其中我认为反射的最重要的一句代码,也是java发射的核心代码 — Class.forName(“当前类的地址”);,这是该类被加载到java虚拟机的过程。我们可以从forName中的源码可以看出
public static Class<?> forName(String className)throws ClassNotFoundException {Class<?> caller = Reflection.getCallerClass();return forName0(className, true, ClassLoader.getClassLoader(caller), caller);}