[TOC]
# 變量
在程序中存在大量的數據來代表程序的狀態,其中有些數據在程序的運行過程中值會發生改變,有些數據在程序運行過程中值不能發生改變,這些數據在程序中分別被叫做變量和常量。
在實際的程序中,可以根據數據在程序運行中是否發生改變,來選擇應該是使用變量代表還是常量代表。
## 變量定義
數據類型 變量名稱
~~~
int=4;
~~~
## 變量作用域
類變量:獨立于方法之外的變量,用 static 修飾。
實例變量:獨立于方法之外的變量,不過沒有 static 修飾。
局部變量:類的方法中的變量。
~~~
public class Variable{
static int allClicks=0; // 類變量
String str="hello world"; // 實例變量
public void method(){
int i =0; // 局部變量
}
}
~~~
#### 局部變量
* 局部變量是在棧上分配
* 局部變量只在聲明它的方法、語句塊中可見;
* 局部變量沒有默認值,所以局部變量被聲明后,必須經過初始化,才可以使用。
* 局部變量在方法或者語句塊被執行的時候創建,當它們執行完成后,變量將會被銷毀
#### 實例變量
* 在堆上分配
* public 能夠被任何其他類訪問 private 只能被所屬類訪問*
* 當一個對象被實例化之后創建,在對象被銷毀的時候銷毀,或者垃圾回收.
* 實例變量具有默認值。數值型變量的默認值是0,布爾型變量的默認值是false,引用類型變量的默認值是null.變量的值可以在聲明時指定,也可以在構造方法中指定;
* *實例變量可以直接通過變量名訪問。但在靜態方法以及其他類中,就應該使用完全限定名ObejectReference.VariableName。
#### 類變量
* 在方法區(靜態區)分配
* 與實例變量具有相似的可見性。
* 靜態變量在程序開始時創建,在程序結束時銷毀。
* 默認值和實例變量相似。數值型變量默認值是0,布爾型默認值是false,引用類型默認值是null。變量的值可以在聲明的時候指定,也可以在構造方法中指定。此外,靜態變量還可以在靜態語句塊中初始化。
# 常量
### 常量定義
不變的變量
final 數據類型 常量名稱 = 值;
> Java編碼規范中,要求常量名必須大寫。
# 直接量
直接量是指在程序中直接通過源代碼的方式指定的值,有時也成為字面量。
~~~
int b = 10; //b為常量,10為字面量
~~~
> 在編譯的時候,JVM 就定義到常量池中。
* int 默認 12
* long 加L
* float 加F
* double 12.8默認
* boolean 布爾直接量true、false
* char 單引號內的單個字符
* String 雙引號內的字符序列
> 錯誤的字面量
比int的最大值還要大1的直接量2147483648是錯誤的,因為超過int表示的范圍,應該使用2147483648L表示