九天學會Java,第六天,變量做用域

  • 變量和數據類型,賦值和輸出
  • 算術運算
  • 選擇結構
  • 循環結構
  • 函數定義,函數調用
  • 變量做用域 <--
  • 棧,程序運行的基石
  • 面向對象
  • 異常處理
  • 語言提供的公用包

通過前面的學習,咱們發現變量有時候定義在main函數裏,有時候寫在循環裏,有的時候又寫在自定義函數裏,那麼什麼的變量的做用域呢函數

首先做用域是由花括號的位置決定的。學習

從函數看局部變量做用域

函數內定義的變量被稱爲局部變量。spa

局部變量的做用範圍從聲明開始,直到包含它的塊結束(塊就是{}內的代碼)。code

函數的參數範圍涵蓋整個方法。參數其實是一個局部變量。對象

public class SixthScopeLesson {
    /**
     * a在整個函數內都是可見的
     * b在定義以後,直到 } 號以前都是可見的
     * @param a
     */
    public static void foo(int a) {
        System.out.println(a);
        int b = 10;
        System.out.println(b);
    }

    public static void main(String[] args) {
        foo(10);
        /**
         * 在main函數裏,就訪問不到foo(int a)裏的a
         * 以及foo函數裏定義的b
         */
    }
}

從for循環看局部變量做用域

for循環的初始化部分聲明的變量,其做用範圍在整個循環。作用域

但循環體內聲明的變量其適用範圍是從它聲明到循環體結束。它包含以下所示的變量聲明:rem

for(int i = 0; i < 10; i++ /*這裏也能訪問i,可是不能訪問j*/) {
    int j = i + 1;   /* 從這裏到 } 都能訪問到j */
    System.out.println(i);
    System.out.println(j);
}
/**
* 出了 } 以後,i和j都不能再訪問
*/

image

嵌套代碼塊看變量做用域

int i = 3;
if (i >= 3) { /* 進入代碼塊 */
    int j = 10; /* j從這裏到 } 都能訪問 */
    System.out.println(i); /* 能夠訪問到i,由於i在上一級代碼塊 */
    System.out.println(j);
}
System.out.println(i); /* 能夠訪問到i,處於同一個代碼塊 */
/* 訪問不到j */

這說明什麼,說明子代碼塊能夠訪問上層代碼塊的變量。it

上層代碼塊卻不能訪問子代碼塊的變量。for循環

這是爲何,由於程序運行到}符號時,表示離開做用域,
{}內分配的變量將被JVM回收class

講到下一節「程序運行基石,棧」時,你們會有更好的理解。

全局變量

類的全局變量在類內都能訪問到

public class SixthScopeLesson2 {
    /**
     * 定義全局靜態變量
     * 變量名叫val
     * 把10賦值給val
     */
    public static int val = 10;
    
    public static void foo() {
        /**
         * 因爲val是全局變量
         * 因此foo函數能訪問到
         */
        System.out.println(val);
    }
    
    public static void main(String[] args) {
        /**
         * 因爲val是全局變量
         * 因此main函數能訪問到
         */
        System.out.println(val);
    }
}
相關文章
相關標籤/搜索