什么是反射?

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。通俗一点讲反射就是对象的反向处理。

下面我们具体说明反射的一些操作

1.三种获取Class对象的方法:

  1. 1.Class classz = 类对象.getClass();
  2. 2. Class classz = 类名.class;
  3. 3. Class classz = Class.forName("类名");
  4. classz.getName();获取包名+类名
  5. classz.getSimpleName();获取类名
  6.  
  7. 三者区别:12可以编译时检查,3受查时异常,异常名为ClassNotFindException

2.通过反射获取父类的信息

  1. 2.1获取当前类的父类对象
  2. classz.getSuperclass() //包名+类名
  3. classz.getSuperclass().getName() //类名
  4.  
  5. 2.2获取当前类实现的接口
  6. public Class<?>[] getInterfaces();
  7. claszz.getInterfaces();

3.通过反射调用构造

  1. .1获取指定参数类型的构造方法
  2. public Constructor<?> getConstructor(Class<?> parameterTypes)
  3. .2获取类中所有构造
  4. public Constructor<?>[] getConstructors()

  1. 以上的操作是直接利用了Constructor类中的toString()方法取得了构造方法的完整信息(包含方法权限,参数列表),
    而如果你只使用了getName()方法,只会返回构造方法的包名类名。
  1. .newInstance方法,cls.newInstance(),调用toString()方法输出,调用该方法时,必须使类有无参构造方法,
    如果木有无参构造方法,则只能通过明确的构造调用实例化处理

5.通过反射获取普通方法

  1. .1获取所有公有方法
  2. public Method[] getMethods() throws SecurityException;
  3. .2获取指定方法
  4. public Method getMethod(String name,Class<?> parameterTypes,....);
  5. .3java.lang.reflect.Method中提供一个调用方法
  6. public Object invoke(Object o1,Object o2) throws InvocationTargetException,IllegalAccessException,IllegalArgumentException

6.反射调用类中的属性

  1. .1获取父类和子类所有公有的属性
  2. public Field[] getField() throws SecurityException
  1. .2获取父类或者子类中指定属性(公有的)
  2. public Field getField(String name属性名) throws NoSuchFieldException,SecurityException
  1. .3获取本类中的所有的属性(不包含从父类继承的属性)
  2. public Field[] getDeclareField() throws SecurityException
  1. .4获取本类中指定属性(不包含从父类继承的属性)
  2. public Field getDeclareField(String name属性名) throws NoSuchFieldException,SecurityException
  1. .5java.lang.reflect.Field方法提供两个重要的方法
  2. 6.5.1设置属性内容
  3. public void set(Object obj,Object value) throws IllegalArgumentException
  4. 6.5.2取得属性内容
  5. public Object get(Object obj) throws IllegalArgumentException,
  6. IllegalAccessException

获取属性这块就不给具体实例,如果想仔细了解的话,请看下一篇文章将source类中的属性值赋给target类中对应的属性。

6.6Java反射继承结构

  1. AccessibleObject类中有一个方法:
  2. 动态设置封装性
  3. public void setAccessible(boolean flag) throws SecurityException
    通过此方法我们可以对类中的私有成员属性进行操作,虽然违背了Java面向对象的封装性,但是在实际应用中使代码更加健壮
  1. .7获取属性类型
  2. 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. Vue(小案例_vue+axios仿手机app)_购物车(二模拟淘宝购物车页面,点击加减做出相应变化)

    一.前言 在上篇购物车中,如果用户刷新了当前的页面,底部导航中的数据又会恢复为原来的: 1.解决刷新,购物车上数值不变                                         ...

  2. Apache的安装与配置

    apahe官网 http://www.apache.org/ 安装及配置https://blog.csdn.net/liyang4534/article/details/78036591 常见问题的处 ...

  3. Druid.jar包

    首先了解一下,什么是Druid. Druid是Java语言中最好的数据库连接池,它能够提供强大的监控和扩展功能. Druid是一个JDBC组件,它包括三部分: 1)DruidDriver 代理Driv ...

  4. MySQL巧建sum索引帮我们提高至少100%的效率

    有两个表,表a CREATE TABLE `a` ( `id` mediumint() unsigned NOT NULL AUTO_INCREMENT, `fid` ) unsigned ', `c ...

  5. Technocup 2019 - Elimination Round 2

    http://codeforces.com/contest/1031 (如果感觉一道题对于自己是有难度的,不要后退,懂0%的时候敲一遍,边敲边想,懂30%的时候敲一遍,边敲边想,懂60%的时候敲一遍, ...

  6. java 导出

    按钮 <a href="###" class="eui-btn eui-btn-small" onclick="Export()"&g ...

  7. NPOI 读取excel的时候,时间格式的处理

    excel的时间格式是:CellType.Numeric 要判断时间还需要方法:DateUtil.IsCellDateFormatted(cell)的帮助: 示例代码如下: ICell cell = ...

  8. 只有try和finally,没有catch

    因为没有catch捕获异常,所以异常发生时,会将异常抛出,导致程序中止:在抛出之前会执行finally中的代码. 用于无法捕获处理异常,需要在程序结束之前进行善后处理的场景

  9. 学习itop4412开发板有哪些资料可学习?能否学会

    1.光盘资料 下面简单的做一下了解,在需要使用这些资料的时候,会针对性的做详细介绍. 将文件以及文件夹按照“名称+递增”的方式排列,如下: 01_PCB_SCH_DATASHEET-- -----开发 ...

  10. hihocoder 1505

    hihocoder 1505 题意:给你n个数,让你从n个数中抽两个数,再抽两个数,使得前两个数和后两个数相等 分析:对 i,j,p,q遍历的话时间复杂度会达到o(n4),所以考虑优化p,q 假设分配 ...