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

458. Java 反射 - .class 语法

文章目录

  • 458. Java 反射 - `.class` 语法
    • 1. 为什么需要 `.class`?
    • 2. 基本类型的 Class
      • 错误示例:
      • 正确示例:
    • 3. 引用类型的 Class
    • 4. 多维数组的 Class
    • 5. `.class` 与 `getClass()` 的对比
    • 6. 总结

458. Java 反射 -.class语法

1. 为什么需要.class

前面我们讲过:如果有一个对象实例,可以通过obj.getClass()拿到它的Class对象。
但是——如果我们手上没有对象实例,或者我们想要获取一个基本类型Class,怎么办呢?

答案就是:使用.class语法


2. 基本类型的 Class

对于基本类型(primitive types),不能调用getClass(),因为它们不是对象

错误示例:

booleanb=true;Class<?>c=b.getClass();// ❌ 编译错误

编译器提示:基本类型不可被解引用

正确示例:

Class<?>c=boolean.class;System.out.println("class: "+c);

输出:

class:boolean

总结

  • boolean.class返回的就是Class对象,表示boolean这种类型本身。
  • 同理,你可以用int.classchar.classdouble.class,等等。

3. 引用类型的 Class

.class不仅适用于基本类型,也适用于引用类型。

Class<?>c=java.io.PrintStream.class;System.out.println("class: "+c);

输出:

class:classjava.io.PrintStream

这里的c就是PrintStream类型的 Class 对象
在反射场景中,这非常有用:

  • 无需对象实例
  • 无需Class.forName("全限定名")
  • 编译期就能保证类型存在

4. 多维数组的 Class

数组在 Java 中也是对象,所以也可以用.class来获取Class

Class<?>c=int[][][].class;System.out.println("class: "+c);

输出:

class:class[[[I

这里有几个关键点:

  • [[[I是 JVM 的内部表示(Type Descriptor)
  • 每一个[表示一维数组,所以[[[I表示int的三维数组
  • I表示int类型(常见的缩写还有:Z=booleanB=byteC=charD=double等)

5..classgetClass()的对比

用法适用场景示例
obj.getClass()已有实例,运行时确定"hello".getClass()String.class
TypeName.class已知类型,编译期确定String.class,int.class
Class.forName("全限定名")运行时动态加载Class.forName("java.util.HashMap")

口诀

  • 编译期有类型→ 用.class
  • 运行时有对象→ 用obj.getClass()
  • 运行时只有类名字符串→ 用Class.forName()

6. 总结

  • .class是获取类型对应的 Class 对象的简洁方式
  • 基本类型必须用.class(因为没有对象实例)
  • .class也能用于数组、接口、枚举等所有类型
  • JVM 内部使用特殊的描述符来表示数组类型([I,[[Ljava.lang.String;等)
http://www.jsqmd.com/news/1155973/

相关文章:

  • 企业生产过程中质量管理方法全解析
  • GDScript反编译全流程解析:从PCK提取到代码还原与防御策略
  • 游戏进新地图闪退:从文件验证到驱动优化的完整解决方案
  • 杰理之切换EQ节点内的参数组【篇】
  • 软考高级论文科目写作要点整理
  • ZFX山海证券:聚焦细节,看看信息透明度的关键逻辑
  • 百达翡丽中国官方售后服务中心|地址及官方客服服务电话权威信息公告(2026年7月最新) - 百达翡丽服务中心
  • Windows本地部署Sourcegraph:Docker+WSL2实战指南
  • CH446Q 模拟开关矩阵实测:VEE负压从0V到-7V,导通电阻降低50%
  • YOLOv5/v7 锚框优化实战:Kmeans++与差分进化算法对比,mAP提升1.5%
  • TDA7468与PIC18F2620构建高性价比音频处理系统
  • macOS Mojave 上源码构建 ROS 2 Jazzy 完整实践指南
  • AtomGit Flutter 鸿蒙客户端: 周情绪柱状图
  • 我的AI辅助开发工具链2026版:架构、组件与实践
  • Unity粒子系统制作可拖拽闪电链:Noise与Trails模块实战
  • Seed-2.0-Code:前端开发范式的协议化重构
  • OpenClaw本地部署指南:3分钟搭建私有AI智能体编排框架
  • 2026檀香消费白皮书:行业数据解读+5大品牌深度横评,金旺来99.1分获评年度综合最优香品品牌 - 互联网科技品牌测评
  • PLIP完全指南:快速掌握蛋白质配体相互作用分析的7个实战技巧
  • Awoo Installer:从技术实现到用户体验的Switch游戏安装方案演进
  • 基于TPS61170与PIC18的数字升压电源设计
  • 2026苹果手机照片去除背景全操作指南:iPhone,自带抠图与多工具实操教程
  • 长沙大学生暑假短期学AI 学习效果检验方法 - 梦想蓝途
  • 微信小程序点餐系统 4 大核心模块:从 WXML 到数据绑定的 3 种状态管理方案对比
  • Web安全入门:从零配置浏览器与电脑环境搭建实战指南
  • 机器视觉尺寸测量系统:3种光源方案对比与选型指南(附实测效果图)
  • Herdr:代理复用神器,一个终端掌控全局,多场景优势凸显!
  • 配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
  • 2026年7月最新温州积家官方售后维修服务网点地址与客服电话 - 积家官方售后服务中心
  • Steam Machine 开发适配与性能优化实战指南