2.1 static關(guān)鍵字學(xué)習(xí)
package com.csii;
/**
* Java基礎(chǔ)學(xué)習(xí)
*/
public class JavaTest {
? ? public JavaTest(){
? ? ? ? System.out.println("無參數(shù)構(gòu)造");
? ? }
? ? //對象代碼塊
? ? {
? ? ? ? System.out.println("無修復(fù)模塊");
? ? }
? ? //靜態(tài)代碼塊? 是老大 加載時(shí)就執(zhí)行
? ? static {
? ? ? ? System.out.println("靜態(tài)模塊");
? ? }
? ? public static? void main(String[] args){
? ? //? JavaTest jt =new JavaTest();
? ? }
}
執(zhí)行情況:
1滚粟、對于main方法中不執(zhí)行JavaTest jt =new JavaTest();時(shí) 控制臺則輸出? 靜態(tài)模塊;
2洒闸、當(dāng)執(zhí)行JavaTest jt =new JavaTest();闷堡,
控制臺則輸出:
靜態(tài)模塊
無修復(fù)模塊
無參數(shù)構(gòu)造
3、如果public static? void main(String[] args){
? ? JavaTest jt1 =new JavaTest();
? ? JavaTest jt2 =new JavaTest();
}則
控制臺則輸出:
靜態(tài)模塊
無修復(fù)模塊
無參數(shù)構(gòu)造
無修復(fù)模塊
無參數(shù)構(gòu)造
4来破、如果將System.out.println("無參數(shù)構(gòu)造"); 改為System.err.println("無參數(shù)構(gòu)造");
輸出結(jié)果如下:
靜態(tài)模塊
無參數(shù)構(gòu)造
無修復(fù)模塊
或
無參數(shù)構(gòu)造
靜態(tài)模塊
無修復(fù)模塊
或
靜態(tài)模塊
無修復(fù)模塊
無參數(shù)構(gòu)造? 等三種情況
理解總結(jié):
1、靜態(tài)修飾的方法塊? 在加載時(shí)會首先執(zhí)行碎乃,且只執(zhí)行一次悔据,
2殉簸、對象模塊代碼是在實(shí)例化對象時(shí)執(zhí)行
3闰集、構(gòu)造函數(shù)是在前兩個(gè)模塊之后執(zhí)行
4、system? 輸出方法中?
public final static PrintStream out = null;
public final static PrintStream err = null;
out是帶緩存的般卑,當(dāng)緩存滿之后會打印到控制臺武鲁,err則是直接打印,所以會有三種情況蝠检。
static是一個(gè)修飾符沐鼠,用于修飾成員(成員變量,成員函數(shù))叹谁,把對象的共享數(shù)據(jù)存儲在單獨(dú)的空間饲梭。 當(dāng)成員被靜態(tài)修飾后,就有兩種調(diào)用方式:被對象調(diào)用和直接被類名調(diào)用焰檩。不再屬于對象憔涉,而是屬于類。
這個(gè)例子很形象析苫,所在教室是一個(gè)共性屬性兜叨,比如這個(gè)教室因?yàn)槟撤N原因換了,不用每個(gè)人都去更新衩侥,此時(shí)這個(gè)屬性? 作為共同屬性就很有必要了国旷,此時(shí)將所在教室放在類的空間中
(1)特點(diǎn):
u? 隨著類的加載而加載,隨著類的消失而消失茫死。說明它的生命周期最長跪但。
u? 優(yōu)先于的對象存在。明確一點(diǎn):靜態(tài)是先存在峦萎。對象是后存在的特漩。
u? 修飾后被所有對象所共享吧雹。
u? 可以直接被類名所調(diào)用,這種調(diào)用方式比較推薦
(2)注意:
u? 主函數(shù)是靜態(tài)的涂身。
u? 靜態(tài)方法不能訪問非靜態(tài)屬性 ("先人不能訪問后人雄卷,后人能知道先人")
u? 非靜態(tài)方法既可以訪問靜態(tài)也可以訪問非靜態(tài)。
u? 靜態(tài)方法中不可以定義this蛤售,super關(guān)鍵字丁鹉。因?yàn)殪o態(tài)優(yōu)先于對象存在。
Static定義屬性? 內(nèi)存圖
(3)什么時(shí)候使用靜態(tài):
什么時(shí)候定義靜態(tài)變量(類變量)呢悴能??
當(dāng)對象中出現(xiàn)共享數(shù)據(jù)時(shí)揣钦,該數(shù)據(jù)被靜態(tài)所修飾存在于方法區(qū),對象中的特有數(shù)據(jù)要定義成非靜態(tài)存在于堆內(nèi)存中漠酿。
什么時(shí)候定義靜態(tài)函數(shù)呢冯凹?
當(dāng)功能內(nèi)部沒有訪問到非靜態(tài)數(shù)據(jù)(對象的特有數(shù)據(jù)),該功能可以定義成靜態(tài)的炒嘲。