獲取類名的方法
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() 在獲取普通類和內部類名的時候沒區別,在獲取數組類的時候有區別。