首先明白:
1,任何类都是Class的实例对象
2,new对象是静态加载,在编译时刻就加载 可能 使用的类,可能会出现程序在运行阶段,没有用到Class A,该类编译不通过,那么程序启动会报编译错误。
在运行时动态加载Class.forName("classPath")能巧妙的避免出现这样的问题。
3,类类型,即是Class的对象,如String.class(其实是编译后的字节码文件),获取的三种办法:
a,Class c = String.class;
b,Class c = 对象.getClass();
c,Class c = Class.forName("classPath");
反射:可以在巧妙的躲避编译不通过的问题
//获取类类型
Class c = ArrayList.class;
//获取一个方法,通过方法名称和paramsType...获取
Method m = c.getMethod("add",String.class);
//方法反射
Object o = m.invoke(new ArrayList(),"test");
例如:java中集合的泛型,泛型只在编译阶段有效,为了防止错误输入。
ArrayList list = new ArrayList();
ArrayList<String> list1 = new ArrayList<String>();
System.out.println(list.getClass() == list1.getClass()) //结果为true
说明在运行过程泛型是没意义的