欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > class跟对象关系?

class跟对象关系?

2025/4/2 7:04:21 来源:https://blog.csdn.net/2301_81675556/article/details/146537585  浏览:    关键词:class跟对象关系?

在Java中,new Object() 和通过反射获取的 Class 对象之间是 实例(Instance)与类的元数据(Class Metadata) 的关系。


1. new Object() 的作用

  • 创建一个 类的实例(即对象),分配内存空间并调用构造函数。

    Object obj = new Object();  // 创建一个 Object 类的实例
    

2. 反射获取的 Class 对象

  • Class 对象是 类的元数据,用于描述类的结构(如字段、方法、构造函数等)。

  • 通过反射获取 Class 对象的常见方式:

    Class<?> clazz1 = Object.class;           // 直接通过类字面量获取
    Class<?> clazz2 = obj.getClass();         // 通过实例的 getClass() 方法获取
    Class<?> clazz3 = Class.forName("java.lang.Object"); // 通过全限定类名动态加载
    

3. 两者的核心关系

特性new Object()(实例)Class 对象(元数据)
本质类的具体实例,存储在堆内存中。类的描述信息,存储在方法区(元空间)。
作用存储对象的数据(状态)。描述类的结构(字段、方法、构造函数等)。
获取方式new 关键字。getClass()Class.forName()
单例性每个 new 操作生成不同的实例。同一类加载器下,一个类只有一个 Class 对象。

注意:Class对象不在方法区或运行时常量池(直接引用堆地址):它位于堆中,运行时常量池仅存储其引用。

4. 关键联系

(1) 实例与 Class 对象

每个实例都可以通过 getClass() 方法获取其对应的 Class 对象:

Object obj = new Object();
Class<?> clazz = obj.getClass();  // 返回 Object.class
(2) 通过 Class 对象创建实例

反射可以通过 Class 对象动态创建实例(类似于 new 的功能):

Class<?> clazz = Object.class;
Object instance = clazz.newInstance();  // 调用无参构造函数创建实例(已废弃,推荐用 getConstructor().newInstance())
(3) 类的单例性

同一类加载器下,一个类的 Class 对象是唯一的:

Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1.getClass() == obj2.getClass());  // true(两个实例的 Class 对象相同)
System.out.println(Object.class == obj1.getClass());     // true

总结

  • new Object():创建类的实例(对象),是程序运行时的具体数据。
  • Class 对象:是类的元数据,描述类的结构,用于反射操作。
  • 关系:每个实例都关联一个 Class 对象(通过 getClass()),而 Class 对象可以创建更多实例或分析类的结构。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词