获取Class的三种方法及根据Class创建对象的两种方法
1通过已知的类型获取class
// 根据Example 获取Class =》Example.class
public Class getExample(){
Class clazz = Example.class;
return clazz;
}
2通过实例对象获取class
public Class getExampleByInstance(){
Example example = new Example();
// getClass是Object类里面的方法;《?》 是通配符
Class clazz = example.getClass();
return (Class)clazz;
}
3通过Class.forName获取全路径指定类名的class
/** forName0 本地方法,C++实现,jvm调用
* 1 className 是个类名 2 initialize 是否延迟加载 3 loader 加载器
*/
private static native Class forName0(String className, boolean initialize,
ClassLoader loader, Class caller) throws ClassNotFoundException;
public static Class forName(String className) throws ClassNotFoundException {
Class caller = Reflection.getCallerClass();
return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
}
// 两个forName方法较终都会调用forName0方法去加载class
public static Class forName(String name,
boolean initialize, ClassLoader loader) throws ClassNotFoundException {
....
return forName0(name, initialize, loader, caller);
}
// 示例:通过java.lang.Integer
public Class getInteger()throws ClassNotFoundException{
Class clazz = Class.forName("java.lang.Integer");
return (Class)clazz;
}