什么是反射机制?反射机制有什么做用?

定义
反射机制是Java语言中一个很是重要的特性,它容许程序在运行时进行自我检查,同时也容许其对内部成员进行操做。因为反射机制可以实如今运行时对类进行装载,所以可以增长程序的灵活性,可是不恰当地使用反射机制,也会严重影响系统的性能。
具体而言,反射机制的主要功能主要有:①获得一个对象所属的类,②获取一个类的全部成员变量和方法,③在运行时建立对象,调用对象的方法。java

反射机制的做用:
1,反编译:.class–>.java
2,经过反射机制访问java对象的属性,方法,构造方法等;web

先看一下sun为咱们提供了那些反射机制中的类:
java.lang.Class;
java.lang.reflect.Constructor; java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;数组

不少反射中的方法,属性等操做咱们能够从这四个类中查询。仍是哪句话要学着不断的查询API,那才是咱们最好的老师。svg

Class c=Class.forName(“Employee”);
Object o=c.newInstance(); 调用了Employee的无参数构造方法函数

方法关键字
getDeclareMethods() 得到全部的方法
getReturnType() 得到方法的返回类型
getParameterTypes() 得到属性的传入参数类型性能

构造方法关键字
getDeclaredConstructors() 得到全部的构造方法
getDeclaredConstructor(参数类型.class,……) 得到特定的构造方法xml

父类和父接口
getSuperclass() 获取某类的父类
getInterfaces() 获取某类实现的接口
这样咱们就能够得到类的各类内容,从而进行反编译
反射机制获取类的方法有三种,咱们分别展现如何获取Reflection包下的Student类对象

Class.forName(“类的路径”)
Class Student = Class.forName(“Reflection.Student”); //包名+类名
类名.class
Class Student = Reflection.Student.class;
类实例.getClass()
Student student = new Student(); Class Student =student.getClass();接口

Class类中的6个重要方法
1.getName()方法,返回一个String字符串,显示该类的名称。
1.System.out.println(Student.getName()); //输出: Reflection.Student
2.newInstance()方法, 由类调用该方法,根据该类的默认构造函数建立类的实例
Object o = Student.newInstance();
3.getClassLoader()方法,返回该类对象的对应的加载器。字符串

4.getComponentType()方法,返回类的组件类型的数组,若是这个类并不表明一个数组类,此方法返回null。
5.getSuperClass()方法,返回某子类所对应的直接父类所对应的Class对象。
6.isArray()方法,断定此Class对象所对应的是不是一个数组对象。

反射机制获取类的方法
获取类的构造方法
getDeclaredConstructors() //获取类的全部构造方法
getDeclaredConstructor(参数类型.class,……) //获取特定的构造方法

获取类的普通方法
getDeclaredMethods() //获取全部普通方法
getDeclaredMethod(“方法名”,参数类型.class,……) //获取指定名称的方法
getReturnType() //获取方法的返回类型
getParameterTypes() //得到方法的传入参数类型

new 建立对象,是静态加载类,在编译时刻就须要加载全部可能使用到的类

经过动态加载类能够解决该问题。经过类类型建立该类的对象 一、静态加载类,是编译时刻加载;动态加载类,是运行时刻加载 二、new建立对象:是静态加载类,在编译时刻就须要加载全部的【可能使用到的类】。有一个类有问题(如不存在),都不能经过编译,会报错。 三、Class.forName()经过动态加载类,能够用到一个类时,才进行加载。