什么是反射?

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反射的更多相关文章

  1. 浅谈java反射机制

    目录 什么是反射 初探 初始化 类 构造函数 属性 方法 总结 思考 什么是反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意 ...

  2. 浅谈 java 反射机制

    一:Java反射概念 Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其mod ...

  3. 浅谈Java反射机制 之 使用类的 属性、方法和构造函数

    前面两篇我们总结了Java反射机制如何获取类的字节码,如何获取构造函数,属性和方法, 这篇我们将进一步验证如何使用我们获取到的属性.方法以及构造函数 1.使用 反射 获取到的 属性 import ja ...

  4. 浅谈Java反射机制 之 获取类的字节码文件 Class.forName("全路径名") 、getClass()、class

    另一个篇:获取 类 的 方法 和 属性(包括构造函数) 先贴上Java反射机制的概念: AVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: 对于任意一个对象,都能够调用它 ...

  5. 浅谈Java反射与框架

    Java反射 1.示例 1.用户类 package com.lf.entity; import com.lf.annotation.SetProperty; import com.lf.annotat ...

  6. 浅谈Java反射机制 之 获取类的 方法 和 属性(包括构造函数)

    上一篇 获取 类 的字节码文件 我们讲到了获取类的字节码文件的三种方法 第三种方法通过getClass("全路径名")获取字节码文件最符合要求 1.获取构造方法 先贴上我们要获取的 ...

  7. 浅谈Java的反射机制和作用

    浅谈Java的反射机制和作用 作者:Java大师 欢迎转载,转载请注明出处 很多刚学Java反射的同学可能对反射技术一头雾水,为什么要学习反射,学习反射有什么作用,不用反射,通过new也能创建用户对象 ...

  8. 浅谈Java代理二:Cglib动态代理-MethodInterceptor

    浅谈Java代理二:Cglib动态代理-MethodInterceptor CGLib动态代理特点: 使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生 ...

  9. 浅谈Java代理一:JDK动态代理-Proxy.newProxyInstance

    浅谈Java代理一:JDK动态代理-Proxy.newProxyInstance java.lang.reflect.Proxy:该类用于动态生成代理类,只需传入目标接口.目标接口的类加载器以及Inv ...

随机推荐

  1. Linux(Centos)设置ip

    一.Linux(Centos7)安装完毕后,重启电脑后,输入用户名(root),密码(**********). 在命令行中输入nmtui命令.选择Edit a connection,选择对应的链接端口 ...

  2. 深入浅出mybatis之缓存机制

    目录 前言 准备工作 MyBatis默认缓存设置 缓存实现原理分析 参数localCacheScope控制的缓存策略 参数cacheEnabled控制的缓存策略 总结 前言 提到缓存,我们都会不约而同 ...

  3. (三)初探maven之使用IDE

    一.在IDE中使用maven 打开Eclipse,在菜单栏依次选中window   => preferences  => Maven  => Installations , 然后添加 ...

  4. Spring ElasticsearchTemplate 经纬度按距离排序

    es实体,用 @GeoPointField 注解,值为:中间逗号隔开,如 29.477000,119.278536(经度, 维度) @Document(indexName = "v_inte ...

  5. shell 脚本实现定时备份mysql数据库

    首先要知道直接在脚本中输入mysql的密码是不被允许的,但是我们可以曲线救国 1. 在新建一个文件专门用来存储用户密码 如: vim ./.mysql.conf [mysqldump] user=yo ...

  6. 如何识别Studio 5000程序开发版本号

    前言:中.大型AB PLC的编程软件从以前的RSLogix 5000到目前的Studio 5000,都是有版本号的,如RSLogix 5000 V19.0.Studio 5000 V32.高版本的软件 ...

  7. Linux命令--tree

    目录 tree 最常用 带颜色显示2级目录 排除显示某个目录 tree tree -C :颜色显示 tree -f : 显示文件全路径 tree -L 2 :只显示2层 tree -P *.pl :只 ...

  8. CMDB项目开发

    CMDB介绍 CMDB --Configuration Management Database 配置管理数据库, CMDB存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧 ...

  9. day06 字典、元组、set的方法及常用操作

    今日内容: 1.深浅拷贝 2.元组 3.字典 4.set 1.深浅拷贝 # 1.值拷贝 # 采用赋值的方法进行 # 只会将堆区容器变量与栈区的绑定关系进行复制 # 2.浅拷贝 # 会将堆区与栈区的绑定 ...

  10. zabbix监控ssl证书到期时间

    监控脚本 cat ssl_check.sh #!/bin/bash # #获取ssl证书的过期时间 #menghao #获取证书的有效时间 time=$(echo | openssl s_client ...