---
title: Java CH1-CH3
tags: Java, OCA, OCP, SE8, CH1-CH3
Date: 2019/03/17 1546
---
# Java SE8 筆記
## 程式語言的種類 - (1)
- 機器語言(I)
- 組合語言(II)
- 高階語言(III)
- 應用程式產生的語言、查詢語言(IV)
- 邏輯導向語言(V)
> 級數越高越接近人類的語言,
> 反之越接近電腦語言。
## 程式語言的種類 - (2)
- 編譯式 (Compilers)
- 檢查程式錯誤
- 在沒有錯誤的前提下,將原始碼翻譯成機器語言的程式檔案
- 直譯式 (Interpreters)
- 不會輸出可執行檔案
- 一個指令一個動作
- 執行效率低
- 適合在系統開發階段的程式除錯
## Java的特點
- 物件導向 (Object-oriented)
- 分散式 (Distributed)
- 多執行緒 (Muti-Thead)
- 垃圾收集 (Garbaege Collection)
- 例外處理 (Exception Handling)
## 事前準備
- [ORACLE_JDK 下載點](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
- [NetBeans IDE 下載點](https://netbeans.org/downloads/7.4/?pagelang=zh_TW)
1. 先安裝JDK,再裝IDE
2. 若Windows用戶需設定Java環境變數
3. 到JDK的預設安裝目錄下,把路徑複製下來
4. 接著對本機的圖示壓右鍵,點選內容
5. 在跳出的視窗做左側會有【進階系統設定】,點選
6. 接著再進階分頁中,右下角點選【環境變數】
7. 在使用者的【Path】修改
8. 在最尾端加上"; ",再貼上剛剛複製下來的JDK路徑
9. 按確定修改、儲存
> 以上是針對使用WINDOWS終端機編譯的情況[color=#db1a71]
## Ch1. 變數、資料型態
> 變數在程式中就像是有名字的容器,執行程式的時候,可以把資料暫時儲存在裡面
> 資料型態可以決定變數能存什麼樣的值
### 命名、宣告
- 設計者自行取的變數名稱稱為【Identifier試別字】
#### 命名規則
- 須以英文字母、"_"(底線)或是"$"開頭,之後可以包含數字
- 名稱最長255個字元,區分大小寫
- 不能使用關鍵字(Keyword)
### 變數屬性
- 名稱:就是前面說的【Identifier試別字】
- 位置:在電腦中存放此變數的記憶體位置
- 尺寸:所占用的記憶體空間,以byte為單位 ( 1byte = 8 bits )
- 型別:儲存資料的種類(型態)
- 值:記憶體位置中所存的資料
- 壽命:在執行期間,變數存在的時間。有的全程都在,有的在執行期間自動建立或由程式碼建立
- 範圍:那些程式碼可以存取此變數
### 變數宣告
- 【資料型態】【變數名稱】;
- 【資料型態】【變數名稱】, 【變數名稱】, ... ; (需要多個相同型態的變數時)
- 【資料型態】【變數名稱】= 【對應資料型態的值】;
### 資料型態
- 基本資料型態 (Primitive Data Type)
| Type | Min | Max | Size | Initial value |
| -------- | -------------- | ------------ | -------- | ------------- |
| byte | -128 | 127 | 1byte | 0 |
| short | -32768 | 32767 | 2byte | 0 |
| int | -2147483648 | 2147483647 | 4byte | 0 |
| long | -2^63 | 2^63-1 | 8byte | 0L |
| char | 0 | 65535 | 2byte | null |
| float | 1.40239846e-45 | 3.40282347e38| 32bit | 0.0F |
| double | 4.94065645841246544e-324 | 1.79769313486231570e308| 64bit | 0.0D |
| boolean | false | true | ------ | false |
- 整數字面值
- 八進位:以「0」為開頭,之後的每位數都是0 - 7的整數。
- 16進位:以「0x」或是「0X」為頭,之後的每位數都是0-9、a-f(A-F)。
- 字面值字尾
- L/l:表示此數值型態為long。
- F/f:表示此數值型態為float。
- D/d:表示此數值型態為double。
- 字面值加上底線
- SE7版可以使用「_」,若遇到很長的數字可以增加可讀性
- 字元(char)
- type:Unsigned 16bit Unicode set
- Unicode 是使用2個位元組餅是字元的,用來取代ASCII字元
- 跳脫字元
- $\b$:倒退刪除鍵(backspace)
- $\f$:FF換頁符號
- $\n$:LF換行符號
- $\r$:Enter鍵
- $\t$:Tab鍵
- $\'$:單引號
- $\"$:雙引號
## Ch2. 運算式
- ++(遞增)、- -(遞減)
- 有分前置和後置
- 前置:++i,代表先對i加1,再進行運算
- 後置:i++,代表先進行運算,再對i加1
- !(邏輯判斷的NOT)
- T => F
- F => T
- $<<、>>、>>>$
- $<<$:左移運算子
- op1 << op2,op1左移op2位元,最右邊補0
- $>>$:右移運算子
- op1 >> op2,op1右移op2位元,正數左邊補0,負數左邊補1
- $>>>$:無符右移運算子
- op1 >>> op2,op1右移op2位元,最左邊補0
- 位元運算子
- ~:位元的NOT
- &:位元的AND
- |:位元的OR
- ^:位元的XOR
- 邏輯運算子
- &&:邏輯的AND,當計算到第一個False時,之後的判斷式都忽略,又稱「Short-cut AND」
- ||:邏輯的OR,當計算到第一個True時,之後的判斷式都忽略,又稱「Short-cut OR」
### 資料型態轉換
- 型態的大小:double > float > long > int > char > short > byte
- 轉換方式
- 寬型基本別轉換(Widening Primitive Conversions)
- 預設的轉換方式:若兩個型別不一樣,系統會自動轉成較大的型別。
- 窄型基本別轉換(Narrowing Primitive Conversions)
- 需使用「型態轉換運算子」(Cast operator),強迫轉換資料型態。
## Ch3. 流程控制
### UML (Unified Modelling Language)
- 用來表示物件導向分析(OOA)和物件導向設計(OOD)的東西
- 簡單來說就是程式設計師用來規劃的程式藍圖
#### 圖例說明

---
### if / if else / if else if
```
if(判斷式){
程式碼
}
```

```
if(判斷式){
程式碼
}
else{
程式碼
}
```

```
if(判斷式){
程式碼
}
else if(判斷式){
程式碼
}
...
else{
程式碼
}
```

#### 條件敘述運算子(?:)
```
(判斷式) ? (True) : (False)
```
- 簡單來說,就是簡化版的 if else 啦
---
### switch case
```
switch(變數){
case 常數1:
其他程式碼...
break;
case 常數2:
其他程式碼...
break;
case 常數3:
其他程式碼...
break;
default:
其他程式碼...
break;
}
```

- 注意:break原則上在每個case下都應該寫上去,若沒有程式碼會自動執行到第一個break為止,然後跳出。
- default區塊,可寫可不寫,當前面的任一case都不滿足的情況下,會執行
- 變數可以是char、byte、short、int、Wrapper、Enumerated Type、String
---
### for-loop
```
for(變數; 判斷式; 變數遞增遞減){
程式碼...
}
```
- 執行順序:
1. 變數初始化(執行一次)
2. 判斷式是否成立 (不成立跳出迴圈)
3. 成立的情況下,執行程式碼
4. 變數遞增或遞減
5. 重複Step2~5
### while
```
while(判斷式){
程式碼...
}
```
- 執行順序
1. 判斷式是否成立 (不成立跳出迴圈)
2. 成立的情況下,執行程式碼
3. 重複Step1~2
- 注意:不像for會有自動遞增遞減,很容易陷入無限迴圈
### do while
```
do{
程式碼...
}while(判斷式);
```
- 執行順序
1. 先執行程式碼
2. 判斷式是否成立
3. 成立的情況下,回到Step1
4. 不成立跳出迴圈
- 注意:不像for會有自動遞增遞減,很容易陷入無限迴圈
- 注意:while(判斷式)後面記得加上『**;**』[color=#d15c38]
#### break / continue
- 只能使用在迴圈內
- break是跳離當前迴圈
- continue是略過當前步驟
```
for(int i=0;; i++){
if(i<10 && i%2==0){
continue;
}
else if(i>=10){
break;
}
System.out.printf(i + "\t");
}
```
- 輸出結果:1 3 5 7 9
- 當i是偶數的時候且小於10,會略過當前步驟,直接進入下一次
- 當i大於等於10時,會跳離整個for迴圈
### for each / for in
>用來簡化存取集合性的物件元素
>適用在 Array、Collection 等
- 我們先來看看一般的for-loop
```
int[] a = {1, 2, 3, 4, 5};
for(int i=0; i<a.length; i++){
System.out.printf(a[i] + " ");
}
```
- 輸出:1 2 3 4 5
- 再來看for-each
```
int[] a = {1, 2, 3, 4, 5};
for(int x:a){
System.out.printf(x + " ");
}
```
- 輸出:1 2 3 4 5
- 語法:```for(元素資料型別 區域變數 : 母體集合)```
---
- [ ]
---