第1章 Class类的使用
1:Class class1=Foo.class; ------->实际在告诉我们,任何一个类都有一个隐含的静态成员变量
2: Class class2=foo1.getClass()---->已知该类的对象,通过该类的对象通过getClass方法
class1和class2表示Foo类的类类型(class type)
Foo这个类本身就是一个对象
3: Class class3=null;
class3=Class.forName();
class1==class2==class3
第2章 动态加载类
1、new出来的都是静态加载类,一招出错,全盘皆输;
2、动态加载类
Class c = Class.forName(args[0]);
OfficeAble oa = (OfficeAble)c.newInstance();//OfficeAble定义的功能类型接口
-第3章 获取方法信息
3-1获取方法信息
-第4章 获取成员变量构造函数信息
4-1获取成员变量构造函数信息
-第5章 方法反射的基本操作
5-1方法反射的基本操作
Person p=new Person();
Class cls=p.getClass();
Method speak=cls.getMethod("speak", new Class[]{String.class});
Object res=speak.invoke(p, new Object[]{"李四"}); //p.speak("李四");
-第6章 通过反射了解集合泛型的本质
6-1通过反射了解集合泛型的本质
public static void main(String[] args) {
ArrayList list=new ArrayList();
ArrayList<String> list1=new ArrayList<String>();
list1.add("hello");
//list1.add(10);报错
Class c1=list.getClass();
Class c2=list1.getClass();
System.out.println(c1==c2);//结果为true,java中的泛型是防治错误输入的,只在编译阶段有效
//通过方法的反射验证上述说法
try {
Method m = c2.getMethod("add", Object.class);
m.invoke(list1, 10);//通过编译操作绕过了泛型
System.out.println(list1);
} catch (Exception e) {
e.printStackTrace();
}
}