浅谈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 ...
随机推荐
- golang-flag的问题
如果选择-flag x 就是不支持布尔型
- linux/ubantu 安装 mysql 并且使其支持远程连接
前言:打开ubantu的 控制台 或者 远程连接到 ubantu的服务器 其他的 linux 基本类似 可能下载 方式稍微不同 开始吧! [第一步]首先是安装(目前是2019-4-9 默认安装的是 ...
- Mac 上 Apache Apollo 的安装与运行,和官方下载文件中 Python 实例的演示
前不久我在 Mac 上成功安装了 mosquitto,这次我又试了试安装另一个热门的 broker —— Apache Apollo.对在 Mac 上安装 mosquitto 感兴趣的可以点击查看我的 ...
- idea创建springboot Web项目
一.File —— New —— Project 二.next 三.选择你要的骨架,然后 next.个人觉的这些不用选,因为就是帮你建了几个文件夹,导入了几个jar包依赖而已. 四.Finish 五. ...
- 【1】MySQL大数据量分页查询方法及其优化
---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适应场景: 适用于数据量较少的情况(元组百/千 ...
- Windows 10中Oracle数据库导出到Access数据库(MDB)
本篇博文简单介绍将Oracle数据库中表导出到Access数据库(主要是MDB格式)的方法.主要有三种,分别是PL/SQL.ESFDatabaseMigrationToolkit及ODBC. PL/S ...
- 洛谷红名+AC150祭
emmmm没什么想说的,随便放个图吧23333(逃~
- react-native不是内部或 外部命令,也不是可运行的程序或批处理文件
1.执行node命令时提示:node不是内部或外部命令,也不是可运行的程序或批处理文件. 原因环境变量没有指向node安装目录 path:C:\Program Files\nodejs\ 2.reac ...
- vue适配移动端px自动转化为rem
1.下载lib-flexible 我使用的是vue-cli+webpack,所以是通过npm来安装的 npm i lib-flexible --save 2.引入lib-flexible 在main. ...
- Unsafe 的简单使用
Unsafe 简介 Unsafe 是sun.misc包中的一个类,可以通过内存偏移量操作类变量/成员变量 Unsafe 用途 AQS(AbstractQueuedSynchronizer) 常用作实现 ...