一.引入反射
反射:主要指程序可以访问、检测和修改它自身状态或行为的一种能力。
反射机制:一个非常强大的“动态”相关机制,可以在运行状态,动态获取信息(类的所有属性和方法)以及动态调用对象方法。
使得java可以在运行时加载、探知、使用编译期间完全未知的classes(程序一般是先编译再运行,有些类我们编译过,而有些类我们没进行编译,一般而言未进行编译的类我们无法运行,但我们通过反射机制却可以运行它)。
动态语言:程序在【运行时】,允许改变程序结构或者变量类型的语言,称之为动态语言。例如:Python,Perl等等。
但Java不是动态语言,但是Java提供了一个非常强大的“动态”相关机制--反射。
二.反射的功能
(1)在运行时判断任意一个对象所属的类
(2)在运行时调用任意一个对象的方法
(3)在运行时构造任意一个类的对象
(4)在运行时判断任意一个类所具有的成员变量和方法
(5)生成动态***
三.Java反射
反射把java类的各种成分映射成相应的java类,这些类位于java.lang.reflect包中
class类:代表一个类,称之为类型类 Field类:代表类的成员变量(属性) Method类:代表类的成员方法 Constructor类:代表类的构造方法 Array类:提供了动态创建数组以及访问数组元素的静态方法
Class类
【介绍】:
Class类是Java反射机制的起源和入口,它是所有类的公共的模板。当一个类被加载以后,java虚拟机就会自动产生一个Class对象。
【作用】: 通过这个Class对象,就能获得加载到虚拟机当中这个Class对象对应的信息:
例如:类的名字,属性,方法,构造方法,父类和子类
【获取Class对象】:
获取Class对象的方法,以下皆以Student类举例: 方法一: 通过Class类的静态方法forName(String 完整类名)来实现 Class c = Class.forName("Student"); 方法二: 通过访问类的class属性来获取 Class c = Student.class;//比如通过访问类Student的class属性 方法三: 通过对象的getClass()来获取 Student stu = new Student(); Class c = stu.getClass; 方法四: 对应包装类,可以采用.TYPE来获得 Class c = 包装类.TYPE 包装五: 通过对象的getSuperClass()来获取父类的Class对象 Student stu = new Student(); Class c = stu.getClass(); Class sup = stu.getSuperClass();【Class中常见的方法】:
------------------------------continue-------------------------