假設我有一個類「僱員」有一個對象obj。 那麼如何執行obj.getClass()。getName()語句?它應該返回什麼?Class.getName()對給定的類做什麼?
10
A
回答
19
getClass()
方法獲取對象的實際類,它可能與保存對象的變量的類不同。該getName()
方法將返回完整的包加上類名類的作爲一個字符串,象這樣:
com.company.project.package.MyClass
例如,下面的代碼輸出上述字符串:
package com.company.project.package; class MyClass extends Object { // some definition } Object o = new MyClass(); System.out.println(o.getClass().getName());
-1
名稱在你的情況下,「僱員」或「my.package.employee」。
0
免責聲明:雖然埃裏克的答案是正確的,但它並不完整。
總之
此方法類似於另一方面,getCanonicalName()用差 - 它返回類,其中規範版本返回null(例如,用於匿名類)的二進制名稱。
詳細
如果該類對象表示引用類型不是數組類型,則返回的類的二進制名稱:
String.class.getName()
returns "java.lang.String"
(new Object() {}).getClass().getName()
returns "test.Main$1"
如果該類對象表示一個基本類型或void,那麼返回的名稱就是一個String,它等於對應於原始類型或void的Java語言關鍵字。
byte.class.getName()
returns "byte"
long.class.getName()
returns "long"
如果該類對象表示一類陣列的,則該名稱的內部形式包括由一個或多個「[」表示該數組嵌套的深度字符之前的元素類型的名稱:
(new Object[3]).getClass().getName()
returns "[Ljava.lang.Object;"
(new int[3][4][5][6][7][8][9]).getClass().getName()
returns "[[[[[[[I"
元素類型名的編碼如下:
Element Type Encoding
boolean Z
byte B
char C
class or interface L<classname>;
double D
float F
int I
long J
short S
在此方法正式文檔:https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getName--
相關問題
- 1. 只得到了類Class.getName()
- 2. 是否class.getName()很貴?
- 3. new()約束對類定義做了什麼?
- 4. 什麼類型給一個JSON對象
- 5. 類中的類定義「自我」是做什麼的?
- 6. 什麼sapply對於給定函數
- 7. Java類什麼都不做
- 8. ResourceProxy類應該做什麼?
- 9. 我對TextViews做了什麼?
- 10. 找出給定的gcc Option/Flag正在做什麼?
- 11. 公式的給定部分在r中做什麼?
- 12. Swift的可選綁定對它的參數類型做了什麼?
- 13. 將變量分配給null做什麼?
- 14. 傳遞參數給.toString()做什麼?
- 15. IListSource類型的AttributeProvider是做什麼的?
- 16. 節點類在LinkedList類中做什麼
- 17. 什麼類型的Java/Swing佈局可以做對接和/或錨定?
- 18. 索引操作對SystemVerilog中的整數類型做什麼?
- 19. 會有什麼的Android Dialog類對象屏幕旋轉後做
- 20. 爲什麼一個類叫做對象的抽象?
- 21. 對於同一類的每個div做點什麼
- 22. 尖括號對C#中的類名做了什麼?
- 23. 做什麼:[]在傳遞給.send這個Ruby語句時做什麼?
- 24. Java Robot類是做什麼的?
- 25. 同步(類參考)是做什麼的?
- 26. 我可以做什麼類的knockout.js
- 27. 做minHeight做什麼?
- 28. NHibernate對我的Iesi.Collections.ISet做了什麼?
- 29. /*對java中的某行做了什麼?
- 30. WPF能做什麼和不做什麼?
它返回的對象是一個Object?或者Object的任何子類? – justkt 2011-03-21 17:42:15
你必須更具體。添加一些細節,以便理解你在找什麼...... – Thomas 2011-03-21 17:42:19
我不清楚你的意思是「如何執行一個聲明」。您是否問JVM如何在運行時執行動態分派?編譯器如何生成字節碼?或者簡單地說,如何編寫可以調用它的代碼(儘管後者看起來很簡單)? – 2011-03-21 17:43:01