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虚拟机中运行的图。

在这里插入图片描述

这就是我的个人理解,如有错误,还望各位指教。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值