Java中獲取類名的3種方法!

獲取類名的方法

Java 中獲取類名的方式主要有如下三種。數組

  • getName()

返回的是虛擬機裏面的class的類名錶現形式。微信

  • getCanonicalName()

返回的是更容易理解的類名錶示。函數

  • getSimpleName()

返回的是類的簡稱。編碼

都有什麼區別?

經過一個實例來看下它們主要的區別。spa

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 {

    }

}

程序輸出如下結果。code

方法名              類名
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)。ip

[ 表示數組,一個表明一維數組,好比 [[ 表明二維數組。以後 L 表明類描述符,最後;表示類名結束。rem

結論

一、從以上結果能夠看出 getName() 和 getCanonicalName() 在獲取普通類名的時候沒有區別,在獲取內部類和數組類有區別的。get

二、getSimpleName() 在獲取普通類和內部類名的時候沒區別,在獲取數組類的時候有區別。

推薦:Spring Boot & Cloud 最強技術教程

掃描關注咱們的微信公衆號,乾貨天天更新。

image

相關文章
相關標籤/搜索