Java SE8 筆記

程式語言的種類 - (1)

  • 機器語言(I)
  • 組合語言(II)
  • 高階語言(III)
  • 應用程式產生的語言、查詢語言(IV)
  • 邏輯導向語言(V)

    級數越高越接近人類的語言,
    反之越接近電腦語言。

程式語言的種類 - (2)

  • 編譯式 (Compilers)
    • 檢查程式錯誤
    • 在沒有錯誤的前提下,將原始碼翻譯成機器語言的程式檔案
  • 直譯式 (Interpreters)
    • 不會輸出可執行檔案
    • 一個指令一個動作
    • 執行效率低
    • 適合在系統開發階段的程式除錯

Java的特點

  • 物件導向 (Object-oriented)
  • 分散式 (Distributed)
  • 多執行緒 (Muti-Thead)
  • 垃圾收集 (Garbaege Collection)
  • 例外處理 (Exception Handling)

事前準備

  1. 先安裝JDK,再裝IDE

  2. 若Windows用戶需設定Java環境變數

  3. 到JDK的預設安裝目錄下,把路徑複製下來

  4. 接著對本機的圖示壓右鍵,點選內容

  5. 在跳出的視窗做左側會有【進階系統設定】,點選

  6. 接著再進階分頁中,右下角點選【環境變數】

  7. 在使用者的【Path】修改

  8. 在最尾端加上"; ",再貼上剛剛複製下來的JDK路徑

  9. 按確定修改、儲存

    以上是針對使用WINDOWS終端機編譯的情況

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)的東西
  • 簡單來說就是程式設計師用來規劃的程式藍圖

圖例說明

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →


if / if else / if else if

    if(判斷式){
        程式碼
    }

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

    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(判斷式)後面記得加上『;

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(元素資料型別 區域變數 : 母體集合)


  • [ ]