SlideShare a Scribd company logo
1 of 53
Download to read offline
1
基礎語法
學習目標
• 認識型態與變數
• 學習運算子基本使用
• 瞭解型態轉換細節
• 運用基本流程語法
• 使用jshell
2
型態
• Java可區分為兩大型態系統:
– 基本型態(Primitive type)
– 類別型態(Class type)
3
型態
• 整數
– 可細分為short整數(佔2個位元組)、int整數
(佔4個位元組)與long整數(佔8個位元組)
• 位元組
– byte型態,長度就是一個位元組
• 浮點數
– 可分為float浮點數(佔4個位元組)與double
浮點數(佔8個位元組)
4
型態
• 字元
– char型態用來儲存‘A’、‘B’、‘林’等字
元符號
– 在JDK9中,Java的字元採Unicode 8.0編碼
– JVM實作採UTF-16 Big Endian,所以每個字元型
態佔兩個位元組,中文字元與英文字元在Java中
同樣都是用兩個位元組儲存
• 布林
– boolean型態可表示true與false
5
型態
• 各種型態可儲存的數值範圍,可以透過API來
得知:
6
型態
• 單行註解//
• 多行註冊/**/
7
型態
• 以下使用多行註解的方式是不對的:
8
• 在JDK9內建了jshell,這是Java版的
REPL(Read-Eval-Print Loop)
9
• System.out.printf()是什麼?
10
11
變數
• 想像一下程式中輸出10的部份很多,如果想
要一次把它改為20 …
12
變數
• 想要宣告何種型態的變數,就使用byte、short、
int、long、float、double、char、boolean
等關鍵字來宣告
• 變數在命名時有一些規則,它不可以使用數字作為
開頭,也不可以使用一些特殊字元,像是*、&、^、
%之類的字元
• 變數名稱不可以與Java 的關鍵字(Keyword)同名,
例如int、float、class等就不能用來作為變數
• 變數名稱也不可以與Java保留字(Reversed word)
同名,例如goto就不能用來作為變數名稱
13
變數
• 在Java領域中的命名慣例(Naming
convention),通常會以小寫字母開始,並在
每個單字開始時第一個字母使用大寫,稱為
駝峰式(Camel case)命名法
14
變數
• 在Java中宣告一個區域變數,就會為變數配
置記憶體空間,但不會給這塊空間預設值
• 不可以宣告區域變數後未指定任何值給它之
前就使用變數
15
變數
• 如果在指定變數值之後,就不想再改變變數
值,可以在宣告變數時加上final限定
• 如果後續撰寫程式時,自己或別人不經意想
修改final變數,就會出現編譯錯誤
16
變數
• 字面常數(Literal constant)
17
變數
18
變數
• Java SE 7字面常量表示法
19
運算子
20
運算子
• %運算子計算的結果是除法後的餘數
21
運算子
• 比較運算子(Comparison operator)
22
運算子
• 條件運算子(Conditional operator)
23
運算子
• 邏輯運算
24
運算子
• 捷徑運算(Short-Circuit Evaluation)
– 因為AND只要其中一個為假,就可以判定結果為
假,所以對&&來說,只要左運算元(Operand)
評估為false,就會直接傳回false,不會再去
運算右運算元
– 因為OR只要其中一個為真,就可以判定結果為
真,所以對||來說,只要左運算元評估為true,
就會直接傳回true,就不會再去運算右運算元
25
運算子
• 除數為0會發生ArithmeticException,
代表除0的錯誤,以下運用&&捷徑運算避免
了這個問題:
26
運算子
• 位元運算
27
運算子
• 補數運算是將所有位元0變1,1變0。例如
00000001經補數運算就會變為11111110
28
運算子
• 左移(<<)與右移(>>)
29
運算子
• 遞增、遞減運算
30
運算子
31
運算子
• 指定運算
32
型態轉換
• 這個片段編譯時沒有問題…
• 如果你寫了個程式片段 …
33
型態轉換
• 在程式中寫下一個浮點數時,編譯器預設會
使用double型態
• 編譯器會告知想將double長度的資料指定給
float型態變數,會因為8個位元組資料要放
到4個位元組空間,而遺失4個位元組的資料
34
型態轉換
• 兩種方式可以避免這個錯誤…
• 使用(float)語法告訴編譯器,你就是要將
double型態的3.14指定給float變數,別再
囉嗦了
• 後果自負…遺失精度而發生程式錯誤了,那
絕不是編譯器的問題
35
型態轉換
• 這沒有問題 …
• 但…
36
型態轉換
• 程式中寫下一個整數時,預設是使用不超過
int型態長度
• 2147483648超出了int型態的長度
• 直接告訴編譯器,用long來配置整數的長度,
也就是在數字後加上個L
37
型態轉換
• 程式中寫下一個整數時,預設是使用不超過
int型態長度
• 不過這樣不行:
38
型態轉換
• 如果運算式中包括不同型態數值,則運算時
以長度最長的型態為主,其它數值自動提昇
(Promote)型態
• a是int型態,而寫下的3.14預設是double,
所以a的值被提至double空間進行運算
39
型態轉換
• 如果運算元都是不大於int的整數,則自動
全部提昇為int型態進行運算
• int的運算結果要放到short,編譯器就又
會囉嗦遺失精度的問題
40
型態轉換
• 你要告訴編譯器,就是要將int的運算結果
丟到short,請它住嘴:
• 這次怎麼又遺失精度?
41
型態轉換
• b是long型態,於是a也被提至long空間中
作運算,long的運算結果要放到int變數c,
自然就會被編譯器囉嗦精度遺失了
• 如果這真的是你想要的,那就叫編譯器住嘴
吧!
42
型態轉換
• 以下你覺得會顯示多少?
• 答案是3,而不是3.333333....,因為10與3會
在int長度的空間中作運算
43
型態轉換
• 在玩弄語法?
• count + 1 > Integer.MAX_VALUE永遠
不會成立
44
流程控制
• if..else條件式
45
流程控制
• 如果if或else中只有一行陳述句,則{與}
可以省略
• 不過為了可讀性與可維護性而言,現在建議
是就算只有一行陳述句,也要撰寫{與}明確
定義範圍
46
流程控制
• 不過以下情況倒是省略{與}後比較有可讀性
47
流程控制
48
流程控制
• switch條件式
49
流程控制
• for迴圈
50
流程控制
• while迴圈
51
流程控制
• do..while迴圈
52
流程控制
• break可以離開目前switch、for、while、
do..while的區塊
• 使用於迴圈,break會結束區塊執行,而
continue只會略過之後陳述句,並回到迴
圈區塊開頭進行下一次迴圈
53

More Related Content

What's hot

Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Justin Lin
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Justin Lin
 
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用APIJustin Lin
 
3, operators
3, operators3, operators
3, operatorsted-xu
 
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Justin Lin
 
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註Justin Lin
 
5. 建構式、原型與類別
5. 建構式、原型與類別5. 建構式、原型與類別
5. 建構式、原型與類別Justin Lin
 
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programmingted-xu
 
4. 使用物件
4. 使用物件4. 使用物件
4. 使用物件Justin Lin
 
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Justin Lin
 
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計Justin Lin
 
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Justin Lin
 
Js 函数 function学习笔记
Js 函数 function学习笔记Js 函数 function学习笔记
Js 函数 function学习笔记keke302
 
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJustin Lin
 
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJustin Lin
 
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJava SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJustin Lin
 
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型Justin Lin
 

What's hot (20)

Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
 
資料結構
資料結構資料結構
資料結構
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
 
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
 
3, operators
3, operators3, operators
3, operators
 
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
 
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
 
5. 建構式、原型與類別
5. 建構式、原型與類別5. 建構式、原型與類別
5. 建構式、原型與類別
 
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programming
 
4. 使用物件
4. 使用物件4. 使用物件
4. 使用物件
 
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
 
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
 
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
 
進階主題
進階主題進階主題
進階主題
 
SCJP ch17
SCJP ch17SCJP ch17
SCJP ch17
 
Js 函数 function学习笔记
Js 函数 function学习笔记Js 函数 function学习笔记
Js 函数 function学习笔记
 
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
 
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
 
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJava SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
 
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型
 

More from Justin Lin

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤Justin Lin
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTLJustin Lin
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSPJustin Lin
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Justin Lin
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理Justin Lin
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletJustin Lin
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式Justin Lin
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題Justin Lin
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步Justin Lin
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能Justin Lin
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組Justin Lin
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換Justin Lin
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構Justin Lin
 

More from Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
 

基礎語法