JAVA--Class类介绍

Class类介绍

Class类是存在于JDK中的java.lang包下的类。Class是一个保存着运行时类所有信息的类,即在程序运行时跟踪类且掌握着类的全部信息,故其也被称为反射的源头。Class类没有公共的构造方法,Class对象是在类加载的时候由JVM通过调用类加载器中的 defineClass 方法自动构造的,也就是说只有JVM能创建Class对象,我们自己的Java程序是无法创建Class对象的。

Class类的Class对象

Class类被创建后的对象就是Class对象,Class对象表示的是自己手动编写类的类型信息,比如创建一个People类,那么JVM就会创建一个People类对应的Class对象,该Class对象保存了People类相关的类型信息。实际上在Java中每个类都有一个Class对象,每当我们编写并且编译一个新创建的类就会产生一个对应Class对象并且这个Class对象会被保存在同名.class文件里,.class也被称为字节码文件(这里的Class对象与下面jvm加载的Class对象不一样,这里的Class对象是被JVM加载生成Class对象前,存储在二进制格式的.class字节码文件中的Class对象,在这里可能有点绕,但是要区分这个存储在.class文件中的Class对象和在JVM中加载的Class对象);需要特别注意的是,手动编写的每个class类,无论创建多少个实例对象,在JVM中都只有一个Class对象,即在内存中每个类不管有多少个实例对象,这些同一个类的实例对象有且只有一个相对应的Class对象。

JVM加载Class对象

在程序运行的时候,如果实例化了一个自定义的类或者使用自定义类的静态方法时,如上面举的People类,JVM会在内存中查询是否加载了People类对应的Class对象,若是没有被加载,那么JVM会从People类的.class文件下找People类对应的Class对象,然后把该Class对象加载到内存中,加载到内存中的Class对象包含了People类的很多信息,比如属性/方法/修饰符/构造器/类名等等。在.class文件中加载Class对象时,还会对.class文件中的字节流包含的信息进行验证,验证它的完整性,确保它没有被破坏,以及它不包含不良的java代码。最后验证成功后,该People类的Class对象加载完成,我们可以用该Class类创建上述People类的实例对象,并且被创建的People实例对象和该Class对象形成关联。


获得Class对象的3种方法
  1. 类.Class
  2. 类的实例对象.getClass()
  3. Class.forname(类的全限定名)

上述三种方法都可获得某个类的Class对象。

Class对象的一些常用方法
方法名说明
forName(String className)返回与带有给定字符串名的类或接口相关联的 Class 对象。
getClassLoader()返回该类的类加载器。
getDeclaredFields()返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
getDeclaredMethods()返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
isAnnotationPresent(Class<? extends Annotation> annotationClass)如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。

更多的Class对象方法可以到https://tool.oschina.net/apidocs/apidoc?api=jdk-zh 选择java.lang包下的Class类进行查询。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值