Java成員變量和局部變量

Java成員變量和局部變量

變量至關於一個有名稱的容器,用於裝不一樣類型的數據。而Java中根據變量定義位置的不一樣,又把變量分爲成員變量和局部變量。
因爲對修飾符尚未系統學習,就暫且以public訪問權限最高的做爲修飾符。
仍是先上一段代碼:學習

package com.my.pac03;

/**
 * @author Summerday
 * @date 2019/11/29 14:44
 */

public class VariablesTest {
    //成員變量會默認初始化
    public int value;//定義實例變量
    public static String name;//定義類變量,屬於類,而不是類的單個實例。

    //main方法,程序入口
    public static void main(String[] args) {
        VariablesTest test = new VariablesTest();
        //實例訪問實例變量
        test.value = 10;
        //類訪問類變量
        VariablesTest.name = "typeName";
        System.out.println(VariablesTest.name);//typeName
        //實例訪問類變量
        test.name = "noTypeName";
        System.out.println(VariablesTest.name);//noTypeName
        VariablesTest test2 = new VariablesTest();
        //另外一個實例訪問類變量
        System.out.println(test2.name);//noTypeName
        int val = test.addNum(5);
        System.out.println(val);//15
        System.out.println(test.value);//15
        //System.out.println(m);  錯誤,形參變量m已經消失
        //System.out.println(n);  錯誤,方法局部變量n也會消失
        test.printForeachOneTOTen();
    }

    public int addNum(int m) {
        int n;//方法局部變量並不會初始化
        //public int m;//局部變量不容許使用訪問修飾符修飾
        //System.out.println(n);報錯,由於方法局部變量不會初始化
        n = 3;

        return value += m;
    }
    public void printForeachOneTOTen(){
        for(int i = 1;i<=10;i++){
            System.out.print(i+" ");
        }
        //System.out.println(i);錯誤,i的值存在於代碼塊中,代碼塊以外就莫得了
    }

}

既然是做爲變量,那麼命名方面就應該遵循變量命名的規範,由多個有意義的英文單詞連成,首單詞首字母小寫,其餘單詞首字母大寫,務必見名知義。測試

成員變量

  • 是在類裏定義的變量,有些地方也叫作字段(field),也能夠叫作
  • 根據變量是否由static關鍵字修飾,分爲實例變量類變量,有些地方也叫作實例域和靜態域(類域)。

實例變量

1. 定義實例變量code

//定義實例變量
public int value;
  • 沒有static修飾
  • 從類的實例被建立開始存在,實例消亡時毀滅。

2. 訪問實例變量作用域

//實例訪問實例變量
    test.value = 10;
  • 經過實例訪問,格式:實例.實例變量

類變量

1. 定義類變量it

//定義類變量
public static String name;
  • 有static修飾
  • 從類的準備階段起存在,類消亡時毀滅。

2. 訪問類變量for循環

//類訪問類變量
VariablesTest.name = "typeName";
 //實例訪問類變量
test.name = "noTypeName";
System.out.println(VariablesTest.name);//noTypeName
VariablesTest test2 = new VariablesTest();
//另外一個實例訪問類變量
System.out.println(test2.name);//noTypeName
  • 經過類訪問,格式:類.類變量
  • 也能夠經過實例訪問,格式:實例.類變量
  • 關於類變量涉及到的static關鍵字,以後還會深刻學習。

第一條經過類直接訪問類變量能夠接受,但第二條有點迷惑,但也能夠理解,畢竟類存在的範圍比實例要大。
經過測試:該實例並不擁有這個類變量,因此他訪問的不是實例變量,而依然是類變量。因此上面的操做,經過實例修改類變量和經過類直接修改類變量效果時同樣的。那麼,若是實例能夠直接修改該類的類變量的話,那麼這個類再建立其餘實例時,這個所謂的「共有的特性」就說改就改,變得十分不堪。class

局部變量

是在方法裏定義的變量,根據定義形式的不一樣,分爲如下三種:test

形參變量

//參數列表裏是形參
public int addNum(int m) {
    int n;
    n = 3;
    return value += m;
}
  • 在定義方法簽名(方法名+參數列表)時定義的變量。
  • 做用域在整個方法內有效。
  • 形參不用顯式初始化。
int val = test.addNum(5);
System.out.println(val);//15

形參m的值人爲指定,初始化在調用方法的時候由系統完成。這裏至關於,把5賦值給了int類型的形參變量m。容器

方法局部變量

public int addNum(int m) {
//int類型的n爲方法局部變量
    int n;//局部變量並不會初始化
    //System.out.println(n);報錯,由於方法局部變量不會初始化
    n = 3;
    return value += m;
}
  • 是在方法體內定義的局部變量。
  • 做用域在該變量定義時生效,到方法結束時失效。
  • 須要顯式初始化,不然會報錯。

代碼塊局部變量

//i就是存在於for循環代碼塊中的代碼塊局部變量
public void printForeachOneTOTen(){
    for(int i = 1;i<=10;i++){
        System.out.print(i+" ");
    }
    //System.out.println(i);錯誤,i的值存在於代碼塊中,代碼塊以外就莫得了
}
  • 在代碼塊中定義的局部變量。
  • 做用域在定義該變量時生效,在代碼塊結束時失效。
  • 須要顯示初始化,不然會報錯。

關於命名

  • 在同一個類中,不能定義兩個同名的成員變量,就算是一個類變量,一個實例變量也不行。
  • 一個方法裏面不能定義兩個同名的方法局部變量,且方法局部變量和形參變量不能同名。
  • 同一個方法中,不一樣代碼塊內的代碼塊局部變量能夠同名。
  • 先定義代碼塊,後定義方法局部變量,二者也能夠同名。
  • 若是方法局部變量和成員變量同名,那麼局部變量會覆蓋成員變量。(儘可能避免)
相關文章
相關標籤/搜索