干货 | 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 TestClass getName com.test.TestClass$TestInnerClass getCanonicalName com.test.TestClass.TestInnerClass getSimpleName TestInnerClass getName [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() 在获取普通类和内部类名的时候没区别,在获取数组类的时候有区别。
扫描关注我们的微信公众号,干货每天更新。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Spring-boot+Dubbo应用启停源码分析
背景介绍 Dubbo Spring Boot 工程致力于简化 Dubbo RPC 框架在Spring Boot应用场景的开发。同时也整合了 Spring Boot 特性: 自动装配 (比如: 注解驱动, 自动装配等). Production-Ready (比如: 安全, 健康检查, 外部化配置等). DubboConsumer启动分析 你有没有想过一个问题?incubator-dubbo-spring-boot-project中的DubboConsumerDemo应用就一行代码,main方法执行完之后,为什么不会直接退出呢? @SpringBootApplication(scanBasePackages = "com.alibaba.boot.dubbo.demo.consumer.controller") public class DubboConsumerDemo { public static void main(String[] args) { SpringApplication.run(DubboConsumerDemo.class,args); } } 其实要回答这样一个问...
- 下一篇
(转载)Java8新的日期API LocalDate, LocalTime
前言 由于Java Date的各种问题,Java8推出了新的日期API,很受一拨人的追捧。 为什么我们需要新的Java日期/时间API? 在开始研究Java 8日期/时间API之前,让我们先来看一下为什么我们需要这样一个新的API。在Java中,现有的与日期和时间相关的类存在诸多问题,其中有: Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。 java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期,将其纳入java.sql包并不合理。另外这两个类都有相同的名字,这本身就是一个非常糟糕的设计。 对于时间、时间戳、格式化以及解析,并没有一些明确定义的类。对于格式化和解析的需求,我们有java.text.DateFormat抽象类,但通常情况下,SimpleDateFormat类被用于此类需求。 所有的日期类都是可变的,因此他们都不是线程安全的,这是Java日期类最大的问题之一。 日期类并不提供国际化,没有时区支持,因此Java引入了java.util.Cale...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Red5直播服务器,属于Java语言的直播服务器
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启