黑马程序员: 关于Class<T>类的API接口整理

-------android培训java培训、期待与您交流! ----------

Class<T>类是整个Java语言的核心.

Java语言要实现" everything is object"这样的豪言, 没有Class<T>类的支持是不可能达到的.

Class<T>类的重要意义是: 将类型看到一种对象. Class<T>就是这种类类型

这也是反射的本质.

所谓反射, 实际上是对 某一个类型 进行剖析.

基于Class<T>类型的重要性, 所以我花了不少时间研究了它的API接口, 其笔记如下:

---------------------------------------------------------------------------------------

构造方法----private的----外界不能用的:
    private Class() {}

常见方法: -----仅举这几个, 很多不多说了.

获取 Class对象---static方法
    static Class<?>  forName( String className
    static Class<?>  forName( String nameboolean initializeClassLoader loader
        String className: 必须是完整的类名,如:java.lang.String
        ClassLoader loader: 可指定 加载器 来加载这个类.
                    如果, 为null的话, 则用bootstrap来加载的.
        boolean initialize: 
                    如果此类还未被初始化的话, 是否现在就初始化.
        注意:
            Class.forName("Foo") 等价于:
            Class.forName("Foo", true, this.getClass().getClassLoader())
                即, 用当前类的加载器来加载这个Foo, 
                    而且, 执行这个forname方法是, 就进很初始化.
    -----其实, 我现在还是不明白什么是 initialize. 以下只是我个人的一个猜测:
            true: 在调用这个方法, 告知JVM此类的加载器为何, 并同时就进行是加载.
            false: 调用这个方法时, 告知JVM此类的加载器为何, 但不进行加载.


获得---类加载器----相关的东西
     ClassLoader  getClassLoader() 
        返回该类的类加载器。 
         在调用这个方法时, 此类早 已被加载 进去了.
            只是, 我们想知道加载这个类的加载器是哪一个而已.
             如果是bootstrap, 会返回null.
        这个具体的内容在 类加载器 一节中有具体的介绍.
    URL  getResource(String name) 
     InputStream  getResourceAsStream( String name
        是如下这个句子的简化:
             this.getClassLoader().getResourceAsStream(name)
        参见  28.用类加载器的方式管理资源和配置文件 一节.
        总之,
            ClassLoad可以加载.class文件, 
            当然, 其也可以把普通的文件变成InputStream了.
            比如, 把  配置文件/资源文件 读入内存.
        如果用 普通的FileInputStream这种, 其路径写起来麻烦, 
            而 this.getClassLoader().getResourceAsStream(name)
                填的路径, 很简单, 相对于classpath的.
        而 Class::getResourceAsStream更简单了, 
            直接相对于当前这个.class文件的目录了.
    不过, 用这种方法有缺点,  缺点是, 只能读, 不能写.
         因为只有InputStream, 但没有OutputStream啊.
    但, 通常放在.class文件目录中的配置文件, 
        显然也只是为了读而已, 不希望别人来改它.

获得---所在包
     Package  getPackage() 
        返回Package对象.

    Package类型要注意下.


获取---类的注释标记
    <A extends Annotation> A  getAnnotation(Class<A> annotationClass) 
        如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。 
            注意, 这里泛型的写法.
         (其也会把父类上的注释也返回)     
         注意:
            参数是 Class类型.
    Annotation[]  getAnnotations() 
        返回此元素上存在的所有注释。 
         (其也会把父类上的注释也返回)     
    <A extends Annotation> A  getAnnotation(Class<A> annotationClass) 
        如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。 
         (其也会把父类上的注释不返回)     
         注意:
            参数是 Class类型.
    Annotation[]  getDeclaredAnnotations() 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值