--- 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)的東西 - 簡單來說就是程式設計師用來規劃的程式藍圖 #### 圖例說明 ![](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTakk_CSloYrDmrX8ivBQhoFTO84kS8nks1-hF9a6s_TN2N5fPPtQ) --- ### if / if else / if else if ``` if(判斷式){ 程式碼 } ``` ![](https://www.tutorialspoint.com/scala/images/scala_decision_making.jpg =300x250) ``` if(判斷式){ 程式碼 } else{ 程式碼 } ``` ![](https://i.imgur.com/m6284wE.jpg) ``` if(判斷式){ 程式碼 } else if(判斷式){ 程式碼 } ... else{ 程式碼 } ``` ![](https://static.javatpoint.com/cpages/images/elseifladder.png =500x300) #### 條件敘述運算子(?:) ``` (判斷式) ? (True) : (False) ``` - 簡單來說,就是簡化版的 if else 啦 --- ### switch case ``` switch(變數){ case 常數1: 其他程式碼... break; case 常數2: 其他程式碼... break; case 常數3: 其他程式碼... break; default: 其他程式碼... break; } ``` ![](https://beginnersbook.com/wp-content/uploads/2017/09/switch_case_flow_diagram_C.jpg =250x ) - 注意: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(元素資料型別 區域變數 : 母體集合)``` --- - [ ] ---