變數提供了程式可以操作的命名存儲。 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/private
,final
和static
的變數。常量的初始值不能更改。 - 靜態變數存儲在靜態記憶體中。 除了聲明的
final
之外,很少使用靜態變數,並將其用作公共或私有常量。 - 程式啟動時會創建靜態變數,程式停止時會銷毀靜態變數。
- 可見性類似於實例變數。 但是,大多數靜態變數都是公共的,因為它們必須可供該類用戶使用。
- 默認值與實例變數相同。 對於數字,默認值為
0
; 對於布爾類型來說,默認值為false
; 對於對象引用,默認值為null
。 可以在聲明期間或構造函數中指定值。 此外,可以在特殊的靜態初始化程式塊中分配值。 - 可以通過使用類名
ClassName.VariableName
調用來訪問靜態變數。 - 將類變數聲明為
public static final
時,變數名(常量)都是大寫的。 如果靜態變數不是public
和final
,則命名語法與實例和局部變數命名規則相同。
示例
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
。
上一篇:
Java基本數據類型
下一篇:
Java快速入門