干貨 | 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 最強技術教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM