高级 | Java中获取类名的3种方法

转载自 高级 | Java中获取类名的3种方法

获取类名的方法

Java 中获取类名的方式主要有以下三种。

  • getName()

返回的是虚拟机里面的class的类名表现形式。

  • getCanonicalName()

返回的是更容易理解的类名表示。

  • getSimpleName()

返回的是类的简称。

都有什么区别?

通过一个实例来看下它们主要的区别。

public class TestClass {public static void main(String[] args) {// 外部普通类System.out.println("方法名             类名");System.out.println("getName            " + TestClass.class.getName());System.out.println("getCanonicalName   " + TestClass.class.getCanonicalName());System.out.println("getSimpleName      " + TestClass.class.getSimpleName());System.out.println();// 内部类System.out.println("getName            " + TestInnerClass.class.getName());System.out.println("getCanonicalName   " + TestInnerClass.class.getCanonicalName());System.out.println("getSimpleName      " + TestInnerClass.class.getSimpleName());System.out.println();// 数组类TestInnerClass[] testInnerClasses = new TestInnerClass[]{new TestInnerClass(),new TestInnerClass(),new TestInnerClass()};System.out.println("getName            " + testInnerClasses.getClass().getName());System.out.println("getCanonicalName   " + testInnerClasses.getClass().getCanonicalName());System.out.println("getSimpleName      " + testInnerClasses.getClass().getSimpleName());System.out.println();}static class TestInnerClass {}}

程序输出以下结果。

方法名              类名
getName            com.test.TestClass
getCanonicalName   com.test.TestClass
getSimpleName      TestClassgetName            com.test.TestClass$TestInnerClass
getCanonicalName   com.test.TestClass.TestInnerClass
getSimpleName      TestInnerClassgetName            [Lcom.test.TestClass$TestInnerClass;
getCanonicalName   com.test.TestClass.TestInnerClass[]
getSimpleName      TestInnerClass[]

[Lcom.test.TestClass$TestInnerClass;值得说明一下。

这是一种对函数返回值和参数的编码,叫做JNI字段描述符(JavaNative Interface FieldDescriptors)。

[ 表示数组,一个代表一维数组,比如 [[ 代表二维数组。之后 L 代表类描述符,最后 ;表示类名结束。

结论

1、从以上结果可以看出 getName() 和 getCanonicalName() 在获取普通类名的时候没有区别,在获取内部类和数组类有区别的。

2、getSimpleName() 在获取普通类和内部类名的时候没区别,在获取数组类的时候有区别。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asp.net 面向接口可扩展框架之核心容器

新框架的容器部分终于调通了!容器实在太重要了,所以有用了一个名词叫“核心容器”。 容器为什么那么重要呢?这个有必要好好说道说道。 1、首先我们从框架名称面向接口编程说起,什么是面向接口编程?(这个度娘回答一下) 解读一下:类是个体的定义…

pre2-flink单机部署与job提交

【README】 本文记录了flink单机部署,以及flink job2种提交方式; 【1】flink 单机部署 step1)下载flink 包; Apache Flink: Stateful Computations over Data Streamshttps://flink.apache.org/ step2)解压 tar -z…

到底什么是跨域?附解决方案

转载自 到底什么是跨域?附解决方案什么是跨域 要了解跨域,先要说说同源策略。 同源策略是由 Netscape 公司提出的一个著名的安全策略,所有支持 JavaScript 的浏览器都会使用这个策略。 所谓同源是指,域名,协议&#xf…

vue 字典_【开源】基于Vue的前端组件库HeyUI

说道vue组件库,目前主流的基本就是iview和element。今天又发现一个很不错的。HeyUI。组件也很丰富,入门比较简单。反正开源框架我们有不嫌多,多多益善啊。感兴趣的可以看看。关于HeyUIHeyUI 是一套基于 Vue2.0 的开源 UI 组件库,主…

(译)java8-流定义

【README】 本文翻译自 Stream In Java - GeeksforGeeks , 主要介绍了java8流; 【1】流 1)流定义:流是支持各种方法的对象序列(一系列对象),这些方法可以流水线化调用以产生期望结果&#xff…

基于CefSharp构建基于Chromium的应用程序

chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更大的自由 度,2013年google决定自己开发webcore的分支,叫做Blink引擎,而后…

最新后端架构师技术图谱

转载自 最新后端架构师技术图谱深呼吸,慢慢学,技术长路漫漫… 数据结构二叉树完全二叉树平衡二叉树二叉查找树(BST)红黑树B-,B,B*树LSM 树队列集合链表、数组字典、关联数组栈树BitSet常用算法KPM 算法选择…

ansible脚本-Playbook(一)

Playbook组成部分: task 任务:包含目标主机上执行的操作,使用模块定义这些操作,每个任务都是一个模块的调用Variables变量:存储和传递数据,变量可以自定义,可以在playbook当中定义为全局变量&a…

三级pc技术_第十九周PC、笔电、数码周边新品汇总:AMD英特尔激战正酣

【dogkeji-科技犬】各位网友周末好,又到了2020年第十九周的PC、笔电、数码周边新品发布汇总时刻(2020年5月4日至2020年5月9日),那么本周有那些PC、笔电、数码周边新品发布呢?通过科技犬的汇总我们来一起回顾一下吧。AM…

【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端

在《WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例》文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Framework 4.6.1)开发的DDD/CQRS/微服务架构的案例项目:WeText。文章发出后反响很好…

es6 dsl与sql对比

【README】 1.本文总结了 dsl 与 sql的对比写法; 2.es采用 7.2.1 版本; 【1】创建es索引 1)新建一个数据库事务执行日志索引 put localhost:9200/txlog { "mappings" :{ "properties":{"APPNAME"…

echarts line 去掉最外围方框_干货 | 关于射频芯片最详细解读

传统来说,一部可支持打电话、发短信、网络服务、APP应用的手机,一般包含五个部分部分:射频部分、基带部分、电源管理、外设、软件。射频部分:一般是信息发送和接收的部分;基带部分:一般是信息处理的部分&am…

服务器性能指标(一)——负载(Load)分析及问题排查

转载自 服务器性能指标(一)——负载(Load)分析及问题排查平常的工作中,在衡量服务器的性能时,经常会涉及到几个指标,load、cpu、mem、qps、rt等。每个指标都有其独特的意义,很多时候…

HoloLens开发手记 - HoloLens shell概述 HoloLens shell overview

使用HoloLens时,shell是由你周围的世界和来自系统的全息图像构成。我们将这种空间成为混合世界(mixed world)。 shell包含了一个可以让你将全息图像和应用放置在世界中的开始菜单(Start Menu)。当一个应用已经被放置在…

【1】flink-source读取数据

【README】 本文记录了flink读取不同数据源的编码方式&#xff0c;数据源包括&#xff1b; 集合&#xff08;元素列表&#xff09;&#xff1b;文件kafka&#xff1b;自定义数据源&#xff1b; 本文使用的flink为 1.14.4 版本&#xff1b;maven依赖如下&#xff1a; <dep…

Oracle入门(二)之服务启动bat

转载自 批处理&#xff08;bat文件&#xff09;自动启动/关闭oracle服务 批处理&#xff08;bat文件&#xff09; 自动启动/关闭oracle服务 判断oracle 服务状态如果服务处于启动状态&#xff0c;就关闭服务&#xff1b;如果服务处于关闭状态&#xff0c;就启动服务。 ECHO OFF…

【2】flink数据流转换算子

【README】 本文记录了flink对数据的转换操作&#xff0c;包括 基本转换&#xff0c;map&#xff0c;flatMap&#xff0c;filter&#xff1b;滚动聚合&#xff08;min minBy max maxBy sum&#xff09;&#xff1b;规约聚合-reduce&#xff1b;分流&#xff1b;connect连接流…

第三篇 Entity Framework Plus 之 Query Cache

离上一篇博客&#xff0c;快一周&#xff0c;工作太忙&#xff0c;只能利用休息日来写一些跟大家分享&#xff0c;Entity Framework Plus 组件系列文章&#xff0c;之前已经写过两篇 第一篇 Entity Framework Plus 之 Audit 第二篇 Entity Framework Plus 之 Query Future 计划…

wireshark tcp抓包分析_网络分析系列之八_使用Wireshark抓包

通过前面的部分&#xff0c;我们对Wireshark界面主体内容有了大致了解。这一节主要介绍如何抓包&#xff0c;抓包后的界面显示&#xff08;因为Wireshark打开数据包后又是另一副界面&#xff09;。如何保存或导出抓取的报文等内容。第一次抓包现在可以开始你的第一次数据包捕获…

Oracle入门(五C)之68个系统变量的key和默认value

Oracle的68个系统变量的key和默认valueappinfo 为 OFF 并且已设置为 "SQL*Plus" arraysize 15 autocommit OFF autoprint OFF autorecovery OFF autotrace OFF blockterminator "." (hex 2e) btitle OFF 为下一条 SELECT 语句的前几个字符 …