*建立JAR檔案
- 將.class檔案依造宣告的package,使用GZIP 格式壓縮, 並指定副檔名為.jar
- 設定manifest.mf檔案內容(專案目錄中建立meta-inf的目錄, 並在目錄內設定)
- Main-Class
- Main-Class: com.max.main.Hello
- 在Main-Class: 後面要空格
- Class-Path
Lab:
建立一個檔案
abc.txt
當成manifest.mf
內容如下 (Hello後面要換行)
Main-Class:
com.max.main.Hello
在類別的最上層目錄下指令(在
com的上一層),
目前該目錄下有 abc.txt
以及 com
目錄
abc.txt
com
jar
cvfm test.jar
abc.txt .
- test.jar 為輸出的 jar檔案名稱
- abc.txt 為 manifest.mf 檔案
- . 代表目前的目錄, 在windows 實作上差了一個目錄層級, 在linux上製作是在現行目錄下
測試建立的
.jar
檔案
java
-jar test.jar
*設定classpath
- 可以在編譯或執行的時候加上 -classpath設定指定JRE以外的類別程式庫
- 或是加上CLASSPATH環境變數
- 或是在JAR檔案中的mainifest.mf內容加上Class-Path的設定
Lab:
Netbeans
執行 Netbeans
(發現沒有專案,
原來在linux底下不是只裝
netbeans
就好了,
要裝 netbeans-java
…. )
以後專案放在SCJP/exercise
下面
在 Netbeans
下建立一個專案測試
Tips
組合鍵
- Tab 用來展開 Code Template
- 例如 sout 然後按 tab 按鍵
- Crtl + Space 程式碼的輔助功能
- Shift + F6 Run File
在 Libraries
上面 可以使用 滑鼠右鍵 Add
JAR / Folder 來新增 函式庫
Notes:
- 在eclipse 內使用 Alt + / 可以達到 Tab or Ctrl + Space 的效果
*Chapter
6 運算子與運算式
*基本型別的提升
- 用 = 將右邊的結果指派給左邊的變數
- 變數名稱=值 | 另一個變數 | 運算式 | 方法的回傳結果
-
- byte –> short -> char -> int -> long -> float -> double
*基本型別的轉型
- 指派時, 若等號左邊的型別小於右邊的時候, 則需要將右邊的資料轉型(Casting), 否則會出現編譯錯誤
- possible loss of precision (可能會失去精確度)
*運算子(Operator)
Notes:
- 位元運算子:先轉成2進位再運算
*算術(Arithmetic)運算子與計算式
- 提供數字元素的常用計算功能: + - * / %
- Java 運算的最小的型別是int (元素型別小於int 都會被提升為 int [例如 byte/short/char])
- Java 算術運算式結果的型別不是依造執行時期實際計算結果來決定, 也不是依照等號左邊的型別來決定, 而是根據運算式中所參與的運算元的型別來決定.
- 例如 byte a=1, b=1, c=a+b;
- 上述的 a, b, c 都是 byte 型別, 但是 a+b 是運算式, 所以就會被提升為int
- 也就是 byte c = int a + int b //這樣會有編譯錯誤, 因為喪失精確度
- 這樣會喪失精確度 possible loss of precision
- 所以要進行轉型的動作, 才不會喪失精確度
- 結果要寫成 byte c = (byte) (a+b)
– Break
–
*遞增/遞減
運算子
- 放在右邊就是後置
- 先輸出後遞增 a++
- 放在左邊就是前置
- 先遞增後輸出 ++a
*邏輯(Logical)運算子
- && 與 || 為 Short-cut 運算子, 一般放在兩個運算式之間.
- 算式1 && 算式2
- 算式1 || 算式2
- 算式1 為假才會執行算式2
*位移運算子
- 將整數轉為2進位, 然後將資料向左或是向右位移
- java 用第一個 bit 來代表 + 或是 -
- 32 << 2
- 32 * 2的2次方 = 32 * 4 = 128
- 右移分為保留正負號(Right-shift) 以及 不保留正負號(Unsigned Right-shift)(一律都補上0)
*字串運算子
- 物件跟字串串接, java 會自動呼叫他們的toString()
- 任何型別的資料與字串相加時, 都會先轉為字串
- 加號是從左到右取值
例如
System.out.println("111"+222+333);
//裏面有字串,
所以先轉成字串,後面的
222+333就不會運算
System.out.println(111+"222"+333);
//裏面有字串,
所以先轉成字串
System.out.println(111+222+"333");
//由於加號是從左到右,
還沒碰到字串,所以會先進行
111+222
在列出333
輸出結果為
666
111222333
111222333
333333
Lab
: java 運算子
int
i = 1;
System.out.println("i="+i);
System.out.println("before
i++");
System.out.println("Do
i++ and i="+i++);
System.out.println("after
i++");
System.out.println("i="+i);
System.out.println("Do
--i");
System.out.println("i="+--i);
i
= 128 ^ 5;
//
128 = 10000000
//
5 = 00000101
//進行互斥運算
10000101
System.out.println(i);
i
>>=3;
System.out.println(i);
*Chapter
7 決策判斷與迴圈結構
*
if … else
- if 的語法不一定要搭配 else
- java 沒有then 關鍵字
*if
… else if … else
- else if 的數量沒有限制
*switch
… case
- switch 可以接受
- int 的相容型別(byte/char/short/int)
- enum
- String (Java SE 7.0 後面才開始支援)
- case 可以有 0 到多個
- default 是 case 比對不到就會跑到 default
- break 用來跳出 switch, 如果沒有 break 就會往下執行
例如
int
type = 1;
switch(type)
{
case
1:
System.out.println("A");
System.out.println("B");
System.out.println("C");
System.out.println("D");
System.out.println("E");
break;
// jump out
case
2:
System.out.println("A");
System.out.println("B");
System.out.println("C");
System.out.println("D");
break;
case
3:
System.out.println("A");
System.out.println("B");
System.out.println("C");
break;
default:
System.out.println("A");
System.out.println("B");
break;
}
以上的作法每一個case
的順序不會影響後面的結果,
但是會有很多重複的部份.
也可以改成
int
type = 1;
switch(type)
{
case
1:
System.out.println("A");
case
2:
System.out.println("B");
case
3:
System.out.println("C");
default:
System.out.println("D");
System.out.println("E");
}
但是用以上的方式,
case 排列的順序就很重要,
沒有break
程序會一直往下執行
上面的 int
type = 1; 也可以換成
int
type = Integer.parseInt(args[0]); //Just can
use it for command line to receive
沒有留言:
張貼留言