黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

Java教程
Java標識符與關鍵字
Java變量
Java數據類型
Java運算符
Java控制語句
Java方法
Java面向對象
Java對象的創建和使用
Java封裝
Java中static和this
Java繼承
Java方法覆蓋和多態
Java super
Java基礎練習題

Java中static靜態變量

java中的變量包括:局部變量和成員變量,在方法體中聲明的變量為局部變量,有效范圍很小,只能在方法體中訪問,方法結束之后局部變量內存就釋放了,在內存方面局部變量存儲在棧當中。在類體中定義的變量為成員變量,而成員變量又包括實例變量和靜態變量,當成員變量聲明時使用了static關鍵字,那么這種變量稱為靜態變量,沒有使用static關鍵字稱為實例變量,實例變量是對象級別的,每個對象的實例變量值可能不同,所以實例變量必須先創建對象,通過“引用”去訪問,而靜態變量訪問時不需要創建對象,直接通過“類名”訪問。實例變量存儲在堆內存當中,靜態變量存儲在方法區當中。實例變量在構造方法執行過程中初始化,靜態變量在類加載時初始化。那么變量在什么情況下會聲明為靜態變量呢?請看以下代碼,定義一個“男人”類:

public class Man {
	//身份證號
	int idCard;
	//性別(所有男人的性別都是“男”)
	//true表示男,false表示女
	boolean sex = true;
	public Man(int idCard){
		this.idCard = idCard;
	}
}
public class ManTest {
	public static void main(String[] args) {
		Man jack = new Man(100);
		System.out.println(jack.idCard + "," + (jack.sex ? "男" : "女"));
		Man sun = new Man(101);
		System.out.println(sun.idCard + "," + (sun.sex ? "男" : "女"));
		Man cok = new Man(102);
		System.out.println(cok.idCard + "," + (cok.sex ? "男" : "女"));
	}
}

運行結果如下圖所示:

Java技術架構

圖11-16:運行結果

我們來看一下以上程序的內存結構圖:

Java技術架構

圖11-17:內存結構圖

“男人類”創建的所有“男人對象”,每一個“男人對象”的身份證號都不一樣,該屬性應該每個對象持有一份,所以應該定義為實例變量,而每一個“男人對象”的性別都是“男”,不會隨著對象的改變而變化,性別值永遠都是“男”,這種情況下,性別這個變量還需要定義為實例變量嗎,有必要讓每一個“男人對象”持有一份嗎,這樣豈不是浪費了大量的堆內存空間,所以這個時候建議將“性別=男”屬性定義為類級別的屬性,聲明為靜態變量,上升為“整個族”的數據,這樣的變量不需要創建對象直接使用“類名”即可訪問。請看代碼:

public class Man {
	//身份證號
	int idCard;
	//性別(所有男人的性別都是“男”)
	//true表示男,false表示女
	static boolean sex = true;
	public Man(int idCard){
		this.idCard = idCard;
	}
}
public class ManTest {
	public static void main(String[] args) {
		Man jack = new Man(100);
		System.out.println(jack.idCard + "," + (Man.sex ? "男" : "女"));
		Man sun = new Man(101);
		System.out.println(sun.idCard + "," + (Man.sex ? "男" : "女"));
		Man cok = new Man(102);
		System.out.println(cok.idCard + "," + (Man.sex ? "男" : "女"));
	}
}

運行結果如下圖所示:

Java技術架構

圖11-18:運行結果

我們來看一下以上程序的內存結構圖:

靜態變量內存圖

圖11-19:靜態變量內存圖

通過以上內容的學習我們得知,當一個類的所有對象的某個“屬性值”不會隨著對象的改變而變化的時候,建議將該屬性定義為靜態屬性(或者說把這個變量定義為靜態變量),靜態變量在類加載的時候初始化,存儲在方法區當中,不需要創建對象,直接通過“類名”來訪問。如果靜態變量使用“引用”來訪問,可以嗎,如果可以的話,這個訪問和具體的對象有關系嗎?來看以下代碼:

public class ManTest {
	public static void main(String[] args) {
		//靜態變量比較正式的訪問方式
		System.out.println("性別 = " + Man.sex);
		//創建對象
		Man jack = new Man(100);
		//使用“引用”來訪問靜態變量可以嗎?
		System.out.println("性別 = " + jack.sex);
		//對象被垃圾回收器回收了
		jack = null;
		//使用“引用”還可以訪問嗎?
		System.out.println("性別 = " + jack.sex);
	}
}

運行結果如下圖所示:

靜態變量內存圖

圖11-20:靜態變量使用“引用”訪問

通過以上代碼以及運行結果可以看出,靜態變量也可以使用“引用”去訪問,但實際上在執行過程中,“引用”所指向的對象并沒有參與,如果是空引用訪問實例變量,程序一定會發生空指針異常,但是以上的程序編譯通過了,并且運行的時候也沒有出現任何異常,這說明雖然表面看起來是采用“引用”去訪問,但實際上在運行的時候還是直接通過“類”去訪問的。靜態方法是這樣嗎?請看以下代碼:

public class Man {
	//身份證號
	int idCard;
	//性別(所有男人的性別都是“男”)
	//true表示男,false表示女
	static boolean sex = true;
	public Man(int idCard){
		this.idCard = idCard;
	}
	//靜態方法
	public static void printInfo(){
		System.out.println("-----" + (Man.sex ? "男" : "女") + "------");
	}
}
public class ManTest {
	public static void main(String[] args) {
		//靜態變量比較正式的訪問方式
		System.out.println("性別 = " + Man.sex);
		//創建對象
		Man jack = new Man(100);
		//使用“引用”來訪問靜態變量可以嗎?
		System.out.println("性別 = " + jack.sex);
		//對象被垃圾回收器回收了
		jack = null;
		//使用“引用”還可以訪問嗎?
		System.out.println("性別 = " + jack.sex);
		//靜態方法比較正式的訪問方式
		Man.printInfo();
		//訪問靜態方法可以使用引用嗎?并且空的引用可以嗎?
		jack.printInfo();
	}
}

運行結果如下圖所示:

Java中static靜態變量

圖11-21:靜態方法可以使用引用訪問嗎

通過以上代碼測試得知,靜態變量和靜態方法比較正式的方式是直接采用“類名”訪問,但實際上使用“引用”也可以訪問,并且空引用訪問靜態變量和靜態方法并不會出現空指針異常。實際上,在開發中并不建議使用“引用”去訪問靜態相關的成員,因為這樣會讓程序員困惑,因為采用“引用”方式訪問的時候,程序員會認為你訪問的是實例相關的成員。

總之,所有實例相關的,包括實例變量和實例方法,必須先創建對象,然后通過“引用”的方式去訪問,如果空引用訪問實例相關的成員,必然會出現空指針異常。所有靜態相關的,包括靜態變量和靜態方法,直接使用“類名”去訪問。雖然靜態相關的成員也能使用“引用”去訪問,但這種方式并不被主張。

全部教程
主站蜘蛛池模板: 亚洲综合激情丁香六月 | 成年视频xxxxx在线观看 | 美女综合网| 亚洲欧美日韩国产精品 | 日本黄色小说网 | 中文字幕在线观看2019 | 日本va视频 | 97色伦图片在线观看 | 成人午夜私人影院入口 | 午夜 在线播放 | 亚洲精品tv久久久久久久久 | 性欧美v | 国产精品麻豆一区二区三区 | 国产亚洲精品仙踪林在线播放 | 久久综合九色综合97小说 | 久一视频在线 | 日韩小视频在线观看 | 好黄好猛好爽好痛的视频 | 一级特黄特色的免费大片视频 | 中文字字幕码一二三区 | 日韩高清一区二区三区五区七区 | 91午夜精品亚洲一区二区三区 | 狠狠插网站 | 亚洲一区二区三区高清网 | 99re视频这里只有精品 | 香蕉1024 | 国产精品伦子一区二区三区 | 国产成人综合久久亚洲精品 | 午夜精品国产爱在线观看不卡 | 色综合久久88色综合天天提莫 | 偷自拍视频区综合视频区 | 牛牛热在线视频 | 成人精品| 天天看片天天爽_免费播放 天天看片夜夜爽 | 欧美另类丰满熟扫乱xxxxx | 日本xxxxx久色视频在线观看 | 国内精品久久久久久影院老狼 | 真正全免费视频a毛片 | 亚洲国产精久久久久久久 | 成人xxx免费视频播放 | 亚洲aaaa级特黄毛片 |