91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用java關鍵字static

發布時間:2020-08-04 09:01:15 來源:億速云 閱讀:200 作者:小豬 欄目:開發技術

這篇文章主要講解了如何使用java關鍵字static,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

關鍵字 static

1. 概述

  • static 是一種修飾符
  • static 是Java中表靜態的關鍵字
  • 它可以修飾成員變量、成員方法、代碼塊
  • 被static修飾的成員變量或成員方法,將不再依賴于對象的創建而去使用,而是依賴類的存在,成為類成員或類方法,是共享的(下面將會詳細的解釋)。

2. static修飾成員變量

2.1 常見的修飾符
  • public 修飾符
  • private 修飾符
  • 沒有修飾符
  • static 修飾符(靜態修飾符)
class Test {
	// public 修飾符
	public int a;
	// private 修飾符
	private int b;
	// 沒有修飾符
	int c;
	// static 修飾符
	public static int d;
}
2.2 內存圖分析講解static修飾成員變量
class Test {
	public int a;
	public String b;
	public double c;
	public static int d;
}
Test t = new Test();

以上述簡單的測試類為例,畫其底層的內存圖(下圖是我自己手畫的圖,天生手殘,請大家多擔待😂):

如何使用java關鍵字static

以上就是很簡單的Java實例化對象從創建內存到給成員變量開辟內存空間,并默認初始化的底層內存圖,我來解釋以下上面的圖:

  1. 在棧中開辟一塊內存,以main標識的內存空間,為main方法的函數幀。
  2. 在main函數幀標識的內存中,開辟一塊以t標識(實例化對象的名字)的局部變量內存,其中存放的是地址值(或稱引用值),指向堆空間中保存成員變量內存的首地址。
  3. 堆空間開辟一塊內存,用來存放成員變量,其開辟內存的個數于其成員變量的個數有關,以次Test為例,非static修飾的變量有3個,變在其中開辟三塊內存空間,用來存放著三個變量,順序為類中定義變量的順序。將該內存地址的首地址賦給棧中t標識的那塊內存。
  4. 因為成員變量在堆中開辟的內存,堆的機制,存在默認初始化,所以對成員變量賦予默認初始化的值,int,double,屬于基本數據類型,所以直接將其默認值0,0.0寫入對應的內存當中;成員變量c為字符型,為引用數據類型,所以其內存中存放的是地址值,指向堆中的另一塊空間,并賦予默認值null,完成成員變量的初始化。
  5. 從圖中可以很明顯的看出,存放d,用static修飾的成員變量,其內存的開辟不在堆內存中開辟,而是在方法區中的靜態區開辟(可以理解靜態區就在方法區當中)。
  6. 靜態區隨類的加載而開辟,且其中的存放的靜態成員變量是共享的,且僅有次一塊內存。
2.3 static修飾的成員變量的特點
  • static修飾的成員變量不再是普通的成員變量,而是類成員變量
  • 其隨著類的加載而加載,隨著類的加載而開辟內存,不依賴于對象的存在
  • 其內存在靜態區存放
  • 被類的所有對象所共享
2.4 簡單的代碼解釋并說明如何使用
class Test {
	public int a = 10;
	public static int b = 20;
}

// 類已經加載,并沒有實例化,此時靜態區已經開辟,可以調用使用靜態變量,并不依賴于對象存在,而是依賴于類的存在,使用時,直接類名.變量名,即可。
syso(Test.b); // 輸出 20

// 實例化對象,此時才在堆空間中開辟一系列的內存,上述原理中已經闡述,此時才可以調用a的值。
Test t = new Test();
syso(t.a); // 輸出 10
// 當然也可調用 b 的值
syso(t.b); // 輸出 20

3. static修飾成員方法

3.1 為什么使用static去修飾成員方法

用static修飾的成員變量是靜態變量,也稱類變量,它是隨著類的加載而加載的,地址內存在靜態區,不再依賴對象而存在。但是如何手動改變或設置或調用它的值呢,即操作static數據成員?

  • 可以默認初始化,即開辟內存空間的時候,底層自動賦予它類型默認的初始值。
  • 顯示初始化。即在定義其的時候,給它一個值。
public static int a = 10;

但是如何手動的給它賦予值并且調用呢,這就引入了用static修飾的成員方法,類方法。

2.2 static修飾的成員方法的特點
  • 不再是普通的成員方法,而是類方法,隨著類的加載而加載,不再依賴于對象,而是依賴于類。因
  • 為不再依賴于對象的存在,所以就和對象毫無關系,所以在類方法中不存在 this 引用(this表當前對象,隨著對象的創建而加載),所以就不能調用非靜態的成員變量和函數。
  • 只能訪問靜態成員和靜態的成員方法
  • 類比對象優先
  • 靜態只能訪問靜態
2.3 簡單的代碼解釋并說明如何使用
class Test {
	// 一般的類中的成員變量都是私有的
	private static String lib;
	// static 只能訪問靜態成員 和 靜態方法
	public static String getLib() {
		// 普通數據成員,依賴對象
		
		// 不依賴對象
		// 不存在 this.lib; 不存在 this 引用
		return lib;
	}
	      // 局部變量
	public static void setLib(String lib) {
		// 通過類名.static成員 解決同名的問題
		School.lib = lib;
		//static 不可以調用其它 非 static 的成員方法
	}
}

// 在使用的時候,直接 類名.方法名 即可
// 如果要使用類,必須先把 .class 文件裝入內存   當裝入內存后,類立馬開辟內存在方法區,形成類的對象
		
// 類成員 調用方法
// 類名 .成員名
School.setLib("1");
System.out.println("lib: " + School.getLib());

3. static修飾代碼塊

3.1 概述靜態代碼塊

在Java中的代碼塊,有局部代碼塊,構造代碼塊,靜態代碼塊,三者執行順序,作用,會單獨出一篇博文來簡單說明。所謂靜態代碼塊就是用static修飾的代碼塊。

class Test {
	// 靜態代碼塊
	static {
		syso(...);
	}
}
  1. 靜態代碼塊,隨著類的加載而加載,指執行一次,且優于主函數的執行,即在main函數入口之前就執行。
  2. 靜態代碼塊是由類調用的,在主函數之前就執行。
  3. 作用:對類和靜態變量進行一系列的初始化
  4. 靜態代碼塊中的變量是局部變量,與普通函數中的局部變量性質沒有區別。
  5. 可以由多個靜態代碼塊
3.2 代碼解釋

輸出:

如何使用java關鍵字static

可以明顯的看出,當類加載還未執行main函數的時候,主類中的static已經執行,之后執行main函數,從上至下順序執行,當類進行實例化的時候,同樣也是現執行類中的static代碼塊,再執行構造器中的代碼塊

4. 總結static關鍵字static

1.靜態方法 | 靜態成員變量:
類中的方法 | 成員變量,加上static修飾,就成了靜態成員方法(類方法) | 靜態成員變量(類變量)
2.static成員方法和普通成員方法的本質區別在于沒有this指針
static成員方法只能引用類中的靜態成員(屬性、方法)
static成員方法不能引用類中的非靜態成員
3.類變量和類方法,都是隨著類的加載而加載的,依賴于類,優于對象的,使用的時候 類名.變量名(方法名),被類的所有對象而共享的
4.普通成員方法既可以引用static成員,也可以普通成員
5.可以通過類名調用static成員方法,也可以通過對象名調用
6.static方法之所以存在,就是為了操作static數據成員

看完上述內容,是不是對如何使用java關鍵字static有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳朔县| 望奎县| 黄陵县| 嘉兴市| 乌兰浩特市| 河间市| 鲜城| 綦江县| 宿州市| 迁安市| 万宁市| 光泽县| 万盛区| 临西县| 沅陵县| 区。| 霸州市| 北流市| 阿拉尔市| 曲阳县| 句容市| 太和县| 茌平县| 石门县| 枣庄市| 临武县| 方正县| 运城市| 吉木萨尔县| 迁西县| 聂拉木县| 奇台县| 屏东市| 临西县| 勐海县| 天祝| 绥德县| 西平县| 吴江市| 城市| 宁海县|