一.引入反射

反射:主要指程序可以访问、检测和修改它自身状态或行为的一种能力。
反射机制:一个非常强大的“动态”相关机制,可以在运行状态,动态获取信息(类的所有属性和方法)以及动态调用对象方法。
使得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-------------------------