反射的应用 原理 详细解析
来源:互联网 发布:湖北广电网络宽带 编辑:程序博客网 时间:2024/06/13 13:40
概述
就是在程序的运行时间获取类的字节码文件对象,从何获得类构造方法,成员变量,方法等内容, 注意 类的字节码对象有且仅有一个,因此多线程的时候可以作为同步锁来使用
原理
在程序的运行过过程中,将类加载进内存中都必须要经过 加载 链接 初始化三个过程
加载 : 就是将class文件加载到内存中 创建class对象的过程链接 : 判断类的内部结构,为静态成员变量分配内存 并且初始化初始化 : 就是调用类中的方法 成员变量的过程
类加载器的概述
Bootstrap ClassLoader 根类加载器
负责加载java 核心类 比如String System Date 等
Extension ClassLoader 扩展类加载器
负责加载lib目录下的jar
Sysetm ClassLoader 系统类加载器
当JVM启动时去加载classpath 所指定的路径
应用
获取class对象三种方式
三个对象都是一样的 因为在内存中都一致
clazz1 == clazz2 ==clazz3
第一种:
Class clazz1 = Class.forName(“com.ruirui.app.Attr”)
第二种 :
Class clazz2 = Attr.class
第三种
Attr attr = new Attr( )
Class clazz3 = attr.getclass( )
关于Constructor对象
Attr attr = new Attr( )
Class clazz3 = attr.getclass( )
获取无参数构造方法对象
Constuctor con = clazz3.getConstructor( ) 获取无参数构造方法对象
Attr attr = con.newInstance( );
获取有参数构造方法对象
Constuctor con = clazz3.getConstructor(String.class , int.class ) 获取无参数构造方法对象
Attr attr = con.newInstance( “nihao”,22 );
API 介绍
getConstructor(); //获取指定的构造方法(只能获取公共的) getConstructors(); //获取所有的公共的构造方法 getDeclaredConstructor(); //获取指定的构造方法(包括私有) getDeclaredConstructors(); //获取所有的构造方法(包括私有)
关于Filed对象
Class clazz = Class.forName("com.ruirui.bean.Person"); Constructor c = clazz.getConstructor(String.class,int.class); Person p = (Person) c.newInstance("nihao",23); //Field f = clazz.getField("name"); //f.set(p, "nihao"); //成员变量私有时 Field f = clazz.getDeclaredField("name"); f.setAccessible(true); f.set(p, "你好");
关于Method对象
Class clazz = Class.forName("com.ruirui.bean.Person"); Constructor c = clazz.getConstructor(String.class,int.class); Person p = (Person) c.newInstance("nihao",23); Method m = clazz.getMethod("eat"); m.invoke(p); //eat 是方法名 int.class 后面是参数 Method m2 = clazz.getMethod("eat", int.class); m2.invoke(p, 10);
示例
- 反射的应用 原理 详细解析
- 框架原理反射的应用
- 解析Spring IOC原理——工厂模式与反射机制的综合应用
- 解析Spring IOC原理——工厂模式与反射机制的综合应用
- 解析Spring IOC原理——工厂模式与反射机制的综合应用
- 非常详细的sift算法原理解析
- Service_原理详细解析
- 详细解析Linux scp命令的应用
- 详细解析Linux scp命令的应用
- 详细解析Linux scp命令的应用
- 详细解析Linux scp命令的应用
- 详细解析Linux scp命令的应用
- 详细解析Linux scp命令的应用
- 详细解析Linux scp命令的应用
- fusionCharts的详细解析与应用
- 详细解析Linux scp命令的应用
- 详细解析Linux scp命令的应用
- fusionCharts的详细解析与应用
- Android官方DataBinding简例(一)
- 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序
- 对于软件开发中开发人员与测试人员关系的理解
- IOS-隐藏状态栏
- new一个对象的过程发生了什么
- 反射的应用 原理 详细解析
- 微巨科技:公众平台新增定时群发功能
- AAA
- 设计模式简介
- 多线程和事物管理一起使用的问题
- 【Hibernate】(2)Hibernate的核心接口、增删改查操作、主键ID生成方式、查询方式
- Problem C: 机器翻译
- 《python灰帽子》笔记四
- Android手机号码正则表达式