class class<?> class<T> T<T>

查看API帮助文档的Object 可以看到有这样一个方法getClass() (这是Object 类的方法) 解释是返回运行时的对象的class对象

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>

?的意思的,由于可能暂时不知道对象的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类的方法还是挺多的。主要是用于得到运行时类的相关信息(可用于反射)。

1, public static Class<?> forName(String className) :natice 方法,动态加载类。非常重要。 如在sql中动态加载驱动程序:class.forName(sqlDriver);

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对象,作为方法区这些数据的访问入口。

转载于:https://my.oschina.net/u/864135/blog/818239

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值