本文目錄一覽:
Java類屬性初始化是什麼?
1.我們都知道java是面向對象的語言, 那麼類就好比是一個模板, 比如Student類, 這個類其實是一個模板, 是一個規範.
然後我們執行下面這行代碼
Student xiaoMing = new Student();
就相當於我們用Student這個模板去生成了一個對象, 這個對象叫xiaoMing.
如果Student這個類有一個屬性private int age;當我們只是做上面new對象的動作時候, xiaoMing的age並沒有被賦值, 只是初始化成了0
(數值類型的屬性初始化都是0, String則是null, 例如有個字符串類型的屬性name就會是null)
然後xiaoMing.setAge(10); 那麼這個時候xiaoMing的age屬性才變成10,
所以類屬性初始化指的就是在new對象的時候對各個屬性賦予一個初始化的值.
2.為什麼要用構造方法進行屬性初始化:
這個並不是強制的, 構造方法分成無參構造和帶參構造, 用構造方法對屬性進行初始化只是單純的為了方便而已.
java中為什麼要為類的屬性初始化?
1. 對於類的成員變量,不管程序有沒有顯式的進行初始化,Java虛擬機都會先自動給它初始化為默認值。
默認值如下:
Boolean false
Char ‘\u0000′(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
2. 局部變量聲明之後,Java虛擬機就不會自動給它初始化為默認值,因此局部變量的使用必須先經過顯式的初始化。
但是需要聲明的是:對於只負責接收一個表達式的值的局部變量可以不初始化,參與運算和直接輸出等其它情況的局部變量需要初始化。
Java類的初始化是什麼時候?
我們知道一個類(class)要被使用必須經過裝載,連接,初始化這樣的過程。下面先對這三階段做一個簡單的描述,之後會結合一個簡單的例子來說明java中類的初始化過程。
在裝載階段,類裝載器(Bootstrap ClassLoader 或者用戶自定義的ClassLoader) 把編譯形成的class文件載入內存,創建類相關的Class對象,這個Class對象封裝了我們要使用的類的類型信息。
連接階段又可以分為三個子步驟:驗證、準備和解析。
驗證就是要確保java類型數據格式 的正確性,並適於JVM使用。
準備階段,JVM為靜態變量分配內存空間,並設置默認值,注意,這裡是設置默認值,比如說int型的變量會被賦予默認值0 。在這個階段,JVM可能還會為一些數據結構分配內存,目的 是提高運行程序的性能,比如說方法表。
解析過程就是在類型的常量池中尋找類、接口、字段和方法的符號引用,把這些符號引用替換成直接引用。這個階段可以被推遲到初始化之後,當程序運行的過程中真正使用某個符號引用的時候 再去解析它。
類會在首次被「主動使用」時執行初始化,為類(靜態)變量賦予正確的初始值。在Java代碼中,一個正確的初始值是通過類變量初始化語句或者靜態初始化塊給出的。而我們這裡所說的主動使用 包括:
1. 創建類的實例
2. 調用類的靜態方法
3. 使用類的非常量靜態字段
4. 調用Java API中的某些反射方法
5. 初始化某個類的子類
6. 含有main()方法的類啟動時
初始化一個類包括兩個步驟:
1、 如果類存在直接父類的話,且直接父類還沒有被初始化,則先初始化其直接父類
2、 如果類存在一個初始化方法,就執行此方法
註:初始化接口並不需要初始化它的父接口。
什麼時候進行java類的初始化
java中類的顯示初始化會在首次被「主動使用」時執行初始化,為類(靜態)變量賦予正確的初始值。在Java代碼中,一個正確的初始值是通過類變量初始化語句或者靜態初始化塊給出的。而我們這裡所說的主動使用 包括:
1. 創建類的實例
2. 調用類的靜態方法
3. 使用類的非常量靜態字段
4. 調用Java API中的某些反射方法
5. 初始化某個類的子類
6. 含有main()方法的類啟動時
初始化一個類包括兩個步驟:
1、 如果類存在直接父類的話,且直接父類還沒有被初始化,則先初始化其直接父類
2、 如果類存在一個初始化方法,就執行此方法
註:初始化接口並不需要初始化它的父接口。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/236993.html