资讯专栏INFORMATION COLUMN

Java中获取类名的3种方法!

caozhijian / 1667人阅读

摘要:获取类名的方法中获取类名的方式主要有以下三种。返回的是更容易理解的类名表示。返回的是类的简称。之后代表类描述符,最后表示类名结束。在获取普通类和内部类名的时候没区别,在获取数组类的时候有区别。

获取类名的方法

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

相关文章

  • Java反射:Web学习灵魂

    摘要:反射学习的灵魂我们从最初的,到面向对象部分,我们可以将代码在计算机中经历的阶段分为三部分源代码阶段类对象阶段运行时阶段而我们知道,中一个类在源代码阶段,是存储在硬盘中的,而编译后,就已经被加载到内存中区,那么有没有一种方法可以在这种情况下 反射:Web学习的灵魂 我们从最初的 javac -HelloWorld.java,到面向对象部分,我们可以将Java代码在计算机中经历的阶段分为三...

    Vultr 评论0 收藏0
  • Java016-反射技术

    摘要:简单说反射技术可以对一个类进行解剖。反射的基本步骤获得对象,就是获取到指定的名称的字节码文件对象。所以一般情况下,被反射的类,内部通常都会提供一个公有的空参数的构造函数。 定义 其实就是动态加载一个指定的类,并获取该类中的所有的内容。 而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员。 简单说:反射技术可以对一个类进行解剖。 反射的好处: 大大的增强...

    Acceml 评论0 收藏0
  • Java反射

    摘要:中的反射反射能够分析类所拥有的能力的程序称为反射。获取类的名称获取类的修饰符获取类所在的包获取父类的属性获取类的构造器等等获得的构造器的使用获取构造器有两种方法。 Java中的反射 反射:能够分析类所拥有的能力的程序称为反射。 反射的作用 当我们在使用一个已有的类的时候,在主代码的main()方法中使用别的已有的类的时候,如果被使用的类发生了改变,那么导致我们的main()方法中...

    张红新 评论0 收藏0
  • Java8-8-方法引用详解

    摘要:实际上方法引用是表达式的一种语法糖。小结本篇全面介绍了方法引用的四种使用方式,且每种方式都有对应一个示例来帮助大家理解。 上一篇我们详细介绍了Optional类用来避免空指针问题,本篇我们全面了解一下Java8中的方法引用特性。方法引用是lambda表达式的一种特殊形式,如果正好有某个方法满足一个lambda表达式的形式,那就可以将这个lambda表达式用方法引用的方式表示,但是如果这...

    刘东 评论0 收藏0
  • Java学习笔记(一)

    摘要:是完全面向对象的语言,对象具有状态行为和标识。类一一是具有共同特征和行为的一类事物的统称。受保护的,对同一包内的类和所有子类可见。一种通用的内存池,用于存放所有对象。类级变量又称全局级变量或静态变量,需要使用关键字修饰。 java语言的基本特点 java语言是面向对象的高级程序设计语言,它是编译型的语言,Java语言不使用指针,并提供了自动的垃圾回收机制,使得程序员不必为内存管理而担...

    chengtao1633 评论0 收藏0

发表评论

0条评论

caozhijian

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<