反射:
1>定义
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;
2>Java反射机制主要提供了以下功能:
2.1>在运行时构造任意一个类的对象
2.2>在运行时获取任意一个类所具有的成员变量和方法
2.3>在运行时调用任意一个对象的方法(属性)
2.4>生成动态代理
3>class
Class 是一个类; 一个描述类的类.
封装了描述方法的 Method,
描述字段的 Filed,
描述构造器的 Constructor 等属性
4>获取Class对象的三种方式
4.1>通过类名获取 [类名.class ]
4.2>通过对象获取 [对象名.getClass()]
4.3>通过全类名获取 [Class.forName(全类名)]方法
getClass=获取类
GetFields= 获取所有public字段,包括父类字段
getDeclaredFields=获取所有字段,public和protected和private,但是不包括父类字段
getMethod=获取方法
getConstructors/所有"公有的"构造方法
getConstructor/获取单个的"公有的"构造方法
getDeclaredConstructors/获取所有的构造方法
getDeclaredConstructor/获取"某个构造方法"
区别:
Class.forname/classloder.loadclass
>静态语句执行时机
forname在类加载时会执行静态语句/loadclass调用newinstance时执行静态语句
>初始化方式不同:
forname对类初始化/loadclass装载或者连接
>类加载器不同:
应用场合:
编译时类型/运行时类型
范例:
Person p=new Student();
其中编译时类型为 Person,运行时类型为 Student