Java變數型別


變數提供了程式可以操作的命名儲存。 Java中的每個變數都有一個型別,它決定了變數記憶體的大小和布局; 可以儲存在該儲存器中的值的範圍; 以及可以應用於變數的操作集。

變數需要先宣告才能使用,以下是變數宣告的基本形式 -

data type variable [ = value][, variable [ = value] ...] ;

這裡data type是Java的資料型別之一,variable是變數的名稱。要宣告具有相同型別的多個變數,可以使用逗號分隔列表。

以下是Java中變數宣告和初始化的範例 -

int a, b, c;         // 宣告三個int型別變數:a, b 和 c
int a = 10, b = 10;  // 初始化它們的值
byte B = 22;         // 宣告並初始化一個 byte 型別的變數:B
double pi = 3.14159; // 宣告並賦值一個 double 型別的變數:PI
char a = 'a';        // 宣告char型別變數 a,並初始化值為:'a'

本章將解釋Java語言中的各種變數型別。Java中有三種變數 -

  • 區域性變數
  • 範例變數
  • 類/靜態變數

1. 區域性變數

  • 區域性變數一般在方法,建構函式或塊中宣告。
  • 程式進入方法,建構函式或塊時會建立區域性變數,並且一旦退出方法,建構函式或塊,變數就會銷毀。
  • 存取修飾符不能用於區域性變數。
  • 區域性變數僅在宣告的方法,建構函式或塊中可見。
  • 區域性變數在內部實現堆疊級別。
  • 區域性變數沒有預設值,因此應宣告區域性變數後,在第一次使用之前為它分配初始值。

範例

在這裡,age是一個區域性變數。 這是在dogAge()方法中定義的,它的範圍僅限於此方法。

public class Test {
   public void dogAge() {
      int age = 0;
      age = age + 5;
      System.out.println("Dog age is : " + age);
   }

   public static void main(String args[]) {
      Test test = new Test();
      test.dogAge();
   }
}

執行上面範例程式碼,得到以下結果:

Dog age is : 5

範例

下面範例中使用變數 age ,但不初始化它,因此在編譯時會出錯。

public class Test {
   public void dogAge() {
      int age;
      age = age + 5;
      System.out.println("Dog age is : " + age);
   }

   public static void main(String args[]) {
      Test test = new Test();
      test.dogAge();
   }
}

執行上面範例程式碼,得到以下結果(出錯):

Test.java:4:variable number might not have been initialized
age = age + 5;
         ^
1 error

2. 範例變數

  • 範例變數在類中宣告,但在方法,建構函式或塊之外。
  • 為堆中的物件分配空間時,將為每個範例變數值建立一個槽。
  • 使用關鍵字new建立物件時會建立範例變數,並在銷毀物件時銷毀範例變數。
  • 範例變數包含由多個方法,建構函式或塊參照的值,或者在整個類中存在的物件狀態的基本部分。
  • 範例變數可以在使用之前或之後在類級別中宣告。
  • 可以為範例變數給出存取修飾符。
  • 範例變數對於類中的所有方法,建構函式和塊都是可見的。 通常,建議將這些變數設為私有(存取級別)。 但是,可以使用存取修飾符為這些變數提供子類的可見性。
  • 範例變數具有預設值。 對於數位,預設值為0,對於布林值,它為false,對於物件參照,它為null。 可以在宣告期間或建構函式中指定值。
  • 可以通過呼叫類中的變數名來直接存取範例變數。 但是,在靜態方法中(當範例變數具有可存取性時),應使用完全限定名稱呼叫它們,如:ObjectReference.VariableName

範例程式碼

import java.io.*;
public class Employee {

   // 此範例變數對於子類都是可見的。
   public String name;

   // salary 變數僅在Employee類中可見。
   private double salary;

   // name變數在建構函式中指定。
   public Employee (String empName) {
      name = empName;
   }

   // 為 salary 變數賦值
   public void setSalary(double empSal) {
      salary = empSal;
   }

   // 此方法列印員工詳細資訊。
   public void printEmp() {
      System.out.println("name  : " + name );
      System.out.println("salary :" + salary);
   }

   public static void main(String args[]) {
      Employee empOne = new Employee("Maxsu");
      empOne.setSalary(15999);
      empOne.printEmp();
   }
}

執行上面範例程式碼,得到以下結果:

name  : Maxsu
salary :15999.0

3. 類/靜態變數

  • 類變數(也稱為靜態變數)在類中使用static關鍵字宣告,但在方法,建構函式或塊之外。
  • 每個類只有一個每個類變數的副本,無論從中建立多少個物件。
  • 除了宣告為常數之外,很少使用靜態變數。常數是宣告為public/privatefinalstatic的變數。常數的初始值不能更改。
  • 靜態變數儲存在靜態儲存器中。 除了宣告的final之外,很少使用靜態變數,並將其用作公共或私有常數。
  • 程式啟動時會建立靜態變數,程式停止時會銷毀靜態變數。
  • 可見性類似於範例變數。 但是,大多數靜態變數都是公共的,因為它們必須可供該類使用者使用。
  • 預設值與範例變數相同。 對於數位,預設值為0; 對於布林型別來說,預設值為false; 對於物件參照,預設值為null。 可以在宣告期間或建構函式中指定值。 此外,可以在特殊的靜態初始化程式塊中分配值。
  • 可以通過使用類名ClassName.VariableName呼叫來存取靜態變數。
  • 將類變數宣告為public static final時,變數名(常數)都是大寫的。 如果靜態變數不是publicfinal,則命名語法與範例和區域性變數命名規則相同。

範例

import java.io.*;
public class Employee {

   // salary變數是一個私有靜態變數
   private static double salary;

   // DEPARTMENT是一個常數
   public static final String DEPARTMENT = "研發部";

   public static void main(String args[]) {
      salary = 19999;
      System.out.println(DEPARTMENT + "平均薪水:" + salary);
   }
}

執行上面範例程式碼,得到以下結果 -

研發部平均薪水:19999

註 - 如果從外部類存取變數,則應作為:Employee.DEPARTMENT