變數宣告
Java屬於強型語言, 所以在使用變數之前一定要宣告其型態. 變數宣告的目的, 是跟系統要求一個特定大小的記憶体空間, 語法如下
型態 變數名稱 [=值]
int a; //宣告 a=10; //指定值
因為宣告及指定常常伴隨發生, 所以上述二行, 可以簡化成一行
int a=10;
若有多個同型態的變數, 可以精簡如下, 中間用 “,” 隔開
double length=176.5, weight=52.3;
原生資料複制
int id=10; int saleId=id; id=50;
上述二個變數是獨立的, 將id變更為50後, saleId還是維持原來的10.
不過請注意, 這只適用在原生基本資料型態而以. 若是遇上物件參考, 那就不一樣了, 這點日後會討論.
變數初始化
區域變數需手動初始化, 若未初始化就將之取出, 會出現compile error
物件變數及類別變數會自動初始化為預設值, 如int 為 0, float 為0.0, char 為\0000, boolean 為false, 物件為null. 致於什麼是物件/類別變數, 等進入物件導向課程即會說明.
變數命名規則
變數的命名, 非常重要. 在專案的開發過程, 會花不少時間思考變數的名稱, 甚至是修改變數名稱. 所以再命名時, 一定要非常謹慎小時. 請務必遵循如下規則.
1. 使用匈牙利命名法 : 首字小寫, 第二個單字(含)後, 首字大寫, 如 thisIsABook. 這是Java的慣用法
2. 變數中間不可以有+-*/$#@等特殊符號, 空格也不行
3. 中間可以使用底線, 如 this_is_a_book. 這是C語言的慣用法
4. 首字不可以為數字 : 如 2score, 絕對禁止
5. 首字可以為底線 : 如 _score, 但不建議. 因為在其他應用上, 是屬於系統級變數
6. 類別變數, 首字大寫 : 如 public class HelloTest
其他注意事項
各種進位表示法
16進位 : int x=0x05fc; //加0x
8進位 : int y=071; //加 0
2進位 : int z=0b1101; //加 0b
分隔符號
自Java SE 7後, 新增了底線當分隔號以方便讀取, 所以底下的語法是正確的
int a=3_000_0_0;
浮點數
float f=30.5; 此行會編譯錯誤, 因為30.5預設是double的, 所以需寫成 30.5f(F), 強制轉成 float
近似值
double x=0.3+0.3+0.3;
System.out.println(x==0.9); 結果是false
需改為如下
BigDecimal y=new BigDecimal(“0.3”);
y=y.add(y).add(y);
System.out.println(y.dobuleValue()==0.9);
常數
不可變 : final int NUMBER_OF_MONTHS=12; 常使用全大寫,每個單字間使用 ‘_’分離
原生資料儲存位置
static的類別變數存放在Global區
區域變數存放在Stack記憶体區,
Field變數(物件變數及類別變數)存在Heap 區
特別注意一下, 就算在區域或區塊中有一程式如下
String s=new String(“Hello World);
new 出的字串, 物件的實体還是存放在heap區的, 但該物件的參考內容值 ~~s, 則是在放在stack中
運算子
指定運算子 = += -= *= /= %= &= |= ^= >>= <<= >>>=
算數運算子 + – * / % ++ —
比較運算子 > < >= <= == !=
邏輯運算子 && ||
位元運算子 & |
位移運算子 >> <<
三元運算子 (boolean) ? express1:express2
int i=6; int j=++i; //先加1再處理 i為7, j也是7 int i=6; int j=i++; //先處理再加1 i為7, 但j為6
運算子優先順序
() ++–% */ +-
型態強制轉換及自動升級
數值只能指定到較大或相同的資料型態變數
隱式轉換
指定較小型態到大型態變數,會進行自動升級,比如把int 放到 float,int會升級
二int相乘產生大於int的結果時,需使用long接收結果
強制轉換
int num1=10, num2=20;
byte num3=(byte)(num1+num2); //需手動注意相加結果是否會超出byte
float強制轉成int後, 小數點全數刪除
byte, char, short在運算前,會自動升級為int, 所以
byte b1=1, b2=3, b3;
b3=b1+b2;會出現編譯錯誤,需要強制轉換為byte才行
float f=27.9; 也會編譯錯誤,因為27.9是double, 需使用27.9f
字串與數字
System.out.println(5+3+”=”+5+3);
結果為 : 8=53
原因 :
前面的 5+3 : 為數字的運算, 所以先算出結果為8,
然後為了跟字串 “=” 相結合(concat), 全轉為字串 : “8=”
後面的 5+3全都轉為字串的運算 : 8=53