- static含義
書中86頁引用:
static方法就是沒有this的方法。在static方法內部不能調用非靜態方法,反過來是可以的。而且可以在沒有創建任何對象的前提下,僅僅通過類本身來調用static方法。這實際上正是static方法的主要用途。
static可以用來修飾類的成員方法、類的成員變量,另外可以編寫static代碼塊來優化程序性能。
- 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語法的規定。局部變量包括方法中的變量和語句塊(用{}包裹的語句)中的變量。