static:可實作所有的對象共享一個成員變量。被 static 修飾的成員稱為靜态成員或類成員。它屬于整個類所有,而不是某個對象所有,即被類的所有對象所共享。
通路static成員變量有兩種方式:
直接用
類名.成員變量名
通路;
定義類的對象,使用
對象.成員變量名
通路。
public class Name {
static String name="張三";
public static void main(String[] args) {
System.out.println("通過‘類名.成員變量名’通路成員變量,名字是"+Name.name);
Name na=new Name();
System.out.println("通過‘對象.成員變量名’通路成員變量,名字是"+na.name);
}
}
運作結果如下:

使用static修飾的方法稱為靜态方法或類方法,main()方法就是典型的靜态方法。
1、 靜态方法中可以直接調用同類中的靜态成員,但不能直接調用非靜态成員。
如果希望在靜态方法中調用非靜态變量,可以通過建立類的對象,然後通過對象來通路非靜态變量。
如下程式第7行,靜态方法main()中通路非靜态成員age,編譯報錯。
public class Name {
static String name="張三";
int age=;
public static void main(String[] args) {
System.out.println("通過‘類名.成員變量名’通路成員變量,名字是"+Name.name);
System.out.println("通過‘類名.成員變量名’通路成員變量,名字是"+Name.age);
Name na=new Name();
System.out.println("通過‘對象.成員變量名’通路成員變量,名字是"+na.name);
System.out.println("通過‘對象.成員變量名’通路成員變量,年齡是"+na.age);
}
}
上述程式第11行通過對象來通路非靜态成員。
2、 在普通成員方法中,則可以直接通路同類的非靜态變量和靜态變量。
如下程式,在showInfo()中,直接通路非靜态變量age和靜态變量name。
public class Name {
static String name="張三";
int age=;
public void showInfo(){
System.out.println("普通成員方法中直接通路成員變量,名字是"+name);
System.out.println("普通成員方法中直接通路成員變量,年齡是"+age);
}
public static void main(String[] args) {
Name na=new Name();
na.showInfo();
}
}
程式運作結果如下:
3、 靜态方法中不能直接調用非靜态方法,需要通過對象來通路非靜态方法。
如上程式在靜态方法main()中通路非靜态方法showInfo(),通過對象na來通路。
靜态初始化塊
初始化塊完成對資料的指派功能。在類的聲明中,可以包含多個初始化塊,這些代碼塊會在當建立對象時依次執行。
如果使用 static 修飾的初始化塊稱為靜态初始化塊。
在類加載時執行,且隻會執行一次;
靜态初始化塊隻能給靜态成員變量指派。
public class Name {
String name1;
String name2;
static String name3;
public Name(){
name1="張三";
System.out.println("構造方法為name1指派");
}
{
name2="李四";
System.out.println("初始化塊為name2指派");
}
static {
name3="王五";
System.out.println("靜态初始化塊為name3指派");
}
public static void main(String[] args) {
Name na=new Name();
System.out.println("num1"+na.name1);
System.out.println("num2"+na.name2);
System.out.println("num3"+name3);
Name nam=new Name();
}
}
程式執行情況如下:
由上述程式執行情況可以看出,靜态初始化塊最先被執行
其次執行,初始化塊
最後執行,構造方法