回覆列表
  • 1 # 李白也學程式設計

    問題很專業。我來回答一下,如果能幫到你就更好,如不能幫你解惑,看看也行了。

    java所有的型別在類載入的時候,會自動載入一個靜態屬性class,無論是int還是Integer,因為在java中,所有的型別都對應了一個java.lang.Class物件。正是對應這個物件。我們才能更方便地使用java反射機制。

    1 要得到Class這個物件,我們可以使用【類.class】,例如Class cls = int.class;這樣可以得到cls物件。如果System.out.println(cls.getName());,結果是int。如果使用Class cls = Integer.class;得到的結果是java.lang.Integer。

    2 還有一種情況,假如生成了物件,例如:Integer i = new Integer(0) ; 這時,你會發現i裡面沒有class這個屬性了。同時,會多出一個【i.getClass()】方法,該方法同樣得到了變數 i 這個型別的Class物件。System.out.println(i.getClass().getName());,得到的結果是java.lang.Integer。

    透過檢視getClass()原始碼得知。該方法是繼承Object的方法public final native Class<?> getClass();並且已經被修飾成final和native,說明該方法只能由JVM底層呼叫,程式設計師不能改寫,只能使用。透過檢視原始碼可以說明了,這個class屬性是由jvm生成,而程式設計師控制不了。

    經過上面的分析,應該清楚了class的作用和由來。

    後面因涉及到jvm的底層程式碼的本地呼叫,本人才疏學淺,還將繼續學習。

    希望以上解答能幫到你!

  • 中秋節和大豐收的關聯?
  • 熊貓剛宣佈關停伺服器,鬥魚便率先發力競爭上市,虎牙又將如何自處?