获取类名的方法

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() 在获取普通类和内部类名的时候没区别,在获取数组类的时候有区别。

推荐:Spring Boot & Cloud 最强技术教程

干货 | Java中获取类名的3种方法!的更多相关文章

  1. java中获取日期和时间的方法总结

    1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下:  要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...

  2. PHP中获取星期的几种方法

    PHP中获取星期的几种方法   PHP星期几获取代码: 1 date(l); 2 //data就可以获取英文的星期比如Sunday 3 date(w); 4 //这个可以获取数字星期比如123,注意0 ...

  3. Java中创建数组的几种方法

    Java中创建数组的几种方法 public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intVa ...

  4. 谈谈java中遍历Map的几种方法

    java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...

  5. Java中遍历map的四种方法 - 转载

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  6. Java 中 List 分片的 5 种方法!

    前些天在实现 MyBatis 批量插入时遇到了一个问题,当批量插入的数据量比较大时,会导致程序执行报错,如下图所示: 原因是 MySQL 只能执行一定长度的 SQL 语句,但当插入的数据量较多时,会生 ...

  7. java中获取路径的几种基本的方法

    package com.ygh.blog.realpath; import java.io.File; import java.io.IOException; import java.io.Input ...

  8. URL转Drawable之 Android中获取网络图片的三种方法

    转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Applicatio ...

  9. JAVA中创建线程的三种方法及比较

    JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run( ...

随机推荐

  1. The 1st tip of DB Query Analyzer

     The 1st tip of DB Query Analyzer               Ma Genfeng   (Guangdong Unitoll Services incorporate ...

  2. ruby 2.x.x之新特性散谈

    ruby入门看的是经典的<ruby编程语言>,可是那描述的是v1.9的老版本啊!下面聊一下ruby2.x.x的新特性,x是0-n都有可能啊. 1.关键字参数(Keyword argumen ...

  3. 关于并发下内存及CPU使用情况的思考

    鉴于昨天的文章<<使用Interlocked在多线程下进行原子操作,无锁无阻塞的实现线程运行状态判断>>里面有一个封装好的无锁的类库可以判断并发下的结束状况,我们可以完成并发时 ...

  4. 深入浅出web服务器与python应用程序之间的联系

    简单来说,Web服务器是在运行在物理服务器上的一个程序,它永久地等待客户端(主要是浏览器,比如Chrome,Firefox等)发送请求.Web 服务器接受 Http Request,返回 Respon ...

  5. linux中安装程序及账户管理

    程序安装及管理 1. Linux 应用程序基础  Linux命令与应用程序的关系 1):文件位置 系统命令:一般在/bin和/sbin目录中,或为Shell内部指令 应用程序:通常在/usr/bin和 ...

  6. Xamarin引用第三方包错误解决方法

    http://www.cnblogs.com/ThenDog/p/7623720.html

  7. python22期第一天(课程总结)

    1.Python介绍: python是一门高级编程语言,涉及领域比较广泛,社区活跃,由一个核心开发团队在维护,相对其他语言,易于学习,可移植性强,可扩展性强,易于维护,有大量的标准库可供使用. 2.P ...

  8. AI 学习之路

    前言:本文章纯属自己学习路线纪录,不喜勿喷. 最近AI很火,几乎是个程序员 都要去学习AI,作为一个菜鸡小前端,我也踏上了学习AI的方向. 在学习之中,最开始遇到了很多的困难,比如你不知道如何切入进来 ...

  9. 子RelativeLayout与layout_alignParentBottom属性会撑大视图

    如title所示,在一个子RelativeLayout中的某个元素如果设置了layout_alignParentBottom属性会导致这个RelativeLaytou的height wrap_cont ...

  10. 利用Python进行数据分析——pandas入门

    利用Python进行数据分析--pandas入门 基于NumPy建立的 from pandas importSeries,DataFrame,import pandas as pd 一.两种数据结构 ...