在面向对象的世界,Class是java的基础。java.lang.Class实际上是继承自java.lang.Object。

class有一个方法叫做getName,该方法会返回(class, interface, array class, primitive type,或者 void)的Class名字。

如果你经常调试JVM的话,会看到下面这样奇怪的内容:

jcmd 1234 GC.class_histogram

这些奇怪的内容都是class name,下面我们就来看看他们都表示什么含义。

class name其实分为三类。

primitive类型或者void

如果类对象是primitive类型或者void,那么他们的class name就是相对应的关键词或者void。

        //primary classlog.info(int.class.getName());log.info(short.class.getName());log.info(float.class.getName());log.info(double.class.getName());log.info(long.class.getName());log.info(byte.class.getName());log.info(char.class.getName());log.info(boolean.class.getName());//voidlog.info(void.class.getName());

输出结果:

[main] INFO com.flydean.classname.ClassNameUsage - int
[main] INFO com.flydean.classname.ClassNameUsage - short
[main] INFO com.flydean.classname.ClassNameUsage - float
[main] INFO com.flydean.classname.ClassNameUsage - double
[main] INFO com.flydean.classname.ClassNameUsage - long
[main] INFO com.flydean.classname.ClassNameUsage - byte
[main] INFO com.flydean.classname.ClassNameUsage - char
[main] INFO com.flydean.classname.ClassNameUsage - boolean
[main] INFO com.flydean.classname.ClassNameUsage - void

引用类型

如果是引用类型,则会返回该类的class名字:

//object classlog.info(Object.class.getName());

输出结果:

[main] INFO com.flydean.classname.ClassNameUsage - java.lang.Object

Array类型

Array类型就有点复杂,根据Array的层级关系,会在class name之前添加[,有多少级Array就添加多少个[。

同时相应的类型会转换为相应的编码:

元素类型 编码
boolean Z
byte B
char C
class or interface Lclassname;
double D
float F
int I
long J
short S

我们举个例子:

//Arraylog.info(int[].class.getName());log.info(short[].class.getName());log.info(float[].class.getName());log.info(double[].class.getName());log.info(long[].class.getName());log.info(byte[].class.getName());log.info(char[].class.getName());log.info(boolean[].class.getName());log.info(Object[].class.getName());//multiple arrayslog.info(int[][][].class.getName());

输出结果:

[main] INFO com.flydean.classname.ClassNameUsage - [I
[main] INFO com.flydean.classname.ClassNameUsage - [S
[main] INFO com.flydean.classname.ClassNameUsage - [F
[main] INFO com.flydean.classname.ClassNameUsage - [D
[main] INFO com.flydean.classname.ClassNameUsage - [J
[main] INFO com.flydean.classname.ClassNameUsage - [B
[main] INFO com.flydean.classname.ClassNameUsage - [C
[main] INFO com.flydean.classname.ClassNameUsage - [Z
[main] INFO com.flydean.classname.ClassNameUsage - [Ljava.lang.Object;
[main] INFO com.flydean.classname.ClassNameUsage - [[[I

总结

好了,上面的jcmd的输出结果是不是可以理解了?

本文的例子https://github.com/ddean2009/learn-java-base-9-to-20

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

本文作者:flydean程序那些事

本文链接:http://www.flydean.com/java-class-name/

本文来源:flydean的博客

欢迎关注我的公众号:程序那些事,更多精彩等着您!

你真的了解java class name吗?相关推荐

  1. 你真的了解Java中的三目运算符吗

    转载自 你真的了解Java中的三目运算符吗 三目运算符是我们经常在代码中使用的,a= (b==null?0:1);这样一行代码可以代替一个if-else,可以使代码变得清爽易读. 但是,三目运算符也是 ...

  2. [转载] Java内存管理-你真的理解Java中的数据类型吗(十)

    参考链接: Java中的字符串类String 1 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识 ...

  3. 15个问题自查你真的了解java编译优化吗?

    摘要:为什么C++的编译速度会比java慢很多?二者运行程序的速度差异在哪? 了解了java的早期和晚期过程,就能理解这个问题了. 本文分享自华为云社区<你真的了解java编译优化吗?15个问题 ...

  4. python开发效率怎样_Python 的开发效率真的比 Java高吗?

    真的比Java高很高. 几个例子. 爬虫领域,几年前就用Scrapy抓百度,新浪,股吧等各种东西. 五分钟写好一个小爬虫,爽到暴有没有?当年我就是靠教人写爬虫...才骗到小妹妹跟我约会的. 文本处理, ...

  5. python和土木工程_Python 的开发效率真的比 Java高吗?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 作者:暗灭 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 真的比Java高很高. 几个例子. 爬虫领域,几年前就用Sc ...

  6. c语言难还是java难_C语言真的比Java难学吗?

    原标题: C语言真的比Java难学吗? 千锋小编觉得C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.C语言语法比较简单便捷, ...

  7. python真的超过java了吗-Python 的开发效率真的比 Java高吗?

    我觉得Python与任何带有"大型"二字的程序,都是相斥的,甚至"中型"都很难触及.只适合用于"小型"项目,且最好无需维护,用完即丢.否则我 ...

  8. c++真的比java难吗_开课吧Java课程怎么样?开课吧的Java课程真的那么好吗?

    开课吧Java课程,开课吧java培训 数字化人才在线教育平台开课吧是一家整合全球知名IT和互联网企业一线师资及实战项目,面向广大数字化专业和应用人才,提供热门学科的体系化在线实战赋能和进阶课程.其中 ...

  9. python比java难吗-Python 的开发效率真的比 Java高吗?

    我觉得Python与任何带有"大型"二字的程序,都是相斥的,甚至"中型"都很难触及.只适合用于"小型"项目,且最好无需维护,用完即丢.否则我 ...

  10. 知乎高赞!python能做这么多自动化,可开发效率真的有Java高?

    python可以用来干嘛? 可以用来处理海量的Excel表格数据并进行数据分析 可以用来收集想要的信息并进行数据分析 数据挖掘并为项目提供数据支持 我已经,把数据库移到了一台淘汰下来的办公电脑上,又用 ...

最新文章

  1. 【转载】数据库范式那些事
  2. 利用DelegatingHandler实现Web Api 的Api key校验
  3. Java 13:切换表达式的增强功能
  4. mockito java_使用Mockito在Java中进行模拟入门
  5. Eucalyptus常用查询命令
  6. 【实习生笔试面试题】2013年搜狐SOHU实习生技术笔试题
  7. tf.Variable,tf.get_variable,tf.variable_scope,tf.name_scope区别分析
  8. android 常用adb 及linux 命令
  9. 移动端安全 - 安卓Android - 工具相关
  10. 如何将录屏转换为高清GIF
  11. 1.3端口扫描:利用Nmap工具进行端口扫描
  12. 尾矿库监测 GNSS北斗高精度定位终端机应用
  13. python文件查重_海量文件查重SimHash和Minhash
  14. iOS数据模拟 Mock方案
  15. 使用Keras 构建基于 LSTM 模型的故事生成器
  16. 查找0-N之间的所有素数(质数)
  17. Hive经典例题解析
  18. 河南省谷歌地球高程DEM等高线下载
  19. HLS / Chisel 实现CORDIC算法双曲系统
  20. springboot集成logback,报错java.lang.IllegalStateException: Logback configuration error detected:

热门文章

  1. 卷积神经网络结构可视化工具PlotNeuralNet
  2. linux npm环境变量,linux配置npm环境变量
  3. 线段树POJ3468(成段更新,区间求和)
  4. Kafka设计解析(三) : Kafka High Availability (下)
  5. CSocket文件传输 分段传输的关键代码
  6. ZooKeeper 集群:集群概念、选举流程、机器数量
  7. C++学习路线和参考资料
  8. LiveVideoStack音视频技术2018年度评奖揭晓
  9. 傅德良:选择视频编码器的误区
  10. JVM之Java栈Java stack