# 反射

## 什么是反射

反射是Java提供的动态执行机制, 可以动态加载类, 动态创建对象, 动态访问属性, 动态调用方法..

静态执行: Java代码经过编译以后就确定的执行次序, 称为静态执行次序

Foo foo = new Foo();

foo.test();

动态执行: 在运行期间才确定创建那个类的对象, 执行那个方法!

Java 反射API可以实现动态执行!

案例: 执行某个类中全部的以test为开头的方法. (必须使用使用反射实现)

反射:

1. 反射是Java提供的API, 接受API的提供的功能!

2. 是Java底层的执行机制.

## 反射功能

### 动态加载类

Class cls = Class.forName(类名)

作用: 将类名对应的类加载到方法区, 如果类名错误则抛出异常.

### 动态创建对象

Object obj = cls.newInstance();

特点:

- 动态创建对象

- 可以创建任何对象

- cls对应的类必须有无参数构造器!!!

- 如果没有无参数构造器则抛出异常!

- 反射API利用Constructer API支持有参数构造器, 略...

### 反射可以查询类中的方法

可以返回类中声明的全部方法信息

Method[] methods = cls.getDeclaredMethods();

for(Method m:methods){

System.out.println(m);//输出方法信息

}

Declared 声明的

Method 方法

### 动态执行方法

执行方法:

1. 必须有对象

2. 找到对象对应的类型方法信息

- 方法信息在类上查找

案例:

Method m = cls.getDeclaredMethod(方法名);//在类信息上查找一个方法信息

//m 代表 cls类上的一个方法信息

Object obj=cls.newInstance();//动态创建对象

//动态调用(invoke)方法

Object val = m.invoke(obj);

完整代码:

1 public static void main(String[] args) throwsClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {2   Scanner in = newScanner(System.in);3   String className =in.nextLine();4   //动态加载类

5   Class> clas =Class.forName(className);6

7   //动态创建类对象

8   Object instance =clas.newInstance();9 System.out.println(instance);10

11   //动态检查类中的公共成员方法信息(包括超类和接口中的公共成员方法)

12   Method[] methods =clas.getMethods();13   for(Method method : methods) {14 System.out.println(method);15 }16

17   System.out.println("--------华丽分割线--------");18   //动态检查类中的所有方法信息(包括私有和保护的,不包括继承)

19   Method[] declaredMethods =clas.getDeclaredMethods();20   for(Method method : declaredMethods) {21 System.out.println(method);22 }23

24   String methodName =in.nextLine();25   Method m = clas.getDeclaredMethod(methodName, null);26   //动态执行方法

27   Object invoke = m.invoke(instance, null);//invoke是方法执行完毕后的返回值

28 System.out.println(invoke);29 }

### 反射用途

Eclipse 的快捷菜单使用了反射, 利用反射发现了类的属性和方法

Spring 利用了反射

动态加载类

动态创建Bean

动态注入属性, 包括私有属性注入

动态解析注解

3. MyBatis 利用了反射

- 查询时候, 动态了将查询结果利于反射注入到Bean返回

4. JUnit 使用了反射

5. 注解的解析使用了反射

6. Servlet调用使用了反射

java 反射代价_Java反射机制相关推荐

  1. java反射模式_Java反射机制详解

    对于一般的开发者,很少需要直接使用Java反射机制来完成功能开发,但是反射是很多框架譬如 Spring, Mybatis 实现的核心,反射虽小,能量却很大. 本文主要介绍反射相关的概念以及API的使用 ...

  2. Java的反射作用_java反射机制的作用与优点

    java的反射机制就是增加程序的灵活性,避免将程序写死到代码里, 例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码 ...

  3. java反射类型转换_Java反射探索研究(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankakay 摘要:本文详细深入讲解是Java中反射的机制,并介绍了如何通过反射来生成对象.调用函数.取得 ...

  4. java 反射练习_JAVA反射的基础学习

    反射 :reflection 程序的一种内省机制 程序可以在运行期间动态的创建对象,获取对象类型,调用对象行为 内省机制在java和.net语言中有,在早期的C,C++,delphi,vb这些语言都没 ...

  5. java反射类型转换_java反射(转)

    反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道 ...

  6. java映射理解_Java反射的理解

    Java反射的理解 反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释. 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的.于是我们直接对这个类进行实例化,之后使用这个 ...

  7. java反射方法_java反射之方法反射的基本操作方法

    本文接上文"java反射之获取类的信息方法(推荐)",利用反射(invoke)来获取一个类中的方法来执行. 1.定义一个类,包含三个名称相同,参数不同的方法 class A{ pu ...

  8. Java内省用法_java内省机制及PropertyUtils使用方法

    反射 相对而言,反射比内省更容易理解一点.用一句比较白的话来概括,反射就是让你可以通过名称来得到对象(类,属性,方法)的技术.例如我们可以通过类 名来生成一个类的实例:知道了方法名,就可以调用这个方法 ...

  9. java 抛出异常效率_Java异常处理机制

    与C++.python,Ruby一样,Java也有一个异常处理机制,当程序出现异常时,系统会自动生成一个Exception对象通知程序去处理.之所以这样设计目的在于使程序有更好的容错性和可读性,实现业 ...

最新文章

  1. python 空数组_从零开始学python之numpy
  2. 2015-2016 ACM-ICPC Southwestern Europe Regional Contest (SWERC 15)
  3. Android中图片优化之webp使用
  4. python-os创建文件夹-create_dir_if_not_exist.py
  5. VS Code设置中文插件
  6. Redis:复制,第1部分——概述 复制与分片、哨兵与集群、Redis拓扑
  7. Error:Trailing spaces not allowed no-trailing-spaces
  8. 卸载iis express后80端口仍然被占用的解决方法
  9. 纯CSS实现二级下拉导航菜单
  10. ios开发 将json格式数据上传服务器
  11. 在JavaScript面向对象编程中使用继承(4)
  12. 人工智能大数据时代下的工程伦理问题探讨
  13. 全球顶级的14位程序员!
  14. 解压RAR时出现“不可预料的压缩文件末端”的解决方法
  15. 前端纯CSS导入otf字体包
  16. Cisco SN查询工具
  17. Oracle存储过程打印输出错误信息、行号,快速排查
  18. 【云和恩墨大讲堂】杨俊 | 迁移神技XTTS-恩墨小王子再战32TB跨平台U2L
  19. tinymind 书法文字识别
  20. 中国信息安全测评中心-自主原创测评

热门文章

  1. PyTorch下的可视化工具(网络结构/训练过程可视化)
  2. CV十年发展之观察:1.5万篇论文透视「业界」与「学界」,到底谁更胜一筹?...
  3. 他给女朋友做了个树莓派复古相机,算法代码可自己编写,成本不到700元丨开源...
  4. 2020年「21篇」医学影像算法最佳综述
  5. 你离时间管理大师,就差这副眼镜了
  6. 疫情之下,村干部们的智慧越来越...
  7. 漫画:大学教师暑期真实生活图鉴
  8. 【每日一算法】杨辉三角到底是什么?
  9. Flask-RESTful的简单使用
  10. AOI检测基本原理与设备构成