我们知道任何一个类在运行期间我们都可以得到他的类信息和属性方法。反射是框架设计的灵魂 使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制
这依赖于Java虚拟机。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象
反射就是把java类中的各种成分映射成一个个的Java对象
例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。
Class对象的由来是将class文件读入内存,并为之创建一个Class对象。
1、获取Class对象的三种方式
1.1 Object ——> getClass();
1.2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性
1.3 通过Class类的静态方法:forName(String className)(常用)
三种方式常用第三种,第一种对象都有了还要反射干什么。第二种需要导入类的包,依赖太强,不导包就抛编译错误。一般都第三种,一个字符串可以传入也可写在配置文件中等多种方法。
通过properties 反射获取txt文件的值
通过 反射越过泛型的检查
package pri.niddles.reflect;
public class Student {
private String StudentName;
private String StudentAddress;
private Integer StudentPhone;
}
package pri.niddles.reflect;
public class Refletion {
public static void main(String[] args) throws ClassNotFoundException {
Student student = new Student();
Class<? extends Student> s = student.getClass();
Class<?> superclass = s.getSuperclass();
System.out.println(superclass);
Class<?> s2 = Class.forName("pri.niddles.reflect.Student");
Class<?> superclass1 = s2.getSuperclass();
System.out.println(superclass1);
}
}
常见api
getclass
getsuperclass
getstructors
getmethods
getanotation
getfield
setaccessible 设置权限