亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中局部變量和成員變量的區(qū)別詳解

 更新時間:2023年05月15日 11:48:19   作者:一一哥Sun  
這篇文章主要介紹了Java中局部變量和成員變量的區(qū)別,本文將通過示例為大家詳細講講Java中成員變量與局部變量之間的區(qū)別,感興趣的同學可以了解一下

一. 關于變量

在之前的文章中,已經給大家詳細地介紹過變量相關的內容,比如變量的概念、命名規(guī)范、變量的定義及底層原理等內容。但其實變量還有作用范圍的概念,并且根據作用范圍的不同,變量還可以分為成員變量、局部變量等內容。在我們今天開始學習局部變量和成員變量等內容之前,先簡單地帶大家復習一下之前的變量內容。

1. 概念

我們知道,在Java中,變量是程序里最基本的存儲單元,它由變量名、變量類型、作用域組成。從本質上來說,變量其實就是內存里的一小塊存儲區(qū)域,該區(qū)域只能存儲聲明變量時指定類型的數據。我們創(chuàng)建使用每個變量前,必須先聲明,在內存中申請空間,然后對其進行初始化賦值,接著就可以通過變量名來訪問和使用這塊內存區(qū)域了。

進一步解釋一下,變量其實就是一個可以存儲特定類型數據的容器。這個容器在內存中有自己的地址,為了方便地找到這個地址,我們可以給每個地址起個”名字“,這就是”變量名“。每個變量的數據類型都是固定不變的,但變量中對應數據的具體內容,卻是可以改變的,所以”變量“指的就是內容可以改變的量。

2. 命名規(guī)范

而且變量的命名需要遵循一定的規(guī)范,基本的規(guī)則和規(guī)范如下:

①. Java標識符由 字母(含英、中、日、俄等)、數字、下劃線"_" 和 美元符號$(音: dollar)組成, 如age、G7、_value、$salary;

②. 不能以數字開頭, 如123abc;

③. 嚴格區(qū)分大小寫, 如class與Class是不同的;

④. 長度無限制(一般不要超過15個字符);

⑤. 不能是Java中的保留字和關鍵字。

Java的變量名也是一種標識符,所以必須遵循以上這些規(guī)則! 另外還有一些命名規(guī)范需要我們盡量遵守,比如:

  • 變量名盡量要做到見名知意。在實際開發(fā)時盡量不要寫a、b、c這種名稱;
  • 變量名的首字母要小寫。如果名稱由多個單詞組成,第一個單詞的首字母應小寫,剩下的單詞首字母應大寫(駝峰式命名法),例如 xxxYyyZzz、numCounter

3. 作用范圍

其實,除了以上的這些規(guī)范之外,我們在定義變量時還要考慮它的作用范圍,或者說是作用域。

變量的作用范圍,或者叫作用域,是指一個變量的有效范圍。有的變量在整個類中都是有效的,也有的變量只在方法內部有效,超過這個范圍就無效了。 如果我們在超出了作用域的地方引用這些變量,編譯器就會報錯。這就好比,不同的人有不同的權力,有的人權力比較大,可以在全世界發(fā)號施令;有的人權力比較小,只能在自己家里發(fā)號施令,這就是自己的”作用范圍“或者”作用域“。

我們在定義變量時,要遵循作用域最小化的原則,盡量將變量定義在盡可能小的作用范圍內,并且不要重復使用變量名。

4. 變量分類

在Java中,我們可以根據變量的作用范圍,將Java的變量分為兩大類:

  • 局部變量: 局部變量只在定義它的方法或代碼塊內部有效,不能在其他的方法或代碼塊中使用。也就是說,局部變量只在一個方法或代碼塊的一對{}之間有效。局部變量定義的范圍包括形參、方法內部、代碼塊內部。
  • 成員變量:成員變量在整個類內部都有效,可以在當前類的任何方法中使用。根據是否帶有static關鍵字,成員變量又分為靜態(tài)變量(類變量)、實例變量(對象變量)。

二. 局部變量

1. 概念

在上面的章節(jié)中,其實已經跟大家介紹了局部變量的概念,即:

局部變量是在定義形參、方法或代碼塊內部的變量,該變量只在當前方法、代碼塊中有效。

2. 特點

局部變量具有如下特點:

  • 局部變量聲明在方法、構造方法或者代碼塊、形參中;
  • 局部變量在方法、構造方法、或者語句塊被執(zhí)行時創(chuàng)建,當它們執(zhí)行完成后,局部變量就會被銷毀;
  • 訪問修飾符不能添加在局部變量上;
  • 局部變量只在聲明它的方法、構造方法或者代碼塊、形參中可見;
  • 局部變量是在棧上分配的;
  • 局部變量沒有默認值,所以局部變量被聲明后,必須經過初始化,才可以使用。

3. 案例

在下面的案例中,給大家定義了幾個局部變量供大家參考。

/**
 * @author 
 */
public class Demo01 {

    //args也是一種局部變量,在main(){}方法的{}范圍內有效
    public static void main(String[] args) {
        //局部變量,在main(){}方法的{}范圍內有效
	int a = 10;
		
	System.out.println("a=" + a);
    }

    public void showAge() {
	//i也是一種局部變量,只在for(){}這對{}范圍內
	for(int i=0;i<100;i++) {
            System.out.println("age=" + age);
	}
    }
}

三. 成員變量

1 概念

所謂的成員變量,是指在類中(不是方法或其他代碼塊)直接定義的變量。根據是否帶有static關鍵字,成員變量又分為靜態(tài)變量(類變量)、實例變量(對象變量) 。成員變量在整個類的內部都有效,可以在當前類的任何方法中使用。另外如果成員變量不是被private修飾的,還可以在其他的類中引用。

2. 實例變量

實例變量也被成為對象變量,是指在類中定義的非static變量。實例變量具有如下特點:

  • 實例變量聲明在一個類中,但在方法、構造方法和語句塊的外面;
  • 當一個對象被實例化之后,每個實例變量的值也就跟著確定了;
  • 實例變量在對象創(chuàng)建時創(chuàng)建,在對象被銷毀時銷毀;
  • 實例變量對于類中的方法、構造方法或者語句塊都是可見的。一般情況下我們應該把實例變量設為私有,通過訪問修飾符可以使實例變量對子類也可見;
  • 實例變量具有默認值。數值型變量的默認值是0,布爾型變量的默認值是false,引用類型變量的默認值是null。變量的值可以在聲明時指定,也可以在構造方法中指定;
  • 實例變量可以直接通過變量名訪問。但在靜態(tài)方法以及其他類中,應該使用完全限定名:ObjectReference.VariableName。

3. 靜態(tài)變量

靜態(tài)變量又被稱為類變量,是被static修飾的、直接定義在類中(方法之外)的變量,它具有如下特點:

  • 靜態(tài)變量可以被public、private、final和static修飾;
  • 靜態(tài)變量在方法外面定義,但可以在靜態(tài)語句塊中初始化,且初始化后不可被改變;
  • 靜態(tài)變量與實例變量具有相似的可見性。但為了對類的使用者可見,大多數靜態(tài)變量都聲明為public類型;
  • 靜態(tài)變量的默認值和實例變量相似;
  • 靜態(tài)變量通過ClassName.VariableName的形式進行訪問;
  • 靜態(tài)變量存儲在靜態(tài)存儲區(qū);
  • 靜態(tài)變量在第一次被訪問時創(chuàng)建,在程序結束時銷毀;
  • 無論在一個類中創(chuàng)建了多少個對象,一個類都只擁有類變量的一份拷貝;
  • 靜態(tài)變量被聲明為public static final類型時,變量名稱一般建議使用大寫字母。

4. 權限修飾符

大家要注意,成員變量的作用域,是可以通過權限修飾符來進行修改的。也就是說,我們可以給一個成員變量不同的修飾符,賦予該變量不同的權限。比如,我們可以給一個人身上賦予不同的”角色標簽“,就可以改變這個人的”權力大小“。在Java中,有如下4種權限修飾符

修飾符類內部同一個包不同包的其他子類同一個工程
private可以(繼承是特例)
默認可以可以
protected可以可以可以
public可以可以可以可以

private私有的修飾符:可以修飾成員變量、成員方法、構造方法,但不能修飾類(內部類除外)被private修飾的成員只能在被修飾的本類中訪問,在其他類中不能調用。 一般被private修飾的成員變量,是通過公開的set和get方法向外界提供訪問方式。

defalut默認的修飾符:不用寫任何關鍵字,它可以修飾類、成員變量、成員方法、構造方法變量被默認權限修飾后,只能被本類以及同一個包下的其他類訪問。

protected受保護的修飾符:可以修飾成員變量、成員方法、構造方法,但不能修飾類( 內部類除外 ) 。成員變量被protected修飾后,可以在同一類內部,和同一包中的其他類訪問。如果不同包中的類想要訪問被protected修飾的成員,這個類必須是其子類。

public公開的修飾符:是權限最大的修飾符,可以修飾類、成員變量、成員方法、 構造方法。成員變量被public修飾后,可以在任何一個類中任意使用,不管是否是同一個包

5. 案例

在下面的案例中,定義了2個成員變量供大家參考:

/**
 * @author
 */
public class Demo01 {

    //實例變量、對象變量,在當前的Demo01類內部有效
    private int age = 18;
	
    //靜態(tài)變量、類變量,因為是public公開的,在當前Demo01類內部,及其他類中都可以使用    
    public static String msg = "Hello,一一哥";

    public static void main(String[] args) {
        //注意:在static靜態(tài)方法中不能引用非靜態(tài)變量
	//System.out.println("age=" + age);

	System.out.println("msg=" + msg);
    }
}

四. 結語

至此,就把局部變量相關的內容給大家介紹完了,現在你知道什么是局部變量及其特點了嗎?另外我們要搞清楚局部變量和成員變量的區(qū)別:

1. 相同點:

定義變量的格式相同;

先聲明后使用;

變量都有對應的作用域。

2. 不同點:

兩者聲明的位置及作用范圍不同,如下表所示:

成員變量直接定義在類中,根據修飾符的不同,可以在當前類或其他類中有效。
局部變量定義在方法的形參、方法內部、代碼塊內部的變量。只在當前方法及代碼塊內部有效。

以上就是Java中局部變量和成員變量的區(qū)別詳解的詳細內容,更多關于Java局部變量和成員變量的資料請關注腳本之家其它相關文章!

相關文章

  • Mybatis實現數據的增刪改查實例(CRUD)

    Mybatis實現數據的增刪改查實例(CRUD)

    本篇文章主要介紹了Mybatis實現數據的增刪改查實例(CRUD),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • java實現播放背景音樂

    java實現播放背景音樂

    這篇文章主要為大家詳細介紹了java實現播放背景音樂,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • SpringBoot項目使用slf4j的MDC日志打點功能(最新推薦)

    SpringBoot項目使用slf4j的MDC日志打點功能(最新推薦)

    這篇文章主要介紹了SpringBoot項目使用slf4j的MDC日志打點功能,本文通過示例代碼給大家介紹非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Spring Security中用JWT退出登錄時遇到的坑

    Spring Security中用JWT退出登錄時遇到的坑

    使用了JWT后,每次請求都要攜帶 Bearer Token 并且被專門的過濾器攔截解析之后才能將用戶認證信息保存到 SecurityContext 中去,接下來通過本文給大家介紹Spring Security中用JWT退出登錄時遇到的坑,感興趣的朋友一起看看吧
    2021-10-10
  • SpringBoot錯誤提示400狀態(tài)問題

    SpringBoot錯誤提示400狀態(tài)問題

    這篇文章主要介紹了SpringBoot錯誤提示400狀態(tài)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring cloud config 配置文件加密方式

    Spring cloud config 配置文件加密方式

    這篇文章給大家介紹了Spring cloud config 配置文件加密方式,非常不錯,具有一定的參考借鑒價值,感興趣的朋友跟隨腳步之家小編一起學習吧
    2018-05-05
  • java 一個截取字符串的函數

    java 一個截取字符串的函數

    java 編寫一個截取字符串的函數,輸入為一個字符串和字節(jié)數,輸出為按字節(jié)截取的字符串。 要求不能出現截半的情況
    2017-02-02
  • 詳解Spring Cloud Consul 實現服務注冊和發(fā)現

    詳解Spring Cloud Consul 實現服務注冊和發(fā)現

    這篇文章主要介紹了Spring Cloud Consul 實現服務注冊和發(fā)現,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 基于SpringCloudGateway實現微服務網關的方式

    基于SpringCloudGateway實現微服務網關的方式

    Spring?Cloud?Gateway是Spring?官方基于Spring?5.0,Spring?Boot?2.0和Project?Reactor?等技術開發(fā)的網關,旨在為微服務架構提供一種簡單而有效的統(tǒng)一的API路由管理方式,對SpringCloudGateway實現微服務網關相關知識感興趣的朋友一起看看吧
    2021-12-12
  • Jenkins自動化打包為war包

    Jenkins自動化打包為war包

    這篇文章主要介紹了Jenkins自動化打包為war包,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01

最新評論