Java 中獲取類名的方式主要有如下三種。數組
返回的是虛擬機裏面的class的類名錶現形式。微信
返回的是更容易理解的類名錶示。函數
返回的是類的簡稱。編碼
經過一個實例來看下它們主要的區別。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() 在獲取普通類和內部類名的時候沒區別,在獲取數組類的時候有區別。
掃描關注咱們的微信公衆號,乾貨天天更新。