在Java程式語言中,class內的static與非static字段(fields)有以下不同:
1. **靜態字段(Static Fields)**:
- 靜態字段是被聲明為static關鍵字的字段,這意味著它屬於整個類,而不是特定的實例。靜態字段只會在記憶體中分配一次,並且所有該類的實例都共享同一份靜態字段的內存空間。
- 靜態字段可以直接通過類名來訪問,而不需要先創建該類的實例。
- 靜態字段通常用於表示類的特定屬性,如常數或共享數據。
```java
public class Example {
public static int count = 0; // 靜態字段
}
```
2. **非靜態字段(Non-Static Fields)**:
- 非靜態字段是普通的實例字段,它屬於類的每個實例。每個類的實例都會擁有自己獨立的非靜態字段。
- 非靜態字段需要先創建類的實例,然後通過該實例來訪問。
- 非靜態字段通常用於表示對象的特定狀態或屬性。
```java
public class Example {
public int value; // 非靜態字段
}
```
舉例來說,假設我們有一個表示汽車的類Car,其中有靜態字段numberOfCars表示汽車的總數,以及非靜態字段brand表示汽車的品牌。這樣設計的話,所有汽車共享同一個numberOfCars,而每輛汽車都有自己獨立的brand。
```java
public class Car {
public static int numberOfCars = 0; // 靜態字段
public String brand; // 非靜態字段
public Car(String brand) {
this.brand = brand;
numberOfCars++; // 每次創建新的Car對象,靜態字段numberOfCars加1
}
}
```
使用示例:
```java
Car car1 = new Car("Toyota");
Car car2 = new Car("Honda");
System.out.println(Car.numberOfCars); // 輸出:2
System.out.println(car1.brand); // 輸出:Toyota
System.out.println(car2.brand); // 輸出:Honda
```
在這個例子中,numberOfCars是靜態字段,表示汽車的總數,而brand是非靜態字段,表示每輛汽車的品牌。