用在Java身上指的是我们可以于运行时加载、探知、应用编译时代完全未知的classes。换句话说,Java法度榜样可以加载一个运行时才得有名称的class,获悉其完全构造(但不包含methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

惯例子我们照样先提出几个问题,一门技巧必定要能解决必定的问题,才有去进修控制它的价值
- 一、 什么是反射?
- 二、反射能做什么?
一、 什么是反射?
如不雅你是一个Android Developer,前辈们都邑教导你尽量罕用反射,效力太低,太慢。“射”嘛,射的太快就不好了,所以反射固然慢点,然则有时射一下照样很”爽”的。
二、反射能做什么?
1、新建类的实例
我们知道所有的类都持续子顶级父类Object,而Object中有hashCode()、equals()、clone()、toString()、getClass()等。个中getClass()返回一个Class 对象。我们这里就须要应用的Class对象,留意C是大年夜写,我们可以经由过程一下方法来获取Class对象
- Class.forName(“类名字符串”) (留意:类名字符串必须是全称,包名+类名)
- 类名.class
- 实例对象.getClass()
在Class类中有一个异常重要的办法
- public T newInstance() throws InstantiationException, IllegalAccessException {
- return newInstanceImpl();
- }
- private native T newInstanceImpl() throws IllegalAccessException, InstantiationException;
查看Api可以看到调用newInstace办法可以返回当前class对应的实例对象。接下来看一个小的Demo
- public class Reflection {
- public static void main(String[] args) {
- // 通俗创建类的实例
- People p1 = new People();
- System.out.println(p1.getName());
- // 应用反射获取类的实例
- Class clazz = People.class;
- // 常用方法,留意括号中须要放类的全路径名
- // Class clazz = Class.forName("reflection.People");
- // Class clazz = p1.getClass();
- try {
- People p2 = (People) clazz.newInstance();
- System.out.println(p2.getName());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- class People {
- private String name = "张三";
- private
推荐阅读
Windows Server 2016软件定义存储:Storage Spaces Direct介绍
微软在Windows Server 2016 Technical Preview 2中惹人了Storage Spaces Direct。这个特点将本地存储扩大为高>>>详细阅读
本文标题:Java高级特性之反射学习总结
地址:http://www.17bianji.com/lsqh/35444.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示