SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
Java SE 8 技術手冊第 4 章 - 認識物件
Report
Justin Lin
Follow
Technology / Community Evangelist at Free lancer
Aug. 13, 2014
•
0 likes
•
4,238 views
1
of
91
Java SE 8 技術手冊第 4 章 - 認識物件
Aug. 13, 2014
•
0 likes
•
4,238 views
Download Now
Download to read offline
Report
Technology
區分基本型態與類別型態 瞭解物件與參考的關係 從包裹器認識物件 以物件觀點看待陣列 認識字串的特性
Justin Lin
Follow
Technology / Community Evangelist at Free lancer
Recommended
Java SE 8 技術手冊第 3 章 - 基礎語法
Justin Lin
5.3K views
•
52 slides
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
3.4K views
•
74 slides
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
4.4K views
•
100 slides
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
11.6K views
•
44 slides
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
5.3K views
•
66 slides
CH1:Java平台概論
Justin Lin
1.2K views
•
41 slides
More Related Content
What's hot
Java data types, variables and jvm
Madishetty Prathibha
443 views
•
23 slides
Eloquent ORM
Shengyou Fan
34.7K views
•
36 slides
Java 8 lambda
Manav Prasad
2.2K views
•
32 slides
CH03:基礎語法
Justin Lin
527 views
•
48 slides
Yaml
Sabarinath Gnanasekar
986 views
•
26 slides
Java OOPS Concept
Richa Gupta
151 views
•
36 slides
What's hot
(20)
Java data types, variables and jvm
Madishetty Prathibha
•
443 views
Eloquent ORM
Shengyou Fan
•
34.7K views
Java 8 lambda
Manav Prasad
•
2.2K views
CH03:基礎語法
Justin Lin
•
527 views
Yaml
Sabarinath Gnanasekar
•
986 views
Java OOPS Concept
Richa Gupta
•
151 views
jpa-hibernate-presentation
John Slick
•
1.2K views
JVM Memory Management Details
Azul Systems Inc.
•
3.5K views
영속성 컨텍스트로 보는 JPA
경원 이
•
10.1K views
Maven introdução Muito Rápida
Rudson Kiyoshi Souza Carvalho
•
772 views
Ch12 Spring 起步走
Justin Lin
•
266 views
Spring mvc
Hamid Ghorbani
•
858 views
String Builder & String Buffer (Java Programming)
Anwar Hasan Shuvo
•
1.5K views
JavaScript for ABAP Programmers - 2/7 Data Types
Chris Whealy
•
3.6K views
Content Storage With Apache Jackrabbit
Jukka Zitting
•
21.7K views
Spring - Part 1 - IoC, Di and Beans
Hitesh-Java
•
1.3K views
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Justin Lin
•
19.2K views
Java and its features
Pydi Nikhil
•
801 views
JPA and Hibernate
elliando dias
•
5.7K views
Java SE 8 技術手冊第 9 章 - Collection與Map
Justin Lin
•
4.9K views
Viewers also liked
Java SE 8 技術手冊第 8 章 - 例外處理
Justin Lin
3.2K views
•
70 slides
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin
2.6K views
•
48 slides
Java SE 8 技術手冊第 6 章 - 繼承與多型
Justin Lin
3.5K views
•
78 slides
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
2.3K views
•
50 slides
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
2.9K views
•
101 slides
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
2.8K views
•
84 slides
Viewers also liked
(20)
Java SE 8 技術手冊第 8 章 - 例外處理
Justin Lin
•
3.2K views
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin
•
2.6K views
Java SE 8 技術手冊第 6 章 - 繼承與多型
Justin Lin
•
3.5K views
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
•
2.3K views
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
•
2.9K views
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
•
2.8K views
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
•
3.7K views
Java SE 8 技術手冊第 13 章 - 時間與日期
Justin Lin
•
3.4K views
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
•
5.6K views
Java SE 8 技術手冊第 7 章 - 介面與多型
Justin Lin
•
2.7K views
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
•
2.2K views
3D 之邏輯與美感交會 - OpenSCAD
Justin Lin
•
1.4K views
淺談 Groovy 與 Gradle
Justin Lin
•
8.4K views
從 REPL 到 IDE
Justin Lin
•
2.3K views
Java 8 與 retrolambda
Justin Lin
•
5K views
資料結構
Justin Lin
•
1.8K views
從模組到類別
Justin Lin
•
1.7K views
流程語法與函式
Justin Lin
•
2.6K views
Python 起步走
Justin Lin
•
7.2K views
進階主題
Justin Lin
•
3K views
Similar to Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Justin Lin
3.2K views
•
91 slides
認識物件
Justin Lin
1.1K views
•
97 slides
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
2.5K views
•
68 slides
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
2.6K views
•
75 slides
2, object oriented programming
ted-xu
290 views
•
31 slides
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
2.2K views
•
80 slides
Similar to Java SE 8 技術手冊第 4 章 - 認識物件
(20)
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Justin Lin
•
3.2K views
認識物件
Justin Lin
•
1.1K views
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
•
2.5K views
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
•
2.6K views
2, object oriented programming
ted-xu
•
290 views
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
•
2.2K views
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Justin Lin
•
2.5K views
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
•
2.2K views
使用 Eloquent ORM
Shengyou Fan
•
11.4K views
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
•
1.9K views
SCJP ch17
r82093403
•
669 views
12, string
ted-xu
•
397 views
4. 使用物件
Justin Lin
•
174 views
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
•
3.6K views
Ch07 使用 JSTL
Justin Lin
•
155 views
型態與運算子
Justin Lin
•
1.8K views
輸入輸出
Justin Lin
•
578 views
Excel vba實務應用 第4天
明和 蔡
•
430 views
Python面向对象开发基础篇
modou li
•
1.2K views
Ruby Rails 老司機帶飛
Wen-Tien Chang
•
2.1K views
More from Justin Lin
Ch14 簡介 Spring Boot
Justin Lin
861 views
•
22 slides
Ch13 整合 Spring MVC/Security
Justin Lin
279 views
•
58 slides
Ch11 簡介 JavaMail
Justin Lin
155 views
•
8 slides
Ch10 Web 容器安全管理
Justin Lin
152 views
•
30 slides
Ch09 整合資料庫
Justin Lin
230 views
•
92 slides
Ch08 自訂標籤
Justin Lin
131 views
•
54 slides
More from Justin Lin
(20)
Ch14 簡介 Spring Boot
Justin Lin
•
861 views
Ch13 整合 Spring MVC/Security
Justin Lin
•
279 views
Ch11 簡介 JavaMail
Justin Lin
•
155 views
Ch10 Web 容器安全管理
Justin Lin
•
152 views
Ch09 整合資料庫
Justin Lin
•
230 views
Ch08 自訂標籤
Justin Lin
•
131 views
Ch06 使用 JSP
Justin Lin
•
246 views
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
200 views
Ch04 會話管理
Justin Lin
•
235 views
Ch03 請求與回應
Justin Lin
•
231 views
Ch02 撰寫與設定 Servlet
Justin Lin
•
337 views
CH1. 簡介 Web 應用程式
Justin Lin
•
1.1K views
14. 進階主題
Justin Lin
•
401 views
13.並行、平行與非同步
Justin Lin
•
234 views
12. 除錯、測試與效能
Justin Lin
•
148 views
11. 常用內建模組
Justin Lin
•
140 views
10. 資料永續與交換
Justin Lin
•
148 views
9. 資料結構
Justin Lin
•
285 views
8. open() 與 io 模組
Justin Lin
•
243 views
7. 例外處理
Justin Lin
•
114 views
Java SE 8 技術手冊第 4 章 - 認識物件
2.
認識物件 學習目標 • 區分基本型態與類別型態 • 瞭解物件與參考的關係 •
從包裹器認識物件 • 以物件觀點看待陣列 • 認識字串的特性
3.
定義類別
4.
定義類別
5.
定義類別
6.
定義類別 • 可以觀察這個範例中,為個別物件指定資料 成員 的程式碼值
,你會發現是類似的 .. • 如果想在建立物件時,一併進行某個初始流 程,像是指定資料成員 ,則可以定義建構值 式( Constructor ),建構式是與類別名稱同 名的方法( Method )
7.
定義類別
8.
使用標準類別 • 使用 java.util.Scanner
9.
使用標準類別 • 1.0 –
0.8 的結果是?答案不是 0.2 ,而是 0.19999999999999996 ! • Java (包括其它程式語言)遵合 IEEE 754 浮 點數演算( Floating-point arithmetic )規範
10.
使用標準類別 • 使用 java.math.BigDecimal
11.
使用標準類別 • 呼叫 equals()
比較兩個 BigDecimal 實 質上是否相同
12.
物件指定與相等性 • 在 Java
中有兩大型態系統,基本型態與類別 型態,這很令人困擾… • 若不討論底層記憶體實際運作,初學者就必 須區分 = 與 == 運算用於基本型態與類別型 態的不同
13.
物件指定與相等性 • 當 =
用於基本型態時,是將 複製給變數值 • == 用於基本型態時,是比較兩個變數儲存的 是否相同值
14.
物件指定與相等性 • 如果你在操作物件, =
是用在指定參考名稱 參考某個物件 • == 是比較兩個參考名稱是否參考同一物件 • 白話來說, = 是用在將某個名牌綁到某個物 件,而 == 是用在比較兩個名牌是否 到同綁 一物件
15.
物件指定與相等性
16.
物件指定與相等性
17.
物件指定與相等性 • == 用在物件型態,是比較兩個名稱是否參考 同一物件,而
!= 正好相反,是比較兩個名 稱是否沒參考同一物件 • 實際上, equals() 可以自行定義如何比較 兩物件的內含值
18.
包裹基本型態 • 使用基本型態目的在於效率 • 然而更多時候,會使用類別建立實例,因為 物件本身可以攜帶更多資訊 •
如果要讓基本型態像物件一樣操作,可以使 用 Long 、 Integer 、 Double 、 Float 、 Boolean 、 Byte 等包裹器( Wrapper )類 別來包裹( Wrap )基本型態
19.
包裹基本型態
20.
自動裝箱、拆箱 • 從 J2SE
5.0 之後提供了自動裝箱( Auto boxing )功能,可以如下包裹基本型態: • 若使用自動裝箱功能來改寫一下 IntegerDemo 中的程式碼:
21.
自動裝箱、拆箱 • 自動裝箱運用的方法還可以如下: • 也可以使用更一般化的
Number 類別來自動 裝箱,例如:
22.
自動裝箱、拆箱 • J2SE 5.0
後可以自動裝箱,也可以自動拆箱 ( Auto unboxing ) • 在運算時也可以進行自動裝箱與拆箱:
23.
自動裝箱、拆箱 • 再來看一個例子:
24.
裝箱的 幕內 • 自動裝箱與拆箱的功能事實上是編譯器蜜糖 (
Compiler sugar )
25.
裝箱的 幕內 • 例如下面的程式是可以通過編譯的: NullPointerException
26.
裝箱的 幕內 • 如果你如下撰寫,結果會是如何?
27.
裝箱的 幕內 • 如果你如下撰寫,結果會是如何?
28.
裝箱的 幕內 • 察查
JDK 資料夾 src.zip 中的 java/lang 資料夾中的 Integer.java ,你會看到 valueOf() 的實作內容: • IntegerCache.low 預設 是值 - 128 , IntegerCache.high 預設 是值 127
29.
裝箱的 幕內 • IntegerCache.low
預設 是值 -128 ,執行 時期無法更改 • IntegerCache.high 預設 是值 127 ,可以 於 動啟 JVM 時,使用系統屬性 java.lang.Integer.IntegerCache.h igh 來指定
30.
裝箱的 幕內 • 別使用
== 或 != 來比較兩個物件實質內容值 是否相同(因為 == 與 != 是比較物件參考) ,而要使用 equals()
31.
陣列基礎 • 若要用程式記錄 Java
小考成績,若有 10 名 學生 …
32.
陣列基礎 • 索引由 0
開始 • 如果存取超出索引範圍,就會 出拋 ArrayIndexOutOfBoundsException
33.
陣列基礎 • 如果需求是循序地從頭至尾取出陣列 ,從值 JDK5
之後,有了更方便的增強式 for 迴圈 ( Enhanced for loop )語法
34.
陣列基礎 • 如果要設定 給陣列中某個元素,也是透過值 索引:
35.
陣列基礎 • 宣告二維陣列
36.
陣列基礎 • 可以用增強式 for
迴圈來改寫會比較簡潔:
37.
操作陣列物件 • 可以使用 new
關鍵字指定長度來建立陣列
38.
操作陣列物件 • 可以使用 java.util.Arrays
的 fill() 方法來設定新建陣列的元素值
39.
操作陣列物件 • 想在 new
陣列時一併指定初始值
40.
操作陣列物件 • 物件是根據類別而建立的實例,代表建立陣 列物件的類別定義在 ?答案是由哪
JVM 動態 產生。
41.
操作陣列物件 • 看看以下這個片段會顯示什麼?
42.
操作陣列物件 • 如果想用 new
建立二維陣列:
43.
操作陣列物件 • 應該可以知道為何要如下走訪二維陣列了:
44.
操作陣列物件 • 那麼這段增強式 for
語法是怎麼回事 ?呢
45.
操作陣列物件 • 如果使用 new
配置二維陣列後想要一併指定 初 :值
46.
操作陣列物件 • 也可以建立不規則陣列:
47.
操作陣列物件 • 範例中 new
int[2][] 僅提供第一個 [] 數 值,這表示 arr 參考的物件會有兩個索引, 但暫時參考至 null
48.
操作陣列物件 • 接著分別讓 arr[0]
參考至長度為 5 ,而元 素 為值 1 、 2 、 3 、 4 、 5 的陣列,以及 arr[0] 參考至長度為 3 ,而元素 為值 1 、 2 、 3 的陣列
49.
操作陣列物件 • 這麼建立陣列也是合法的:
50.
操作陣列物件 • 類別型態建立的陣列: • 上面這個片段建立了幾個
Integer 物件呢 ?
51.
操作陣列物件 • 每個索引其實都是 Integer
型態,可以讓 你參考至 Integer 實例
52.
操作陣列物件 • 上面這個範例也可以結合自動裝箱語法
53.
操作陣列物件 • 如果事先知道 Integer
陣列每個元素要放 什麼,可以如下: • 如果是 JDK5 以上,不結合自動裝箱來簡化 程式撰寫,就有點可惜了
54.
操作陣列物件 • 以下 Integer
二維陣列,建立了幾個 Integer 實例?
55.
陣列複製 • 以下這個並非陣列複製: • 要作陣列複製,基本作法是另行建立新陣列
56.
陣列複製 • 可以使用 System.arraycopy()
方法,這 個方法會使用原生方式複製每個索引元素, 比自行使用迴圈來得快:
57.
陣列複製 • 如果使用 JDK6
以上,還有個更方便的 Arrays.copyOf() 方法,你不用另行建立 新陣列, Arrays.copyOf() 會幫你建立
58.
陣列複製 • 事先建立的陣列長度不 怎麼辦?那就只好夠 建立新陣列,將原陣列內容複製至新陣列
59.
陣列複製 • 類別型態宣告的陣列則要注意參考的行為
60.
陣列複製
61.
陣列複製 • 實際上迴圈中僅將 c1
每個索引處所參考的 物件,也給 c2 每個索引來參考,並沒有實 際複製出 Clothes 物件 • 術語上來說,這叫作複製參考,或稱這個行 為是淺層複製( Shallow copy ) • 無論是 System.arraycopy() 或 Arrays.copyOf() ,用在類別型態宣告的 陣列時,都是執行淺層複製
62.
陣列複製
63.
陣列複製 • 這個範例執行所謂深層複製( Deep
copy )
64.
字串基礎 • 在 Java
中,字串是 java.lang.String 實 例,用來包裹字元陣列 • 可以用 "" 包括一串字元來建立字串
65.
字串基礎 • 已經有一個 char[]
陣列,也可以使用 new 來建構 String 實例 • 也可以使用 String 的 toCharArray() 方 法,以將字串以 char[] 陣列傳回:
66.
字串基礎 • 可以使用 +
運算來串接字串
67.
字串基礎 • 要將輸字串轉換為整數、浮點數等基本型態 • 如果無法剖析傳入的
String 實例,則會拋出 NumberFormatException
68.
字串基礎
69.
字串基礎 • 程式進入點 main()
中的 String[] args • 命令列引數( Command line arguments )
70.
字串特性 • Java 字串有一些必須注意的特性: –
字串常量與字串池 – 不可變動( Immutable )字串
71.
字串特性 • 以下會顯示 true
或 false ? • 底下這個程式碼 ?呢
72.
字串特性 • 以 ""
包括的字串,只要內容相同(序列、大 小寫相同),無論在程式碼中出現幾 次, JVM 都只會建立一個 String 實例,並 在字串池( String pool )中維護
73.
字串特性 • 用 ""
寫下的字串稱為字串常量( String literal ),既然你用 "Justin" 寫死了字串 內容,基於節省記憶體考量,自然就不用為 這些字串常量分別建立 String 實例
74.
字串特性
75.
字串特性 • 如果想比較字串實際字元內容是否相同,不 要使用 ==
,要使用 equals()
76.
字串特性 • 字串物件一旦建立,就無法更動物件內容 • 那麼使用
+ 串接字串是怎麼達到的?
77.
字串特性 • 使用 +
串接字串會產生新的 String 實例 • 這並不是告訴你,不要使用 + 串接字串 • 只是在告訴你,不要將 + 用在重複性的串接 場合,像是迴圈中或遞迴時使用 + 串接字串
78.
字串特性 • 使用程式顯示下圖的結果,你會怎麼寫 ?呢
79.
字串特性
80.
字串特性
81.
字串特性 • 請問以下會顯示 true
或 false ?
82.
字串編碼 • 你寫的 .java
原始碼 案是什麼編碼?檔 • 明明你的 Windows 純文字編輯器是 Big5 編 碼,為什麼會寫下的字串在 JVM 中會是 Unicode ?
83.
字串編碼 • 如果你的作業系統預設編碼是 Big5
,而你的 文字編輯器是使用 Big5 編碼
84.
字串編碼 • 產生的 .class
案,使用反組譯工具還原的檔 程式碼中,會看到以下的內容: • JVM 在載入 .class 之後,就是讀取 Unicode 編碼並產生對應的字串物件
85.
字串編碼 • 使用 javac
指令沒有指定 -encoding 選項時 ,會使用作業系統預設編碼 • 如果你的文字編譯器是使用 UTF-8 編碼,那 麼編譯時就要指定 -encoding 為 UTF-8
86.
詢查 Java API
文件
87.
詢查 Java API
文件
88.
詢查 Java API
文件
89.
詢查 Java API
文件
90.
詢查 Java API
文件
91.
詢查 Java API
文件