查看API帮助文档的Object 能够看到有这样一个方法getClass() (这是Object 类的方法) 解释是返回运行时的对象的class对象java
HelloWorld.class 也就是 Class<HelloWorld> (API中解释为 T - the type of the class modeled by this Class object. For example, the type of String.class is Class<String> . Use Class<?> if the class being modeled is unknown ) Class<T>中的T有有点像C++中的template<class T> Class<?> 也就是 Class<? extends Object>sql
?的意思的,因为可能暂时不知道对象的Class类型(或为了简单用?替代) ,由于每一个Class<T> 又继承Object ,因此能够表明任意的类型数组
类型安全 Class Class<T> Class<?>安全
Colleciton<Object> c List<Object> List<?> List<T> List网络
在Java集合框架中,对于参数值是未知类型的容器类,只能读取其中元素,不能向其中添加元素, 由于,其类型是未知,因此编译器没法识别添加元素的类型和容器的类型是否兼容,惟一的例外是NULL数据结构
关于getGenericSuperclass等等的解释,请参考http://blog.csdn.net/gengv/article/details/5178055框架
Type type = ((ParameterizedType)foo.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
三,class的主要方法函数
class类的方法仍是挺多的。主要是用于获得运行时类的相关信息(可用于反射)。this
1, public static Class<?> forName(String className) :natice 方法,动态加载类。很是重要。 如在sql中动态加载驱动程序:class.forName(sqlDriver);.net
2,public T newInstance() :根据对象的class新建一个对象,用于反射。很是重要。 可用在反射中构建对象,调用对象方法:
class doubleClass= class.forName("java.lang.Double"); Object objDouble = doubleClass.newInstance(); 如在javaBean中就应用了这个方法,由于java默认要有一个无参构造函数。
3, public ClassLoader getClassLoader() :得到类的类加载器Bootstrap ,Extension ,System or user custom ClassLoader(通常为system classloader)。重要。
5,public native Class getSuperclass():获取类的父类,继承了父类则返回父类,不然返回java.lang.Object。返回Object的父类为空-null。通常
7,其余类
public boolean isEnum() :判断是否为枚举类型。
public native boolean isArray() :判断是否为数组类型。
public native boolean isPrimitive() :判断是否为基本类型。 public boolean isAnnotation() :判断是否为注解类型。
public Package getPackage() :反射中得到package,如java.lang.Object 的package为java.lang。
public native int getModifiers() : 反射中得到修饰符,如public static void等 。
public Field getField(String name):反射中得到域成员。
public Field[] getFields() :得到域数组成员。
public Method[] getMethods() :得到方法。
public Method getDeclaredMethod(String name, Class<?>... parameterTypes):加个Declared表明本类,继承,父类均不包括。
public Constructor<?>[] getConstructors() :得到全部的构造函数。
class文件 Class 类对象 类实例
class生死大纲 类加载的时机 类加载过程 验证 准备 解析 初始化 使用 卸载
类加载过程: 加载:
1.经过一个类的全限定名来获取定义此类的二进制字节流。这里能够是本地的或者网络的均可以。
2.将这个字节流所表明的静态存储结构转化为方法区的运行时数据结构
3.在java堆中生成表明这个类的java.lang.Class对象,做为方法区这些数据的访问入口。