最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java關(guān)鍵字static的使用詳解

 更新時間:2020年08月03日 17:14:50   作者:cici_富貴  
這篇文章主要介紹了java關(guān)鍵字static的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

關(guān)鍵字 static

1. 概述

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

2. static修飾成員變量

2.1 常見的修飾符

  • public 修飾符
  • private 修飾符
  • 沒有修飾符
  • static 修飾符(靜態(tài)修飾符)
class Test {
	// public 修飾符
	public int a;
	// private 修飾符
	private int b;
	// 沒有修飾符
	int c;
	// static 修飾符
	public static int d;
}

2.2 內(nèi)存圖分析講解static修飾成員變量

class Test {
	public int a;
	public String b;
	public double c;
	public static int d;
}
Test t = new Test();

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

在這里插入圖片描述

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

  1. 在棧中開辟一塊內(nèi)存,以main標(biāo)識的內(nèi)存空間,為main方法的函數(shù)幀。
  2. 在main函數(shù)幀標(biāo)識的內(nèi)存中,開辟一塊以t標(biāo)識(實(shí)例化對象的名字)的局部變量內(nèi)存,其中存放的是地址值(或稱引用值),指向堆空間中保存成員變量內(nèi)存的首地址。
  3. 堆空間開辟一塊內(nèi)存,用來存放成員變量,其開辟內(nèi)存的個數(shù)于其成員變量的個數(shù)有關(guān),以次Test為例,非static修飾的變量有3個,變在其中開辟三塊內(nèi)存空間,用來存放著三個變量,順序為類中定義變量的順序。將該內(nèi)存地址的首地址賦給棧中t標(biāo)識的那塊內(nèi)存。
  4. 因為成員變量在堆中開辟的內(nèi)存,堆的機(jī)制,存在默認(rèn)初始化,所以對成員變量賦予默認(rèn)初始化的值,int,double,屬于基本數(shù)據(jù)類型,所以直接將其默認(rèn)值0,0.0寫入對應(yīng)的內(nèi)存當(dāng)中;成員變量c為字符型,為引用數(shù)據(jù)類型,所以其內(nèi)存中存放的是地址值,指向堆中的另一塊空間,并賦予默認(rèn)值null,完成成員變量的初始化。
  5. 從圖中可以很明顯的看出,存放d,用static修飾的成員變量,其內(nèi)存的開辟不在堆內(nèi)存中開辟,而是在方法區(qū)中的靜態(tài)區(qū)開辟(可以理解靜態(tài)區(qū)就在方法區(qū)當(dāng)中)。
  6. 靜態(tài)區(qū)隨類的加載而開辟,且其中的存放的靜態(tài)成員變量是共享的,且僅有次一塊內(nèi)存。

2.3 static修飾的成員變量的特點(diǎn)

  • static修飾的成員變量不再是普通的成員變量,而是類成員變量
  • 其隨著類的加載而加載,隨著類的加載而開辟內(nèi)存,不依賴于對象的存在
  • 其內(nèi)存在靜態(tài)區(qū)存放
  • 被類的所有對象所共享

2.4 簡單的代碼解釋并說明如何使用

class Test {
	public int a = 10;
	public static int b = 20;
}

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

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

3. static修飾成員方法

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

用static修飾的成員變量是靜態(tài)變量,也稱類變量,它是隨著類的加載而加載的,地址內(nèi)存在靜態(tài)區(qū),不再依賴對象而存在。但是如何手動改變或設(shè)置或調(diào)用它的值呢,即操作static數(shù)據(jù)成員?

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

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

2.2 static修飾的成員方法的特點(diǎn)

  • 不再是普通的成員方法,而是類方法,隨著類的加載而加載,不再依賴于對象,而是依賴于類。因
  • 為不再依賴于對象的存在,所以就和對象毫無關(guān)系,所以在類方法中不存在 this 引用(this表當(dāng)前對象,隨著對象的創(chuàng)建而加載),所以就不能調(diào)用非靜態(tài)的成員變量和函數(shù)。
  • 只能訪問靜態(tài)成員和靜態(tài)的成員方法
  • 類比對象優(yōu)先
  • 靜態(tài)只能訪問靜態(tài)

2.3 簡單的代碼解釋并說明如何使用

class Test {
	// 一般的類中的成員變量都是私有的
	private static String lib;
	// static 只能訪問靜態(tài)成員 和 靜態(tài)方法
	public static String getLib() {
		// 普通數(shù)據(jù)成員,依賴對象
		
		// 不依賴對象
		// 不存在 this.lib; 不存在 this 引用
		return lib;
	}
	   // 局部變量
	public static void setLib(String lib) {
		// 通過類名.static成員 解決同名的問題
		School.lib = lib;
		//static 不可以調(diào)用其它 非 static 的成員方法
	}
}

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

3. static修飾代碼塊

3.1 概述靜態(tài)代碼塊

在Java中的代碼塊,有局部代碼塊,構(gòu)造代碼塊,靜態(tài)代碼塊,三者執(zhí)行順序,作用,會單獨(dú)出一篇博文來簡單說明。所謂靜態(tài)代碼塊就是用static修飾的代碼塊。

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

3.2 代碼解釋

輸出:

在這里插入圖片描述

可以明顯的看出,當(dāng)類加載還未執(zhí)行main函數(shù)的時候,主類中的static已經(jīng)執(zhí)行,之后執(zhí)行main函數(shù),從上至下順序執(zhí)行,當(dāng)類進(jìn)行實(shí)例化的時候,同樣也是現(xiàn)執(zhí)行類中的static代碼塊,再執(zhí)行構(gòu)造器中的代碼塊

4. 總結(jié)static關(guān)鍵字static

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

到此這篇關(guān)于java關(guān)鍵字static的使用詳解的文章就介紹到這了,更多相關(guān)java關(guān)鍵字static內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot+Redisson自定義注解一次解決重復(fù)提交問題

    SpringBoot+Redisson自定義注解一次解決重復(fù)提交問題

    項目中經(jīng)常會出現(xiàn)重復(fù)提交的問題,本文主要介紹了SpringBoot+Redisson自定義注解一次解決重復(fù)提交問題,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Spring Boot編寫攔截器教程實(shí)例解析

    Spring Boot編寫攔截器教程實(shí)例解析

    這篇文章主要介紹了Spring Boot編寫攔截器教程實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • JAVA設(shè)計模式---單例模式你知道嗎

    JAVA設(shè)計模式---單例模式你知道嗎

    這篇文章主要給大家介紹了關(guān)于Java單例模式,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • Java中ArrayList和SubList的坑面試題

    Java中ArrayList和SubList的坑面試題

    集合是Java開發(fā)日常開發(fā)中經(jīng)常會使用到的,下面這篇文章主要給大家介紹了關(guān)于Java中ArrayList和SubList的坑面試題,需要的朋友可以參考下
    2022-05-05
  • spring boot如何使用AOP統(tǒng)一處理web請求

    spring boot如何使用AOP統(tǒng)一處理web請求

    這篇文章主要介紹了spring boot如何使用AOP統(tǒng)一處理web請求,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • java中Map、Set、List的簡單使用教程(快速入門)

    java中Map、Set、List的簡單使用教程(快速入門)

    這篇文章主要給大家介紹了關(guān)于java中Map、Set、List簡單使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java中內(nèi)核線程理論及實(shí)例詳解

    Java中內(nèi)核線程理論及實(shí)例詳解

    在本篇文章里小編給大家整理了一篇關(guān)于Java中內(nèi)核線程理論及實(shí)例詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • 基于ZooKeeper實(shí)現(xiàn)隊列源碼

    基于ZooKeeper實(shí)現(xiàn)隊列源碼

    這篇文章主要介紹了基于ZooKeeper實(shí)現(xiàn)隊列源碼的相關(guān)內(nèi)容,包括其實(shí)現(xiàn)原理和應(yīng)用場景,以及對隊列的簡單介紹,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • Java的MD5工具類和客戶端測試類

    Java的MD5工具類和客戶端測試類

    這篇文章主要介紹了Java的MD5工具類和客戶端測試類,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-12-12
  • Spring?IOC?xml方式進(jìn)行工廠Bean操作詳解

    Spring?IOC?xml方式進(jìn)行工廠Bean操作詳解

    這篇文章主要介紹了Spring?IOC?xml方式進(jìn)行工廠Bean操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01

最新評論

当雄县| 隆化县| 白朗县| 怀柔区| 乌苏市| 宝应县| 清苑县| 德州市| 中卫市| 中方县| 化隆| 长宁县| 抚顺县| 眉山市| 新疆| 广州市| 措美县| 嘉义市| 孝义市| 阿尔山市| 甘谷县| 台东县| 安国市| 礼泉县| 苗栗市| 台山市| 华宁县| 东丽区| 河东区| 芦溪县| 二连浩特市| 自贡市| 晴隆县| 龙门县| 无为县| 大宁县| 旬邑县| 锡林浩特市| 信丰县| 东城区| 弥渡县|