浅谈Java反射
什么是反射?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。通俗一点讲反射就是对象的反向处理。
下面我们具体说明反射的一些操作
1.三种获取Class对象的方法:
1.Class classz = 类对象.getClass();
2. Class classz = 类名.class;
3. Class classz = Class.forName("类名");
classz.getName();获取包名+类名
classz.getSimpleName();获取类名 三者区别:1和2可以编译时检查,3受查时异常,异常名为ClassNotFindException
2.通过反射获取父类的信息
2.1获取当前类的父类对象
classz.getSuperclass() //包名+类名
classz.getSuperclass().getName() //类名 2.2获取当前类实现的接口
public Class<?>[] getInterfaces();
claszz.getInterfaces();
3.通过反射调用构造
.1获取指定参数类型的构造方法
public Constructor<?> getConstructor(Class<?> parameterTypes)
.2获取类中所有构造
public Constructor<?>[] getConstructors()
以上的操作是直接利用了Constructor类中的toString()方法取得了构造方法的完整信息(包含方法权限,参数列表),
而如果你只使用了getName()方法,只会返回构造方法的包名类名。
.newInstance方法,cls.newInstance(),调用toString()方法输出,调用该方法时,必须使类有无参构造方法,
如果木有无参构造方法,则只能通过明确的构造调用实例化处理
5.通过反射获取普通方法
.1获取所有公有方法
public Method[] getMethods() throws SecurityException;
.2获取指定方法
public Method getMethod(String name,Class<?> parameterTypes,....);
.3java.lang.reflect.Method中提供一个调用方法
public Object invoke(Object o1,Object o2) throws InvocationTargetException,IllegalAccessException,IllegalArgumentException
6.反射调用类中的属性
.1获取父类和子类所有公有的属性
public Field[] getField() throws SecurityException
.2获取父类或者子类中指定属性(公有的)
public Field getField(String name属性名) throws NoSuchFieldException,SecurityException
.3获取本类中的所有的属性(不包含从父类继承的属性)
public Field[] getDeclareField() throws SecurityException
.4获取本类中指定属性(不包含从父类继承的属性)
public Field getDeclareField(String name属性名) throws NoSuchFieldException,SecurityException
.5java.lang.reflect.Field方法提供两个重要的方法
6.5.1设置属性内容
public void set(Object obj,Object value) throws IllegalArgumentException
6.5.2取得属性内容
public Object get(Object obj) throws IllegalArgumentException,
IllegalAccessException
获取属性这块就不给具体实例,如果想仔细了解的话,请看下一篇文章将source类中的属性值赋给target类中对应的属性。
6.6Java反射继承结构
AccessibleObject类中有一个方法:
动态设置封装性
public void setAccessible(boolean flag) throws SecurityException
通过此方法我们可以对类中的私有成员属性进行操作,虽然违背了Java面向对象的封装性,但是在实际应用中使代码更加健壮
.7获取属性类型
public Class<?> getType()
该方法不在此处举例,
讲了这么多方法和概念,不实战怎么能够掌握这些方法呢,下面我们通过一两个实例带大家进行深入的掌握和理解Java反射,由于篇幅原因,请看下一篇文章,谢谢!
浅谈Java反射的更多相关文章
- 浅谈java反射机制
目录 什么是反射 初探 初始化 类 构造函数 属性 方法 总结 思考 什么是反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意 ...
- 浅谈 java 反射机制
一:Java反射概念 Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其mod ...
- 浅谈Java反射机制 之 使用类的 属性、方法和构造函数
前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...
- 浅谈Java反射机制 之 获取类的字节码文件 Class.forName("全路径名") 、getClass()、class
另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它 ...
- 浅谈Java反射与框架
Java反射 1.示例 1.用户类 package com.lf.entity; import com.lf.annotation.SetProperty; import com.lf.annotat ...
- 浅谈Java反射机制 之 获取类的 方法 和 属性(包括构造函数)
上一篇 获取 类 的字节码文件 我们讲到了获取类的字节码文件的三种方法 第三种方法通过getClass("全路径名")获取字节码文件最符合要求 1.获取构造方法 先贴上我们要获取的 ...
- 浅谈Java的反射机制和作用
浅谈Java的反射机制和作用 作者:Java大师 欢迎转载,转载请注明出处 很多刚学Java反射的同学可能对反射技术一头雾水,为什么要学习反射,学习反射有什么作用,不用反射,通过new也能创建用户对象 ...
- 浅谈Java代理二:Cglib动态代理-MethodInterceptor
浅谈Java代理二:Cglib动态代理-MethodInterceptor CGLib动态代理特点: 使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生 ...
- 浅谈Java代理一:JDK动态代理-Proxy.newProxyInstance
浅谈Java代理一:JDK动态代理-Proxy.newProxyInstance java.lang.reflect.Proxy:该类用于动态生成代理类,只需传入目标接口.目标接口的类加载器以及Inv ...
随机推荐
- 微信小程序绘制分享图
微信小程序绘制分享图例子: demo下载地址:https://gitee.com/v-Xie/wxCanvasShar 大致代码会再以下说明 实际开发项目: 基础知识点: 了解canvas基础知识 w ...
- 【Network】优化问题——Label Smoothing
滴:转载引用请注明哦[握爪]https://www.cnblogs.com/zyrb/p/9699168.html 今天来进行讨论深度学习中的一种优化方法Label smoothing Regular ...
- CMakeList.txt(3): 一个cmake实例
介绍一个比较实用的例子,即包含生成静态库又包含引入外部头文件和链接库的cmake demo. 先按照工程规范建立工程目录,并编写代码,以下面的工程目录为例进行解释这个例子,工程的目录结构为: 1. 编 ...
- 常用Hadoop命令(bin)
**** bin 是二进制文件的意思,sbin....据说是superbin(管理员的bin) HDFS命令 某个文件的blocks信息 hadoop fsck /user/xx -files -bl ...
- Maven 学习总结 (七) 之 灵活构建
一个优秀的构建系统必须足够灵活,他应该能够让项目在不同的环境下都能成功地构建.Maven为支持项目的灵活性,内置了三大特性,即属性.Profile和资源过滤. Maven属性 通过<proper ...
- Airflow 重跑dag中部分失败的任务
重跑dag中部分失败的任务 例如 dagA 中, T1 >> T2 >> T3 >> T4 >> T5 ,其中 T1 T2 成功, T3 失败, T4 ...
- 开源顶级持久层框架——mybatis(ibatis)——day02
mybatis第二天 高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一个持久层框架,mybatis ...
- 如何使用门罗币远程节点remote node?
当使用门罗币钱包的时候,都需要启动monerod,用来同步门罗币区块. 但是因为区块体积目前已经超过40G了, 所以需要花费很多天时间才能把数据同步完. 这对于使用门罗币非常的不方便. 远程节点rem ...
- struts2 s2-032漏洞分析
0x01Brief Description 最近面试几家公司,很多都问到了s2漏洞的原理,之前调试分析过java反序列化的漏洞,觉得s2漏洞应该不会太难,今天就分析了一下,然后发现其实漏洞的原理不难, ...
- hibernate之一级缓存
缓存目的:提高效率. sql语句与数据库交互,返回数据组装成对象存入session缓存中.程序查询时,优先访问缓存中是否存在id相同对象. hibernate中session缓存(一级缓存)存在