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反射底层原理。_第1张图片

这就是我的个人理解,如有错误,还望各位指教。

你可能感兴趣的:(java基础学习)