【JAVA基础】Class对象扫盲贴

Class这东西真的是基础中的基础,先不整专业的说辞:

在Java中,每个类都有一个对应的Class对象,这与通过new关键字创建的具体对象实例是不同的

Class对象

想象一下,你是一名建筑师,你设计了一张房子的蓝图。这张蓝图包含了建造房子所需的所有信息,比如房间布局、门窗尺寸、材料清单等。这张蓝图就是Java中的Class对象。它包含了类的全部信息,比如类名、字段、方法、构造函数等。Class对象不占用内存空间,它更像是一个模板或指导手册,告诉你如何创建一个类的实例。

对象实例

现在,你根据蓝图开始建造房子,最终建成了一个实体的房子。这个实体房子就是一个类的实例,也就是通过new关键字创建的对象。这个实例占用了内存空间,拥有自己的状态(字段的值),并且可以执行行为(调用方法)。每个实例都是独立的,有自己的属性值,可以单独操作和改变。

比喻解释

  • 蓝图(Class对象):告诉你如何构建一个类的实例,包含了类的所有信息,但不占用内存空间,不能直接操作或改变。
  • 实体房子(对象实例):根据蓝图建造出来的实际存在,每个房子(实例)都有自己的地址(内存地址),可以居住(使用),并且可以装修(改变状态)。

总结一下,Class对象就像是指导手册或蓝图,它描述了如何创建和使用一个类的实例。而通过new关键字创建的对象实例,则是根据这个蓝图实际建造出来的房子,它们占据了内存空间,有自己的状态和行为。在Java中,你通常不会直接操作Class对象,除非你在进行反射操作或需要元数据信息。而你大部分时间都在操作由Class对象创建出来的对象实例。

专业的说法:

Class对象代表了程序中的一个类或基本类型的运行时表示。当你有一个类,比如ApplicationListener,它的Class对象提供了关于这个类的元数据和一些操作方法。Class对象可以被视为一个类的“蓝图”或“模板”,它包含了类的信息,如类名、修饰符、方法、字段、构造函数、内部类等,以及类的完整类层次结构。

Class对象包括但不限于执行以下几种操作:

  1. 获取类的元信息:如类名、包名、简单名、修饰符、字段、方法、构造函数等。

  2. 实例化对象:通过newInstance()方法或getDeclaredConstructor().newInstance()来创建类的实例,这在反射编程中非常常见。

  3. 调用方法:可以使用getMethod()getDeclaredMethod()来获取方法,然后使用invoke()方法调用该方法。

  4. 访问和修改字段:通过getField()getDeclaredField()获取字段,然后使用get()set()方法读取或修改字段的值。

  5. 创建数组Class对象可以用来创建特定类型的数组。

  6. 类型转换和检查:可以使用isAssignableFrom()isInstance()来检查一个类是否可以分配给另一个类或一个对象是否属于某个类。

  7. 获取类的类加载器getClassLoader()方法可以返回加载该类的类加载器。

  8. 获取和设置注解:可以使用getAnnotation()getAnnotations()来获取类上的注解,也可以使用反射为类添加注解。

  9. 获取类的超类和接口getSuperclass()getInterfaces()可以获取类的父类和实现的接口。

TIPS:Class对象可以用来获取加载这个类的类加载器。这可以通过调用Class对象的getClassLoader()方法实现。不过值得注意的是,如果Class对象代表的是java.lang.Object或其它Java核心类库中的类,由于它们是由引导类加载器(Bootstrap ClassLoader)加载的,而引导类加载器在Java中没有直接的ClassLoader表示,因此getClassLoader()方法会返回null

总之,Class对象在Java中提供了一种强大的工具,用于在运行时获取和操作类的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值