2013-08-16 113 views
11

在java中int,float等是基本類型。如果我們需要使用泛型,則使用包裝類。 不過還是以下聲明工程在Java中,int.class是什麼意思

Class<Integer> intClass=int.class 

我們怎麼能叫int.class即使它是一個基本類型?

+0

這裏是你的答案.. http://stackoverflow.com/questions/1072066/about-the-class-property-field http://stackoverflow.com/questions/10076629/如何做一個類的財產工作 –

回答

6

甲原始成爲對象

對於基元,可有類對象作爲在相應的封裝類命名類型的常量 - 即int.class改變爲java.lang.Integer.TYPE 。對於其他類型,編譯器會在正在編譯的類中創建一個私有成員變量來存放Class對象,並生成使用Class.forName()初始化該成員的代碼。

發現了一些discussion

和一個不錯的discussion here和你的例子也包括在這個環節。

從那裏的幾句話:

一類怎麼能是一種原始的?讓我們更多地混淆事情。我們可以訪問類對象通過編碼代表定義的類,說:

Equation.class // returns the Equation Class object 

但是,我們也可以說:

int.class 

獲取類對象,它的名字是「int」 。請注意,我們沒有將getClass()方法發送給對象;我們使用了保留字作爲內置的基本類型(int),並使用點符號訪問其類「字段」。這返回一個Class對象!

4

int.classClass<Integer>是根據規範相同的類型。

Docs

的基本Java類型(布爾,字節,字符,短,整型,長, 浮點以及雙),並且關鍵字void也表示爲 類對象。

JLS 15.8.2

15.8.2。類字面

類文字是由一個類, 接口,陣列或原始類型,或僞型空隙的名稱的表達,通過隨後 「」和令牌類。

C的類型。類,其中C是類,接口或 陣列類型的名稱,是Class<C>

類型p.class,其中p是一個基本類型的名稱, 是Class<B>,其中B是式P的表達後 裝箱轉換的類型。

void.class的類型是Class<Void>

如果指定類型是類型變量 或參數化類型或其元素類型爲 類型變量或參數化類型的數組,則這是編譯時錯誤。

如果指定的類型不表示類型 是可訪問的,並且範圍在 類文字出現的位置,則是編譯時錯誤。

按照當前實例的類 的定義類加載器的定義,類文字評估爲指定類型的Class對象(對於void爲 )。

+1

說它「*是*'類'」是錯誤的和誤導。 'int.class'的* type *是'Class ',但它與'Class '實例完全不同,它是'Integer.class'的實例,它表示的是int類型的原語,而不是整數對象。 – user2357112

2

類文字是由類,接口,數組或原始類型的名稱或僞類型void,後跟'。'組成的表達式。和令牌類。

  1. 枚舉是一種類,註釋是一種界面。
  2. 每個數組也都屬於一個類,它反映爲一個Class對象,該對象由3.共享具有相同元素類型和維數的所有數組。
  3. 的基本Java類型(布爾,字節,字符,短,整型,長整型,浮點,雙),和
  4. 關鍵字void也

表示爲類對象。

所以System.out.println(int.class);將打印intSystem.out.println(Integer.class);將打印class java.lang.Integer