註解(Comments)
上面代碼有許多灰色的部份, 那是註解的意思, 通常是用來解說為什麼要這麼寫, 以防日後忘記.
// : 單行註解
/* ….*/ : 多行註解
@Override : 說明下面一行的程式碼是覆寫(可有可無)
/**….*/ : 註解文字
會將其下的程式碼寫入 API 文件中,需使用到 javadoc.exe 來產生文件說明檔。
javadoc -verbose -private Puppy.java (private是指private等級(含)以上的存取權限都可以寫入文件檔中)
程式進入點
public static void main(String[] args) 是一個很特殊的函數,稱為程式進入點。
在眾多的 public class 中,只能有一個 public static void main(String[] args)。
常用符號
java 常用符號需特別說明如下
{} 大括號 curly brackets
[] 中括號 square brackets
() 小括號 Paentheses
; 分號 Semicolons
, 逗號 Commas
” 單引號 Single quotation
” ” 雙引號 Double quotation
System.out.println
println 可以單純列印文字,而且會自動換行,裏面的參數可以有雙引號所包含的文字,或是沒有雙引號的數字計算,或都使用 “+” 將文字數字串在一起。
請注意如下 1/2 的結果是 0,因為整數除以整數結果還是整數。
public static void main(String[] args) {
System.out.println(5+8/2-4);
System.out.println("5+8/2-4 = "+(5+8/2-4));
System.out.println("1/2 = "+ (1/2));
}
結果 :
5
5+8/2-4 = 5
1/2 = 0
由上可知要列印的資料分為文字及數字。
Java八大原生(Primitive)基本資料
文字及數字又細分如下八種,稱為 Java 八大原生基本資料。
| 指令 | 中文說明 | 空間 | 範圍值 |
| byte | 位元組 | 1byte | -128~127 |
| short | 短整數 | 2byte | -32768~32767 |
| int | 整數 | 4byte | -21億~21億 |
| long | 長整數 | 8byte | -263~263-1 |
| float | 單精度浮點數 | 4byte | 精準到小數第7位 |
| double | 雙精度浮點數 | 8byte | 精準到小數第15位 |
| char | 字元 | 2byte | 0~65535 |
| boolean | 布林值 | true/false | 實際大小依VM而不同 |
格式化列印 printf
如果想要列印文字跟數字合在一起的字串,printf() 是最佳的解決方式,printf如下使用
%f : 代表小數
%d : 代表整數
%s : 代表字串
%c : 代表字元
public static void main(String[] args) {
double price=12.5;
int qty=10;
System.out.printf("單價 = %.2f, 數量 : %d, 總價 : %.2f\n", price, qty, price*qty);
}
結果 :
單價 = 12.50, 數量 : 10, 總價 : 125.00
常用附加的功能有
%.2f //2 位小數 %4d //預留4 個空格 %,d //千分號
String
String.format 可以產生格式化字串,用法跟 printf 一樣,只是它是單純產生一字串,不會列印。
package net.ddns.mahaljsp;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
G.encoding();
Scanner si=new Scanner(System.in);
System.out.printf("請輸入單價 : ");
float price=si.nextFloat();
System.out.printf("請輸入數量 : ");
int qty=si.nextInt();
String total=String.format("單價 : %.2f, 數量 : %d, 總價 : %.2f", price, qty, price*qty);
System.out.println(total);
}
}
結果 :
請輸入單價 : 20.5
請輸入數量 : 10
單價 : 20.50, 數量 : 10, 總價 : 205.00
變數宣告
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。
近似值
底下因為精準度的關係會變成false
double x=0.3+0.3+0.3; System.out.println(x==0.9); 結果是 false
需改如下提高精準度就會變成 true
BigDecimal y=new BigDecimal("0.3");//請注意要用字串 "0.3"
y=y.add(y).add(y);
System.out.println(y.dobuleValue()==0.9);
常數
只要值一定義好就不可改變稱為常數,需在宣告前加上 final,如下
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 會升級成 float。
二個 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
