摘要:获取类名的方法中获取类名的方式主要有以下三种。返回的是更容易理解的类名表示。返回的是类的简称。之后代表类描述符,最后表示类名结束。在获取普通类和内部类名的时候没区别,在获取数组类的时候有区别。
获取类名的方法
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 最强技术教程
扫描关注我们的微信公众号,干货每天更新。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/71264.html
摘要:反射学习的灵魂我们从最初的,到面向对象部分,我们可以将代码在计算机中经历的阶段分为三部分源代码阶段类对象阶段运行时阶段而我们知道,中一个类在源代码阶段,是存储在硬盘中的,而编译后,就已经被加载到内存中区,那么有没有一种方法可以在这种情况下 反射:Web学习的灵魂 我们从最初的 javac -HelloWorld.java,到面向对象部分,我们可以将Java代码在计算机中经历的阶段分为三...
摘要:简单说反射技术可以对一个类进行解剖。反射的基本步骤获得对象,就是获取到指定的名称的字节码文件对象。所以一般情况下,被反射的类,内部通常都会提供一个公有的空参数的构造函数。 定义 其实就是动态加载一个指定的类,并获取该类中的所有的内容。 而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员。 简单说:反射技术可以对一个类进行解剖。 反射的好处: 大大的增强...
摘要:实际上方法引用是表达式的一种语法糖。小结本篇全面介绍了方法引用的四种使用方式,且每种方式都有对应一个示例来帮助大家理解。 上一篇我们详细介绍了Optional类用来避免空指针问题,本篇我们全面了解一下Java8中的方法引用特性。方法引用是lambda表达式的一种特殊形式,如果正好有某个方法满足一个lambda表达式的形式,那就可以将这个lambda表达式用方法引用的方式表示,但是如果这...
摘要:是完全面向对象的语言,对象具有状态行为和标识。类一一是具有共同特征和行为的一类事物的统称。受保护的,对同一包内的类和所有子类可见。一种通用的内存池,用于存放所有对象。类级变量又称全局级变量或静态变量,需要使用关键字修饰。 java语言的基本特点 java语言是面向对象的高级程序设计语言,它是编译型的语言,Java语言不使用指针,并提供了自动的垃圾回收机制,使得程序员不必为内存管理而担...
阅读 2971·2021-10-13 09:39
阅读 2677·2021-09-27 13:34
阅读 2013·2019-08-30 15:55
阅读 3228·2019-08-30 15:43
阅读 3596·2019-08-30 11:16
阅读 1722·2019-08-26 18:28
阅读 1078·2019-08-26 13:56
阅读 893·2019-08-26 13:35