Java面向对象(三)Static
? ? static本身是一個修飾符,可以修飾變量、方法、代碼塊、內部類。
一、static修飾變量 --- 靜態變量
? ? static修飾 變量后這個變量稱之為靜態變量或類變量。
? ? 靜態變量隨著類的加而加載到方法去中的靜態區,并且在靜態區中自動賦予初始值。
? ? 由于靜態變量是先于對象存在的,所以靜態變量可以 有對象調用,也可由類名調用。
? ? 由于該類 創建的所有對象存儲的是靜態屬在靜態區中的地址,所以晶太屬性是被所有對象所共享的
問:
1. 靜態變量可以定義在函數中么?
解: 不可以
靜態變量需要在類被加載的時候加載并被初始化,但是定義在函數中隨著類的加載被加載到方法區,并沒有被執行,所以靜態變量不能被加載。
2. 在構造方法中可以定義靜態變量么?
解; 不可以
靜態變量需要在類被加載的時候加載并被初始化,但是定義在函數中隨著類的加載被加載到方法區,并沒有被執行,所以靜態變量不能被加載。
3. 在構造代碼塊中能初始化靜態變量么?
解: 可以
靜態變量先被加載,在對象創建時執行構造代碼塊,靜態變量被初始化。
4. 可以用this來調用靜態變量么?
解: 可以
this是當前活躍對象的引用,靜態變量可以由對象后者類調用,所以this可以調用靜態變量。
二、靜態方法
static修飾方法可以稱之為靜態方法或類方法。
靜態方法是隨著類的加載被加載到方法區中的靜態區。
靜態區中的元素不屬于某一個對象,而是歸屬于類。
靜態方法是屬于類的,可以通過類調用,也可以通過對象調用。
例: System.arraycopy() 、 Arrays.sort() 、Arrays.toString()
System.out.println() 不是靜態方法 ? ,out是一個對象
問:
1. 靜態方法中可以定義靜態變量么??
解: 不可以
靜態變量需要在類被加載的時候加載并被初始化,但是定義在函數中隨著類的加載被加載到方法區,并沒有被執行,所以靜態變量不能被加載。
2.?靜態方法中可以直接調用本類的非靜態函數么?
解: 不可以
任何非靜態的函數或屬性都需要通過對象來調用。而靜態的屬性或函數只需要類就可以調用。當通過類調用含有非靜態函數的靜態函數時,非靜態函數沒有被對象調用卻要執行,產生矛盾!
3. 靜態函數可以重載么?
解: 可以
重載要求方法名一致,參數列表不同,與static無關。
但不是真正意義上的 重載。
4. 主函數中可以使用this么?
解: 不可以
this相當于當前活躍對象的引用,而主函數執行是沒有對象,所以矛盾。
5. 靜態函數可以重寫么?
解: 不可以
多態針對的是對象中的方法,從對象的層面來看,而靜態是從類的層面來看的。
6. 父子類中可以存在方法簽名一致的方法么?
解: 可以
父類有static修飾,子類也必須有static修飾。
靜態看的是聲明類,非靜態看的是實現類。
父子類中存在了方法簽名一致的方法的時候,要么都是靜態,要么都是非靜態。
三、靜態代碼塊
在類內 用static{ } --- 靜態代碼塊
創建子類時執行順序: 父類靜態---> 子類靜態 ----> 父類非靜態 ---->子類非靜態 ? (規律: 靜態優先于非靜態,父類優先于子類)
類加載的時候執行,實際上靜態代碼塊是隨著類加載而加載到靜態區,在類創建對象或者執行方法之前執行一次。而且只執行一次,后續不再執行。
? ? static本身是一個修飾符,可以修飾變量、方法、代碼塊、內部類。
一、static修飾變量 --- 靜態變量
? ? static修飾 變量后這個變量稱之為靜態變量或類變量。
? ? 靜態變量隨著類的加而加載到方法去中的靜態區,并且在靜態區中自動賦予初始值。
? ? 由于靜態變量是先于對象存在的,所以靜態變量可以 有對象調用,也可由類名調用。
? ? 由于該類 創建的所有對象存儲的是靜態屬在靜態區中的地址,所以晶太屬性是被所有對象所共享的
問:
1. 靜態變量可以定義在函數中么?
解: 不可以
靜態變量需要在類被加載的時候加載并被初始化,但是定義在函數中隨著類的加載被加載到方法區,并沒有被執行,所以靜態變量不能被加載。
2. 在構造方法中可以定義靜態變量么?
解; 不可以
靜態變量需要在類被加載的時候加載并被初始化,但是定義在函數中隨著類的加載被加載到方法區,并沒有被執行,所以靜態變量不能被加載。
3. 在構造代碼塊中能初始化靜態變量么?
解: 可以
靜態變量先被加載,在對象創建時執行構造代碼塊,靜態變量被初始化。
4. 可以用this來調用靜態變量么?
解: 可以
this是當前活躍對象的引用,靜態變量可以由對象后者類調用,所以this可以調用靜態變量。
二、靜態方法
static修飾方法可以稱之為靜態方法或類方法。
靜態方法是隨著類的加載被加載到方法區中的靜態區。
靜態區中的元素不屬于某一個對象,而是歸屬于類。
靜態方法是屬于類的,可以通過類調用,也可以通過對象調用。
例: System.arraycopy() 、 Arrays.sort() 、Arrays.toString()
System.out.println() 不是靜態方法 ? ,out是一個對象
問:
1. 靜態方法中可以定義靜態變量么??
解: 不可以
靜態變量需要在類被加載的時候加載并被初始化,但是定義在函數中隨著類的加載被加載到方法區,并沒有被執行,所以靜態變量不能被加載。
2.?靜態方法中可以直接調用本類的非靜態函數么?
解: 不可以
任何非靜態的函數或屬性都需要通過對象來調用。而靜態的屬性或函數只需要類就可以調用。當通過類調用含有非靜態函數的靜態函數時,非靜態函數沒有被對象調用卻要執行,產生矛盾!
3. 靜態函數可以重載么?
解: 可以
重載要求方法名一致,參數列表不同,與static無關。
但不是真正意義上的 重載。
4. 主函數中可以使用this么?
解: 不可以
this相當于當前活躍對象的引用,而主函數執行是沒有對象,所以矛盾。
5. 靜態函數可以重寫么?
解: 不可以
多態針對的是對象中的方法,從對象的層面來看,而靜態是從類的層面來看的。
6. 父子類中可以存在方法簽名一致的方法么?
解: 可以
父類有static修飾,子類也必須有static修飾。
靜態看的是聲明類,非靜態看的是實現類。
父子類中存在了方法簽名一致的方法的時候,要么都是靜態,要么都是非靜態。
三、靜態代碼塊
在類內 用static{ } --- 靜態代碼塊
執行順序: 父類靜態---> 子類靜態 ----> 父類非靜態 ---->子類非靜態
總結
以上是生活随笔為你收集整理的Java面向对象(三)Static的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java面向对象(二)面向对象的特征 -
- 下一篇: Java面向对象(四)final关键字