Reflection - juedaiyuer/researchNote GitHub Wiki

#反射#

##Class类##

类是对象,类是java.lang.Class类的实例对象

类类型获取方法

  1. 类名.class
  2. 类的一个实例.getclass
  3. class.forname("类所在的位置(包名.类名)")

通过类类型可以实例化该类的一个实例

类类型demo程序

##动态加载类##

Class.forName("类全称");
  • 不仅表示类类型,还表示了动态加载类
  • 编译时刻加载的类是静态加载类
  • 运行时刻加载的类是动态加载类

new创建对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类
功能型的类应该使用动态加载类

package reflect;

public class office {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		if("Word".equals(args[0]))
		{
			Word w = new Word();
			w.start();
		}
		if("Excel".equals(args[0]))
		{
			Excel e = new Excel();
			e.start();
		}

	}

}
  • 单独编译该文件的时候,很多的err;没有类Word,Excel及其定义的start方法
  • 通过前面的描述,程序使用了静态加载的模式,需要加载所有用到的类

基本的数据类型也有数据类型

基本数据类型的类类型demoCode

简单方法getName,获取类名称;getSimpleName,获取不包含包名的类名称.

Class类的基本API

获取方法信息
获取成员变量信息,java.lang.reflect.Field,Field类封装了关于成员变量的操作;getFields()方法获取的是所有public成员变量信息

demoCode

testdemoCode

方法的反射

demoCode

Class,Method去了解泛型的本质.编译之后集合的泛型是去泛型化的
java中集合的泛型,是防止错误输入的,只在编译阶段有效
通过反射,绕过编译操作

泛型本质