Think In Java(番外)static關鍵詞

  1. static含義
    書中86頁引用:

static方法就是沒有this的方法。在static方法內部不能調用非靜態方法,反過來是可以的。而且可以在沒有創建任何對象的前提下,僅僅通過類本身來調用static方法。這實際上正是static方法的主要用途。

static可以用來修飾類的成員方法、類的成員變量,另外可以編寫static代碼塊來優化程序性能。

  1. static關鍵字的誤區
    1)static關鍵字會改變類中成員的訪問權限
    有些初學的朋友會將java中的static與C/C++中的static關鍵字的功能混淆了。在這裏只需要記住一點:在Java中能夠影響到訪問權限的只有private、public、protected(包括包訪問權限)這幾個關鍵字。看下面的例子就明白了:
public class Main {
	public static void main(String[] args) {
		String name = Person.name;
		int age = Person.age;	//error
	}
}
class Person{
	public static String name = "jack";
	private static int age = 10;
}

在main中調用Person.age會提示錯誤"Person.age 不可視",這說明static不會改變變量和方法的訪問權限。

2)能通過this訪問靜態成員變量嗎?

雖然對於靜態方法來說沒有this,那麼在非靜態方法中能夠通過this訪問靜態成員變量嗎?先看下面的一個例子,這段代碼輸出的結果是什麼?

public class Main {  
    static int value = 33;
 
    public static void main(String[] args) throws Exception{
        new Main().printValue();
    }
 
    private void printValue(){
        int value = 3;
        System.out.println(this.value);
    }
}

/** output 33*/

3)static能作用於局部變量麼?

在C/C++中static是可以作用域局部變量的,但是在Java中切記:static是不允許用來修飾局部變量。不要問爲什麼,這是Java語法的規定。局部變量包括方法中的變量和語句塊(用{}包裹的語句)中的變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章