java反射原理_java反射原理是什么?java反射机制原理详解

java反射原理_java反射原理是什么?java反射机制原理详解前面给大家介绍了一下什么是 java 反射机制 那么下面要给大家介绍的就是 java 反射机制的原理 那么它的原理究竟是怎样的呢 下面就通过下面来做一下详细的了解吧 首先我们再来介绍一下 java 反射机制 java 反射机制就是 java 程序在运行的时候动态的创建类并调用类的方法以及属性 下面就来介绍一下原理 一 java 反射机制原理下面是我们经常可以见到的反射例子 Class gt clz Class

前面给大家介绍了一下什么是java反射机制,那么下面要给大家介绍的就是java反射机制的原理,那么它的原理究竟是怎样的呢?下面就通过下面来做一下详细的了解吧。

首先我们再来介绍一下java反射机制。

java反射机制就是java程序在运行的时候动态的创建类并调用类的方法以及属性。

下面就来介绍一下原理。

一、java反射机制原理

下面是我们经常可以见到的反射例子:Class

> clz = Class.forName(“java.util.ArrayList”);

ArrayList object = (ArrayList) clz.newInstance();

Method method = clz.getMethod(“add”,Object.class);

method.invoke(list , “sss”);

来分析一下:

前面的2行实现了类的装载、链接、初始化。

后面的2行实现了从class对象当中,获取对象,之后执行反射调用。

这里的话让我们来设想一下,如果,要实现Invoke方法,那么是不是只要实现下面的类就可以了呢?public class Method

{

public void invoke(Object obj, Object…args)

{

ArrayList list = (ArrayList) obj;

list.add(args);

}

}

反射的原理之一就是动态的生成类似上面的字节码,加载到jvm当中运行。

再一起来看看Method对象流程。

上面的Class对象是在加载类的时候,由jvm构造的。

jvm为每一个类管理一个独一无二的Class对象,这个Class对象里维护着这个类的所有

Method、Field、Constructor的cache,这份cache可以被叫做是根对象,每一次,getMethod获取到的Method对象都持有对根对象的引用。

由于一些重量级的Method的成员变量,大多数都不希望每次在创建Method对象的时候,都要重新进初始化,所以,所有代表同一个方法的Method对象都共享着根对象的MethodAccessor,每一次创建都会调用根对象的copy方法复制一份。Method copy()

{

Method res = new Method(clazz, name, parameterTypes, returnType

, exceptionTypes, modifiers, slot, signature

, annotations, parameterAnnotations, annotationDefault);

res.root = this;

res.methodAccessor = methodAccessor;

return res;

}

调用invoke方法流程

首先的话,method.invoke方法会获取一个MethodAccessor。

会先从Method的根对象当中获取MethodAccessor。

假如是空,那么用reflectionFactory.newMethodAccessor返回DelegatingMethodAccessorImpl实例。

之后再把MethodAccessor赋值给Method的root对象当中,之后调用DelegatingMethodAccessorImpl当中的invoke方法。

在调用invoke的次数大于15次之后,MethodAccessor将由java代码生成。

关于java反射机制原理就给你介绍到这里了,更多java反射机制常见问题,可以继续关注本站来了解。

推荐阅读:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232217.html原文链接:https://javaforall.net

(0)
上一篇 2025年10月25日 上午11:01
下一篇 2025年10月25日 上午11:22


相关推荐

  • anaconda镜像是什么意思_镜像是反的吗

    anaconda镜像是什么意思_镜像是反的吗Anaconda的conda特别好用但如果用国外的镜像,慢的出奇可以改为了国内镜像会好很多

    2022年8月1日
    26
  • 8080端口被占用怎么办

    8080端口被占用怎么办做项目时肯定会遇到 8080 端口被占用的情况 其实解决办法很简单 Ctrl R 键 输入 cmd 复制这串代码到 cmd 界面 netstat aon findstr 8080 可以看到 8080 确实被占用了 把后面的都终止掉 代码如下 taskkill pid8960 F 继续操作剩下的操作即可

    2026年3月19日
    1
  • 在docker 上安装lnmp 环境

    在docker 上安装lnmp 环境

    2022年2月19日
    41
  • aaa服务器显示认证失败,华为aaa认证案例-电信华为机顶盒50%通路故障或AAA认证失败怎么回…

    aaa服务器显示认证失败,华为aaa认证案例-电信华为机顶盒50%通路故障或AAA认证失败怎么回…华为交换机AAA配置与管理内容来自用户:wanhyl一、基础1、AAA是指:authentication(认证)、authorization(授权)、accounting(计费)的简称,是网络安全的一种管理机制;Authentication是本地认证/授权,authorization和accounting是由远处radius(远程拨号认证系统)服务或hwtacacs(华为终端访问控制系统)服务器完…

    2022年5月4日
    558
  • webstrom 2022激活码_在线激活

    (webstrom 2022激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月1日
    183
  • 动静分离架构[通俗易懂]

    动静分离架构[通俗易懂]1.应用场景了解更多,根据具体场景选用不用的技术进行架构优化. 2.学习/操作 一、静态页面 静态页面,是指互联网架构中,几乎不变的页面(或者变化频率很低),例如: 首页等html页面 js/css等样式文件 jpg/apk等资源文件 静态页面,有与之匹配的技术架构来加速,例如: CDN ngi…

    2022年4月29日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号