zoukankan      html  css  js  c++  java
  • 干货 | 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() 在获取普通类和内部类名的时候没区别,在获取数组类的时候有区别。

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

    扫描关注我们的微信公众号,干货每天更新。

    image

  • 相关阅读:
    C#操作REDIS例子
    A C# Framework for Interprocess Synchronization and Communication
    UTF8 GBK UTF8 GB2312 之间的区别和关系
    开源项目选型问题
    Mysql命令大全——入门经典
    RAM, SDRAM ,ROM, NAND FLASH, NOR FLASH 详解(引用)
    zabbix邮件报警通过脚本来发送邮件
    centos启动提示unexpected inconsistency RUN fsck MANUALLY
    rm 或者ls 报Argument list too long
    初遇Citymaker (六)
  • 原文地址:https://www.cnblogs.com/java-stack/p/11952457.html
Copyright © 2011-2022 走看看