当前位置: 首页 > article >正文

jvm中每个类的Class对象是唯一的吗

jvm中每个类的Class对象是唯一的吗

在 Java 中,同一个类的 Class 对象在由同一个类加载器加载时是唯一的。析:


1. 同一类加载器的唯一性

  • 规则:若一个类被同一个类加载器加载,无论创建多少实例,其 Class 对象始终唯一。
  • 示例
    String s1 = "hello";
    String s2 = new String("hello");
    System.out.println(s1.getClass() == s2.getClass()); // true
    System.out.println(String.class == s1.getClass());  // true
    
    所有 String 实例的 getClass() 返回同一个 Class 对象。

2. 不同类加载器的差异

  • 规则:若不同类加载器加载同一个类,即使类名相同,其 Class 对象也不同。
  • 示例
    ClassLoader cl1 = new CustomClassLoader();
    ClassLoader cl2 = new AnotherClassLoader();
    Class<?> c1 = cl1.loadClass("com.example.MyClass");
    Class<?> c2 = cl2.loadClass("com.example.MyClass");
    System.out.println(c1 == c2); // false(不同类加载器导致)
    

3. 基本类型与数组的特殊性

  • 基本类型:如 int.classInteger.TYPE 是同一个对象。
  • 数组类型:每个维度和元素类型组合对应唯一的 Class 对象。
    int[] arr1 = {1, 2};
    int[] arr2 = {3, 4};
    System.out.println(arr1.getClass() == arr2.getClass()); // true
    System.out.println(arr1.getClass() == int[].class);     // true
    

4. 实际应用场景

  • 反射:通过 Class.forName() 获取类时,需指定类加载器。
  • 序列化/反序列化ObjectInputStream 检查类的 Class 对象是否匹配。
  • 安全控制SecurityManager 通过 Class 对象控制类加载权限。

总结

  • 唯一性条件:同一类 + 同一类加载器 → 唯一 Class 对象。
  • 设计意图:确保类型系统在 JVM 层面的安全性和一致性。

http://www.kler.cn/a/600799.html

相关文章:

  • 万字C++STL——vector模拟实现
  • Linux中的基本开发工具(上)
  • 基于Spring Boot的党员学习交流平台的设计与实现(LW+源码+讲解)
  • 【微服务架构】SpringCloud(七):配置中心 Spring Cloud Config
  • OpenCV图像拼接(7)根据权重图对源图像进行归一化处理函数normalizeUsingWeightMap()
  • 洛谷 P1351 [NOIP 2014 提高组] 联合权值(树)
  • HTML5 canvas圆形泡泡动画背景特效
  • 最长连续子序列和的所含元素 -- Kadane算法拓展
  • R语言——字符串
  • 一文解读DeepSeek的安全风险、挑战与应对策略
  • C#基础学习(一)复杂数据类型之枚举
  • 【Linux】从开发到系统管理深入理解环境变量
  • RocketMQ 详细知识点总结
  • 文章记单词 | 第2篇(六级)
  • STM32/GD32主要学习内容
  • K8s的网络
  • Java高频面试之集合-18
  • 目录遍历漏洞复现
  • 从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.2文本生成逻辑:Top-k采样与温度控制
  • Vibe Coding:编程的未来?