JAVA Static

static 靜態

作用對象

可用來修飾 (類別的屬性、方法或子類別),不能用 static 修飾最上層 Class

定義

靜態的意思是,在程式載入記憶體的時候,跟著程式一起在記憶體中佔有空間,而不是主程式開始執行後才跟記憶體要空間。

static 可以想像成程式執行時已經載入到記憶體中,有點類似於全域的概念,Java 中沒有全域性變數的概念。但可以透過 static 實現此目的,可以將變數宣告為靜態並將其用作全域性變數。

範例 1

如果物件內定義 static 屬性,就可以使用類名稱訪問靜態變數,不需要建立一個物件來呼叫靜態變數。

1
2
3
4
class Student{
static int id;
static String name;
}
1
2
3
4
5
6
7
8
9
10
public class StaticTesting{
public static void main(String[] args) {
Student.id = 1;
Student.name = "Sean";
int StudentId = Student.id;
String StudentName = Student.name;
System.out.println("Id: "+StudentId);
System.out.println("Name: "+StudentName);
}
}

Output:

1
2
Id: 1
Name: Sean

範例 2

static 也可以同時用在類別方法中,可以讓有被注入這個類別的程式內都可以使用,類似於使得類別內的變數擁有全域的特性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class GlobalVarTest {
static String Global;


public static void setGlobal(String s) {
Global = s;
}

public static String getGlobal() {
return Global;
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
pubic class TestGlobal1 {

public String print(){
String a = "hi";
Global.setGlobal(a)
System.out.println("TestGlobal1 set Global: " + GlobalVarTest.getGlobal());
}
}

pubic class TestGlobal2 {

public String print(){
String b = "123";
Global.setGlobal(b)
System.out.println("TestGlobal2 set Global: " + GlobalVarTest.getGlobal());
}
}

Output:

1
2
TestGlobal1 set Global: hi
TestGlobal2 set Global: 123