关于反射学习

Java中发射机制非常重要,在框架中使用频繁

发射使用流程:

1、通过Class.classforName(“配置文件中的路径”); 获取 字节码文件

Class clazz = Class.forName("Reflect.Person");

2、通过 clazz.getConstructor(参数类型.class);获得 构造函数

Constructor con =  clazz.getConstructor(null); //(构造函数参数类型)

使用 .newInstance(null);构造对象

p = (Person) con.newInstance(null); //给对象的参数

3、通过 clazz.getMethod(“方法名”,参数类型.class);获得 成员方法

Method method = clazz.getMethod("getName", null);//获取 getName();方法

method.incoke(“对象”,传参);

method.invoke(p, null);

4、通过clazz.getDeclaredMethod(“方法名”,参数类型.class);获得 私有方法

Method method = clazz.getDeclaredMethod("printTo", String.class);

通过method.setAccessible(true);设置访问权限

method.setAccessible(true);            //暴力访问类私有方法

method.invoke(p,"xiehe");

5、通过clazz.getField(“字段名”);获取类的 字段属性

Field field = clazz.getField("add");//获得字段域

通过field.get(对像);获得字段值

String value = (String) field.get(p);

6、通过clazz.getDeclaredField(“字段名”);获得私有 字段属性

Field field = clazz.getDeclaredField("num");

field.setAccessible(true); //设置访问权限

int value = (int) field.get(p); //获取值

时间: 2024-10-08 10:45:08

关于反射学习的相关文章

java中反射学习整理

转载请注明:http://blog.csdn.net/j903829182/article/details/38405735 反射主要是指程序可以访问,检测和修改它本身的状态或行为的一种能力. java中反射是一种强大的工具,它能够创建灵活的代码,这些代码可以在运行时装载,无须在组件之间进行链接.反射允许在编写与执行时,使程序能够接入到jvm中的类的内部信息,而不是源代码中选定的类协作的代码.这使反射成为构建灵活应用代码的主要工具.需要注意的是,如果使用不当,反射的成本会很高. package

Java反射学习总结

广州疯狂软件教育Java培训,iOS培训分享Class类是Reflection API中核心的类,他位于java.lang.Class列出一些常用的方法.- getName() : 获得类的完整名字- getFields() : 获得类的public类型的属性- getDeclaredFields() : 获得类的所有属性- getMethods() : 获得类的public类型的方法- getDeclaredMethods() : 获得类的所有方法- getMethod(String name

Java反射学习总结终(使用反射和注解模拟JUnit单元测试框架)

本文是Java反射学习总结系列的最后一篇了,这里贴出之前文章的链接,有兴趣的可以打开看看. http://blog.csdn.net/a396901990/article/category/2302221 本文介绍了如何利用反射和注解去简单的模拟JUnit4单元测试框架,之所以选择JUnit4是因为4.0以后最大的改进就是使用了注解.需要注意的是这里并不是完全的模拟,只是简单实现了一下Runner类和JUnit注解相关的工作流程.所以本文的主要目的是介绍反射和注解的使用.废话不多说,直接进入正文

Java反射学习总结四(动态代理使用实例和内部原理解析)

通过上一篇文章介绍的静态代理Java反射学习总结三(静态代理)中,大家可以发现在静态代理中每一个代理类只能为一个接口服务,这样一来必然会产生过多的代理,而且对于每个实例,如果需要添加不同代理就要去添加相应的代理类.解决这一问题最好的做法是可以通过一个代理类完成全部的代理功能或者说去动态的生成这个代理类,那么此时就必须使用动态代理完成. 动态代理知识点: Java动态代理类位于java.lang.reflect包下,主要有以下一个接口和一个类: 1.InvocationHandler接口:    

Java反射学习:深入学习Java反射机制

一.Java反射的理解(反射是研究框架的基础之一) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制. 二.逐步分析 参考:https://blog.csdn.net/u012585964/article/details/52011138 1.关于Class 1.Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Met

java反射学习个人随笔

个人学习反射的过程记录在这里: 一:先学习了Class这个类的一些基本知识. Class这个类是为了来描述其他类的.一个Class类的对象实际上就是一个类(个人理解). 每个类都有一个对应的该类的一个对象.它是由系统创建的.此时不管我定义几个Class类的对象. 它都会指向同一个对象. 1 // 创建Class对象实例的三种方式. 2 // 1.类名.class 3 Class clazz = Person.class; 4 // 2.对象.getClass() 5 Class clazz1 =

Java高级特性之反射学习总结

老规矩我们还是先提出几个问题,一门技术必然要能解决一定的问题,才有去学习掌握它的价值 一. 什么是反射? 二.反射能做什么? 一. 什么是反射? 用在Java身上指的是我们可以于运行时加载.探知.使用编译期间完全未知的classes.换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体.或对其fields设值.或唤起其methods. 如果你是一个Android Developer,前辈们都会教导你尽量少用反射,效率太低,

Java反射学习总结一(基础篇)

Class类是Reflection API中核心的类,他位于Java.lang.Class 列出一些常用的方法. - getName() : 获得类的完整名字 - getFields() : 获得类的public类型的属性 - getDeclaredFields() : 获得类的所有属性 - getMethods() : 获得类的public类型的方法 - getDeclaredMethods() : 获得类的所有方法 - getMethod(String name, Class[] param

反射 学习笔记(五)构建可扩展的应用程序

构建可扩展的应用程序如果可扩展的应用程序预编程为查询指定的接口,则它可以在运行时确定类型是否可以被激活.一旦验证测试通过,类型便可以支持额外的接口,为它们的功能提供多种结构. 示例: 目标:学习简单的接口编程过程,使用反射.特性将外部程序集在运行时加载到内存中并使用 第一步:新建解决方案 两个项目文件 MExtendableApp是主项目,CommonSnappableTypes是扩展项目(提供接口标准.公司信息描述.功能信息描述) 接下来,我们来写主项目 主界面非常简单 对Form进行初始化

反射学习小结

(初学者自学总结) 学习理由: 框架底层重要的实现原理之一(反射) 反射就是在"java运行系统"时期 到"类加载器验证字节码的正确性" 即运行期间动态的操作类加载器的字节码文件从而获得整个类文件. 1.获取一个类的class对象的方式 eg:获取Person实体类 ①:通过.class获取:System.out.println(Person.class); ②:通过class对象中forName()获取:Class<?> aClass = Class.