<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-5006045349284488376</atom:id><lastBuildDate>Fri, 01 Nov 2024 06:54:39 +0000</lastBuildDate><category>Java</category><category>SCJP</category><category>認證筆記</category><category>心情</category><title>Kevin's World!</title><description></description><link>http://kevin-view.blogspot.com/</link><managingEditor>noreply@blogger.com (Kevin Lee)</managingEditor><generator>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle/><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5006045349284488376.post-3295831787735769830</guid><pubDate>Mon, 12 May 2008 06:54:00 +0000</pubDate><atom:updated>2008-05-12T23:57:17.248+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">SCJP</category><category domain="http://www.blogger.com/atom/ns#">認證筆記</category><title>SCJP - 自修重點筆記與心得 (7)</title><description>&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;&lt;1-5-5&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Enums 的宣告&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Java 5.0中的 enum (列舉清單)可以對變數的值加以限制，只能從列舉清單中選擇某一個值。使用 enum 可以減少程式內的臭蟲。&lt;/li&gt;&lt;li&gt;enum 可以被宣告成它自己的獨立類別，或類別成員，然而它們&lt;span style="font-weight: bold;"&gt;不能&lt;/span&gt;被宣告在函式內！&lt;/li&gt;&lt;li&gt;若 enum 被宣告成獨立類別，則它只能使用 public 和預設的存取等級。&lt;/li&gt;&lt;li&gt;enum 宣告後面的分號，是&lt;span style="font-weight: bold;"&gt;非必須的&lt;/span&gt;。&lt;/li&gt;&lt;li&gt;每一個 enum 所列舉的項目，事實上都是 enum 的實體，可以在任何 enum 型別上，藉由呼叫 value() 這個函式，一一取出 enum 的值。&lt;/li&gt;&lt;li&gt;宣告的範例如下：&lt;ol&gt;&lt;li&gt;獨立類別宣告～&lt;br /&gt;enum ClothesSize {S, M, L};  //可加分號&lt;br /&gt;&lt;br /&gt;class Clothes {&lt;br /&gt;　ClothesSize size;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class ClothesTest {&lt;br /&gt;　public static void main(String[] args) {&lt;br /&gt;　　Clothes goods = new Clothes();&lt;br /&gt;　　goods.size = ClothesSize.M;&lt;br /&gt;　}&lt;br /&gt;}&lt;br /&gt;&lt;/li&gt;&lt;li&gt;類別成員宣告～&lt;br /&gt;class Clothes {&lt;br /&gt;　enum ClothesSize {S, M, L}  //可不加分號&lt;br /&gt;　ClothesSize size;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class ClothesTest {&lt;br /&gt;　public static void main(String[] args) {&lt;br /&gt;　　Clothes goods = new Clothes();&lt;br /&gt;　　goods.size = Clothes.ClothesSize.M;&lt;br /&gt;　}&lt;br /&gt;}&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;宣告 enum 的建構子、函式和變數&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;事實上，enum 是一種特殊的類別，所以除了可以利用它來列舉常數之外，還可以對它增加建構子、實體變數、函式和一些被稱為&lt;span style="font-weight: bold;"&gt;常數特定類別本體&lt;/span&gt;(constant specific class body)的非常奇怪的東西。&lt;/li&gt;&lt;li&gt;例：&lt;br /&gt;enum ClothesSize {&lt;br /&gt;　S(32), M(34), L(36);&lt;br /&gt;　//會自動呼叫傳入 int 的建構子&lt;br /&gt;&lt;br /&gt;　ClothesSize(int no) {&lt;br /&gt;　　this.no = no;&lt;br /&gt;　}&lt;br /&gt;&lt;br /&gt;　private int no;&lt;br /&gt;　public int getNo() {&lt;br /&gt;　　return no;&lt;br /&gt;　}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Clothes {&lt;br /&gt;　ClothesSize size;&lt;br /&gt;&lt;br /&gt;　public static void main(String[] args) {&lt;br /&gt;　　Clothes goods1 = new Clothes();&lt;br /&gt;　　goods1.size = ClothesSize.S;&lt;br /&gt;&lt;br /&gt;　　Clothes goods2 = new Clothes();&lt;br /&gt;　　goods2.size = ClothesSize.M;&lt;br /&gt;&lt;br /&gt;　　System.out.println(goods1.size.getNo());  //會印出 32&lt;br /&gt;　　System.out.println(goods2.size.getNo());  //會印出 34&lt;br /&gt;　}&lt;br /&gt;}&lt;br /&gt;&lt;/li&gt;&lt;li&gt;絕對不可以直接呼叫 enum 的建構子。enum 的建構子是根據定義在常數後面的引數，而被自動呼叫的。&lt;/li&gt;&lt;li&gt;可以定義 enum 建構子接受多個引數，也可以對它進行多載化的動作。&lt;/li&gt;&lt;li&gt;enum 可以定義一個非常奇怪的東西，看起來就像匿名內隱類別(anonymous inner class)，它被稱為常數特定類別本體(constant specific class body)，當希望某個特定的常數，多載化某個 enum 所定義的函式的時候會用到。&lt;/li&gt;&lt;li&gt;例如當大部份 size 的衣服都是印上"？"，只有 L-size 的衣服是印上"！"，但又不想在取得圖案的函式中加入if/then的程式碼，所以就可以讓 L 這個常數多載 getPic() 這個函式，如下：&lt;br /&gt;enum ClothesSize {&lt;br /&gt;　S(32),&lt;br /&gt;　M(34),&lt;br /&gt;　L(36) {&lt;br /&gt;　　public String getPic() { //多載在 ClothesSize 定義的函式&lt;br /&gt;　　　return "！";&lt;br /&gt;　　}&lt;br /&gt;　};&lt;br /&gt;&lt;br /&gt;　ClothesSize(int no) {&lt;br /&gt;　　this.no = no;&lt;br /&gt;　}&lt;br /&gt;&lt;br /&gt;　private int no;&lt;br /&gt;　public int getNo() {&lt;br /&gt;　　return no;&lt;br /&gt;　}&lt;br /&gt;　public String getPic() {&lt;br /&gt;　　return "？";&lt;br /&gt;　}&lt;br /&gt;}&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;...以上 CHAPTER 1 結束&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://kevin-view.blogspot.com/2008/05/scjp-7.html</link><author>noreply@blogger.com (Kevin Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5006045349284488376.post-8341506365990063700</guid><pubDate>Sat, 10 May 2008 15:56:00 +0000</pubDate><atom:updated>2008-05-11T18:26:00.727+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">SCJP</category><category domain="http://www.blogger.com/atom/ns#">認證筆記</category><title>SCJP - 自修重點筆記與心得 (6)</title><description>&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;&lt;1-5-4&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;變數的宣告&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Java 有兩種型態的變數：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;基本資料(Primitives)：有 8 種，分別為 char、boolean、byte、short、int、long、double 和 float，宣告後型別無法改變。&lt;/li&gt;&lt;li&gt;參考變數(Reference variables)：是用來指涉(refer to，或存取到)到一個物件，一旦宣告成某型別後，就不能更改。一個參考變數可以用來指涉到任何其宣告型別，或宣告類別的子型別(subtype，一個相容的型別)的物件。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;基本資料的宣告和範圍&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;基本資料變數可以被宣告成是類別變數(靜態的)、實體變數、函式參數或區域變數。&lt;/li&gt;&lt;li&gt;可在一行程式碼內同時宣告一個或多個同樣基本型別的基本資料，例：int x, y, z;。&lt;/li&gt;&lt;li&gt;整數型態的基本型別所代表的範圍從小至大順序為：byte, short, int, long。&lt;/li&gt;&lt;li&gt;浮點數的型態則是 double 比 float 大。&lt;/li&gt;&lt;li&gt;數字型態都是帶有正負號的(signed)，最左邊的位元(最大有效位元，the most significant digit)被用來表示正負號，1 是負號，0 是正號，其它的位元則使用二系補數表示法(two's complement notation)來表示數值。&lt;/li&gt;&lt;li&gt;數字基本資料的範圍，只須記住前三欄即可。&lt;table style="width: 384px; height: 221px;" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#ffaaaa"&gt;Type&lt;/td&gt;&lt;td bgcolor="#ffaaaa"&gt;Bits&lt;/td&gt;&lt;td bgcolor="#ffaaaa"&gt;Bytes&lt;/td&gt;&lt;td bgcolor="#ffaaaa"&gt;Min. Range&lt;/td&gt;&lt;td bgcolor="#ffaaaa"&gt;Max. Range&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;byte&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;8&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;1&lt;/td&gt;&lt;td&gt;-2&lt;sup&gt;&lt;span style="font-size:78%;"&gt;7&lt;/span&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td&gt;2&lt;sup&gt;&lt;span style="font-size:78%;"&gt;7&lt;/span&gt;&lt;/sup&gt;-1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;short&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;16&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;2&lt;/td&gt;&lt;td&gt;-2&lt;sup&gt;&lt;span style="font-size:78%;"&gt;15&lt;/span&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td&gt;2&lt;sup&gt;&lt;span style="font-size:78%;"&gt;15&lt;/span&gt;&lt;/sup&gt;-1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;int&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;32&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;4&lt;/td&gt;&lt;td&gt;-2&lt;sup&gt;&lt;span style="font-size:78%;"&gt;31&lt;/span&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td&gt;2&lt;sup&gt;&lt;span style="font-size:78%;"&gt;31&lt;/span&gt;&lt;/sup&gt;-1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;long&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;64&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;8&lt;/td&gt;&lt;td&gt;-2&lt;sup&gt;&lt;span style="font-size:78%;"&gt;63&lt;/span&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td&gt;2&lt;sup&gt;&lt;span style="font-size:78%;"&gt;63&lt;/span&gt;&lt;/sup&gt;-1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;float&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;32&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;4&lt;/td&gt;&lt;td&gt;n/a&lt;/td&gt;&lt;td&gt;n/a&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;double&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;64&lt;/td&gt;&lt;td bgcolor="#aaffaa"&gt;8&lt;/td&gt;&lt;td&gt;n/a&lt;/td&gt;&lt;td&gt;n/a&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;多少位元可代表一個 boolean 值，是由虛擬機器決定的。&lt;/li&gt;&lt;li&gt;一個 char 型別的變數是使用 2 Bytes(16 bits)表示，因此可儲存 unicode 字元。其實 char 是一&lt;span style="font-weight: bold;"&gt;不帶正負號的(unsigned) 16 位元的整數&lt;/span&gt;來表示，可存放 2&lt;sup&gt;&lt;span style="font-size:78%;"&gt;16&lt;/span&gt;&lt;/sup&gt; 的值，範圍為 0 至 65535 (2&lt;sup&gt;&lt;span style="font-size:78%;"&gt;16&lt;/span&gt;&lt;/sup&gt;-1)。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;宣告參考變數(Reference Variables)&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;參考變數可以被宣告成靜態變數、實體變數、函式參數或區域變數。&lt;/li&gt;&lt;li&gt;可以在同一行程式碼內，宣告一個或多個同型別的參考變數，例：String s1, s2, s3;。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;實體變數(Instance Variables)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;實體變數是被定義在類別內，但在任何函式之外，而且只有在一個類別被實體化的時候，才會進行被始化的動作。&lt;/li&gt;&lt;li&gt;實體變數是屬於每個獨一無二的物件的資料欄(fields)。&lt;/li&gt;&lt;li&gt;實體變數(Instance variable)又可稱為資料欄(field)或屬性(property/attribute)。&lt;/li&gt;&lt;li&gt;實體變數必須知道的規則：&lt;/li&gt;&lt;ol&gt;&lt;li&gt;可使用任何四種存取等級(public, private, protected 或預設)。&lt;/li&gt;&lt;li&gt;可以被標示成 final, transient。&lt;/li&gt;&lt;li&gt;不可被標示成 abstract, synchronized, strictfp, native。&lt;/li&gt;&lt;li&gt;另外也不可標示為 static，因為一旦標示為 static，它就變成了類別變數(class variables，或稱靜態變數)了。&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;區域變數、實體變數和函式的差異表(可宣告的修飾子)：&lt;table style="width: 324px; height: 286px;" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#ffaaaa"&gt;區域變數&lt;/td&gt;&lt;td bgcolor="#ffaaaa"&gt;變數(非區域)&lt;/td&gt;&lt;td bgcolor="#ffaaaa"&gt;函式&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;final&lt;/td&gt;&lt;td&gt;final&lt;br /&gt;public&lt;br /&gt;protected&lt;br /&gt;private&lt;br /&gt;static&lt;br /&gt;transient&lt;br /&gt;volatile&lt;/td&gt;&lt;td&gt;final&lt;br /&gt;public&lt;br /&gt;protected&lt;br /&gt;private&lt;br /&gt;static&lt;br /&gt;&lt;br /&gt;abstract&lt;br /&gt;synchronized&lt;br /&gt;strictfp&lt;br /&gt;native&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;區域(Local，自動 Automatic / 堆疊 Stack / 函式)變數&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;區域變數就是宣告在函式內部的變數，非該函式的程式碼不可存取該區域變數。&lt;/li&gt;&lt;li&gt;區域變數在函式內部開始它的生命，在函式結束時，區域變數也會被銷毀。&lt;/li&gt;&lt;li&gt;區域變數一定是存在堆疊(stack)內，而不是在堆積(heap)內。&lt;/li&gt;&lt;li&gt;假如該區域變數是一個物件參考，則區域變數還是存於堆疊&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;，而這個物件就會在&lt;span style="font-weight: bold;"&gt;堆積&lt;/span&gt;內被建立出來。所以並沒有存在一個叫做堆疊物件(stack object)的東西，只有堆疊變數。&lt;/li&gt;&lt;li&gt;所謂的區域物件(local object)，指的是區域宣告的參考變數(local declared reference variable)。&lt;/li&gt;&lt;li&gt;區域變數只可使用 final 修飾子。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;使用&lt;/span&gt;區域變數之前，必須先用一個值來&lt;span style="font-weight: bold;"&gt;初始化&lt;/span&gt;它，因為區域變數沒有預設值(實體變數有預設值)。&lt;/li&gt;&lt;li&gt;區域變數的名稱，可以與實體變數相同，這個方法稱為遮蔽(shadowing)。當發生此情形時，該函式要存取同名稱的實體變數時，要加上 this 關鍵字，例：&lt;br /&gt;class Foo {&lt;br /&gt;int size = 27;&lt;br /&gt;public void setSize(int size) {&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;this.size&lt;/span&gt; = size;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;陣列宣告&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;在 Java 中，陣列是一個物件它可以儲存數個同型別的變數，或同型別的子類別們的變數。&lt;/li&gt;&lt;li&gt;陣列可以被用來儲存基本資料或是物件參考，但即使這個陣列是被宣告來儲存基本資料，陣列本身永遠是堆積裡的一個物件。&lt;/li&gt;&lt;li&gt;建立一個陣列的參考變數：&lt;/li&gt;&lt;ol&gt;&lt;li&gt;宣告一個基本資料的陣列&lt;br /&gt;int[] key;  //建議方式&lt;br /&gt;int key []; //合法但可讀性較低&lt;br /&gt;&lt;/li&gt;&lt;li&gt;宣告一個物件參考的陣列&lt;br /&gt;Thread[] threads;  //建議方式&lt;br /&gt;Thread threads []; //合法但可讀性較低&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;也可宣告多維陣列(multidimensional arrays)，其實它就是陣列的陣列，例：&lt;br /&gt;String[][][] occupantName;//三維陣列宣告&lt;br /&gt;String[] ManagerName [];   //合法的二維陣列宣告，但寫法不好&lt;br /&gt;&lt;/li&gt;&lt;li&gt;在宣告陣列時同時宣告陣列的大小是不合法的，例：&lt;br /&gt;int[5] scores;  //此程式碼無法編譯&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Final 變數&lt;br /&gt;&lt;ul&gt;&lt;li&gt;如果使用 final 這個關鍵字來宣告一個變數，一旦該變數已經被特定的值初始化了(而不是預設的)，就不能再次初始化它。&lt;/li&gt;&lt;li&gt;對於基本資料，只要讓變數被指派了一個值，就不能再被改變。&lt;/li&gt;&lt;li&gt;對於物件參考變數(object reference variable)，就是不能重新指派它去指涉到另外一個物件，不過讓物件的資料可以被修改，不能被變更的是參考變數。&lt;/li&gt;&lt;li&gt;沒有 final 物件，只有 final 參考。&lt;/li&gt;&lt;li&gt;final 的應用意義：&lt;/li&gt;&lt;table style="width: 379px; height: 138px;" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#ffaaaa"&gt;物件(class)&lt;/td&gt;&lt;td&gt;final 類別不可被繼承&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor="#ffaaaa"&gt;函式(method)&lt;/td&gt;&lt;td&gt;final 函式不可被子類別覆寫&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor="#ffaaaa"&gt;變數(variable)&lt;/td&gt;&lt;td&gt;final 變數，一旦初始化後，就不能再指派新值&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Transient 變數&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;假如將某類別的實體變數標示成 transient，就是告訴 JVM 在序列化(serialize)包含它的物件的時候，就要忽略它。&lt;/li&gt;&lt;li&gt;序列化是讓你可以儲存(有時候稱為”平坦化(flattern)”)物件的狀態(換句話說，該物件的實體變數的值)到一個 I/O 資料流(stream)上。使用序列化，可以將物件儲存到檔案上，或讓它在網路上傳送，並在另外一端的 JVM 上回復成原物件(再膨脹化(reinflating)，反序列化(deserializing))。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Volatile 變數&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;volatile 修飾子告訴 JVM，當一個執行緒存取了該變數，必須將執行緒本身對於該變數的私自拷貝版和記憶體內的主要拷貝版進行一致化的動作。&lt;/li&gt;&lt;li&gt;volatile 就像 transient，是一個只可以應用在實體變數的修飾子。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Static 變數和函式&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;如果類別內的某些函式或變數，和該類別的任何實體是無關的，就可以應用 static 修飾子來建立這些函式或變數。&lt;/li&gt;&lt;li&gt;在建立任何該類別的實體之前，static 成員就已經存在了，而且不論類別有少個實體，這些 static 成員都只有一份，也就是所有實體共享同一份 static 成員。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;可&lt;/span&gt;被標示成 static 的東西有：『函式』、『變數』、『一個包含在另一個類別內的類別(巢狀類別，nested)，但不是在函式內的』和『初始化區塊(Initialization blocks)』。&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;不可&lt;/span&gt;被標示成 static 的東西有：『建構子』、『類別』、『介面』、『函式內的區域內隱類別(method local inner classes)』、『內隱類別的函式和實體變數』和『區域變數』。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><link>http://kevin-view.blogspot.com/2008/05/scjp-6.html</link><author>noreply@blogger.com (Kevin Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5006045349284488376.post-5316827972920803862</guid><pubDate>Wed, 07 May 2008 13:23:00 +0000</pubDate><atom:updated>2008-05-07T21:48:56.268+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">SCJP</category><category domain="http://www.blogger.com/atom/ns#">認證筆記</category><title>SCJP - 自修重點筆記與心得 (5)</title><description>　　這幾天比較忙，所以都沒有時間看我的Java，今天又開始看了一下，以下是今日看的筆記。&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;&lt;1-5-2&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;帶有變動個數引數(Variable Argument Lists，簡稱 var-args)的函式&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;引數與參數的用法～&lt;br /&gt;引數(arguments)：當呼叫函式時，放於括號內的東西，例：doStuff("a", 2);，"a"和2即是引數。&lt;br /&gt;參數(parameters)：放在函式的標記式(method's signature)，用來說明這個函式呼叫時所須接收怎樣的資料，例：void doStuff(String s, int a) {}，此函數預期有兩個參數，String 和 int。&lt;/li&gt;&lt;li&gt;var-args的宣告規則：&lt;ol&gt;&lt;li&gt;var-arg 型別：可以為基本型別(primitive type)或物件型別(object type)。&lt;/li&gt;&lt;li&gt;基本語法：先是型別，接著是省略符號(...)，加一個空白，再接著接收這參數的陣列名稱。&lt;/li&gt;&lt;li&gt;其他參數：使用 var-arg 的函式可以同時擁有其它參數。&lt;/li&gt;&lt;li&gt;var-arg 的限制：var-arg 必須是函式的標記式上最後一個參數，且一個函式只能有一個 var-arg。&lt;br /&gt;例：void doStuff(char a, String... b) {}&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;&lt;1-5-3&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;建構子 (Constructor) 的宣告&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;建構子一定不行有回傳型別！&lt;/li&gt;&lt;li&gt;可以使用所有普通的存取修飾子，和擁有引數(包含 var-arg)。&lt;/li&gt;&lt;li&gt;建構子的名稱一定要和類別的名子相同。&lt;/li&gt;&lt;li&gt;建構子不可被標示為 static、final 或 abstract。&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><link>http://kevin-view.blogspot.com/2008/05/scjp-5.html</link><author>noreply@blogger.com (Kevin Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5006045349284488376.post-6535021871941177420</guid><pubDate>Wed, 30 Apr 2008 04:43:00 +0000</pubDate><atom:updated>2008-04-30T18:44:42.117+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">SCJP</category><category domain="http://www.blogger.com/atom/ns#">認證筆記</category><title>SCJP - 自修重點筆記與心得 (4)</title><description>&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;1-5-2&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;非存取的成員修飾子(Nonaccess Member Modifiers)&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;包含 final、abstract、transient、synchronized、native、strictfp、static。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Final 函式&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;final 關鍵字可以防止函式被子類別覆寫，而且通常被用來當成 API 的一部份。&lt;/li&gt;&lt;li&gt;防止子類別覆寫函式也扼殺了許多 OO 的優勢，包含透過多型達到可擴充性。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Final 引數(Final Arguments)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;在函式宣告的括號中出現的變數宣告，就是函式引數(method arguments)，函數引數基本上和區域變數一樣，所以可使用 final，例：&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;public Record getRecord(int fileName, final int recordNumber) { ... }&lt;/span&gt;&lt;br /&gt;代表 recordNumber 變數在此函式內，不能被修改。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;抽象函式(Abstract Methods)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;一個 abstract 函式是指該函式已經被宣告了，但還沒被實作，也就是&lt;span style="color: rgb(51, 51, 255);"&gt;它沒有函式的主體&lt;/span&gt;(method body)。&lt;/li&gt;&lt;li&gt;在一個沒有宣告成 abstract 的類別放進一個抽象函式，是不合法的！可是一個抽象類別可不包含任何抽象函式。&lt;/li&gt;&lt;li&gt;第一個抽象類別的具象子類別(concrete subclass)必須實作所有父類別的抽象函式。&lt;br /&gt;總覺得這段原文敘述有點怪，還是改為以下：&lt;br /&gt;當一具象類別(concrete subclass)繼承了抽象類別時，此具象類別必須實作所有父類別的抽象函式。&lt;/li&gt;&lt;li&gt;abstract 不可和 final、private 和 static 一起使用。&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;public abstract class A {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;　abstract void foo();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;class B extends A {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;　void foo(int I) { }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;}&lt;/span&gt;&lt;br /&gt;這段程式碼是無法完成編譯的，因為 B 並未實作 A 的 foo() 抽象函式，而 foo(int I) 只是一個多載化函式(overloaded method，一個使用相同的識別字，但不相同的引數的函式)。&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Synchronized 函式&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;synchronized 這個關鍵字是指讓函式一次只能被一個執行緒(thread)存取。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Native 函式&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;native 修飾子是指該函式被和平台相關(platform-dependent)的程式碼實作，通常是 C。&lt;/li&gt;&lt;li&gt;只能用於函式，不可用於類別或變數。&lt;/li&gt;&lt;li&gt;必須注意 native 函式的宣告必須以分號來結尾(就像抽象函式)，也就是實作是省略的。&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Strictfp 函式&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;strictfp 強迫浮點數(和其他浮點數運算)遵循 IEEE 754 的標準。&lt;/li&gt;&lt;li&gt;優點是可確保每個平台所得到的結果是一致的，且可預測。&lt;br /&gt;缺點是如困底層的平台支援更精準的浮點數運算，則 strictfp 函式將沒辦法使用到此優點。&lt;/li&gt;&lt;li&gt;strictfp 可使用於類別及函式，但不可用於變數。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><link>http://kevin-view.blogspot.com/2008/04/scjp-4.html</link><author>noreply@blogger.com (Kevin Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5006045349284488376.post-6068800614558759507</guid><pubDate>Tue, 29 Apr 2008 09:18:00 +0000</pubDate><atom:updated>2008-04-30T12:46:03.165+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">SCJP</category><category domain="http://www.blogger.com/atom/ns#">認證筆記</category><title>SCJP - 自修重點筆記與心得 (3)</title><description>　　今天差點被 protected 存取控制的文章給逼瘋了，算了，還是自己寫程式測一下吧。結果，好險我有測，否則我已經會錯意了！而且還測了書中沒寫到的狀況，跟我預期的一樣，我將它表列如下：&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;table style="width: 413px; height: 500px;" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;可見性&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;public&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;private&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;default&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;protected&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;同一個類別&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;同一個套件內的任何類別&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;同一個套件內的子類別&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;不同套件的任何非子類別&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;不同套件的子類別&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;不同套件的子孫類別&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;與父不同套件但與子同套件的類別，透過子類別的參考，存取父類別&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;與父同套件但與子不同套件的類別，透過子類別的參考，存取父類別&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;No&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;區域變數(Local Variables)和存取修飾子(Access Modifiers)&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;存取修飾子不可應用在區域變數上。&lt;/li&gt;&lt;li&gt;只有 final 修飾子可應用於區域變數。&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><link>http://kevin-view.blogspot.com/2008/04/scjp-3.html</link><author>noreply@blogger.com (Kevin Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5006045349284488376.post-1319560758775667877</guid><pubDate>Mon, 28 Apr 2008 09:07:00 +0000</pubDate><atom:updated>2008-04-30T12:41:47.829+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">SCJP</category><category domain="http://www.blogger.com/atom/ns#">認證筆記</category><title>SCJP - 自修重點筆記與心得 (2)</title><description>　　哇！今天看的內容讓我的頭很痛，痛不是因為看不懂，是筆記很難寫，主要都是在說明存取修飾子(預設、public、protected、private)在什麼情況下可以被別人存取。我想明天要將這些存取規則列一張表，會比較清楚一點。&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;1-3-1&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;原始檔的宣告規則&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;每個原始檔中只能有一個 public 類別。&lt;/li&gt;&lt;li&gt;註解沒有限制位置。&lt;/li&gt;&lt;li&gt;如困檔案中有一個 public 類別，則此檔名必須與 public 類別名稱相同；若沒 public 類別，則檔名沒有限制。&lt;/li&gt;&lt;li&gt;package 必須出現在第一行，且在 import 之前。&lt;/li&gt;&lt;li&gt;import 必須存在於 package 與類別宣告之間；若沒有 package 陳述式，則 import 必須在第一行；若沒有 package 與 import，則類別宣告必須在第一行。&lt;/li&gt;&lt;li&gt;package 和 import 陳述式的效力，遍及檔案內的所有類別。&lt;/li&gt;&lt;li&gt;一個檔案可以有多個不為 public 的類別。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;1-3-2&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;類別的宣告和修飾子&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;類別宣告之前可加上修飾子，如下：&lt;/li&gt;&lt;ol&gt;&lt;li&gt;存取修飾子(access modifiers)：預設、public&lt;/li&gt;&lt;li&gt;非存取修飾子(Non-access modifiers)：strictfp、final、abstract&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;存取修飾子&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;雖然存取修飾子有三種，但卻有四種存取控制，其中有兩種可用於類別的宣告上。&lt;/li&gt;&lt;ol&gt;&lt;li&gt;public → 均可看到；可用於&lt;span style="color: rgb(51, 51, 255);"&gt;類別&lt;/span&gt;、函式、變數。&lt;/li&gt;&lt;li&gt;private → 只有自己可看見；可用於函式、變數。&lt;/li&gt;&lt;li&gt;protected → 只有同一套件內或子類別可見；可用於函式、變數。&lt;/li&gt;&lt;li&gt;預設 → 只有同一套件內可見；可用於&lt;span style="color: rgb(51, 51, 255);"&gt;類別&lt;/span&gt;、函式、變數。&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;非存取類別修飾子&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;strictfp&lt;/li&gt;&lt;ol&gt;&lt;li&gt;只可用於類別及函式。&lt;/li&gt;&lt;li&gt;類別若標記成 strictfp 的意思是，屬於此類別的所有函式使用浮點數(floating pointes)時，均符合 IEEE 754 標準。&lt;/li&gt;&lt;li&gt;strictfp 也可只宣告於某函式。&lt;/li&gt;&lt;li&gt;若沒有使用此修飾子，則函式內操作浮點數的方式，就有可能和平台相關，行為就可能不一樣。&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;final&lt;/li&gt;&lt;ol&gt;&lt;li&gt;當類別被宣告為 final，則表示沒有其它類別可再成為它的子類別。例：String。&lt;/li&gt;&lt;li&gt;身為一個 final 類別，就少了一個 OO 的關鍵優勢～可擴展性(extensibility)。&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;abstract&lt;/li&gt;&lt;ol&gt;&lt;li&gt;不可與 final 合用，因為會產生矛盾。&lt;/li&gt;&lt;li&gt;一個 abstract 的類別，永遠都不能被實體化(instantiated)，它唯一的目的，就是被擴充(繼承，和 final 相反)。&lt;/li&gt;&lt;li&gt;當類別內只要有一函式被宣告為 abstract，則此類別就必須宣告為 abstract 的類別。&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;1-4-1&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;宣告介面&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;介面只說明一個類別可以做甚麼，但並不包含說明要如何做。&lt;/li&gt;&lt;li&gt;所有的介面函式都隱含著 public 和 abstract，所以不需要再加此兩種修飾子。&lt;/li&gt;&lt;li&gt;介面只能宣告常數(default 為 public static final)，不能是實體變數(instance variables)。&lt;/li&gt;&lt;li&gt;介面函式不可為 static，且函式是抽象的，所以也不能標註 final、strictfp 或 native。&lt;/li&gt;&lt;li&gt;一個介面可以擴充(繼承)一個或多個其他介面，但不可擴充其它非介面的東西。&lt;/li&gt;&lt;li&gt;介面不可實作，且使用 interface 來宣告。&lt;/li&gt;&lt;li&gt;介面型別可以被多型地使用 (can be used polymporphically)。&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;1-4-2&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;宣告介面常數&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;　介面常數必須宣告為 public static final，但因介面內的變數宣告均為 public static final，所以可以省略，例：int BAR = 42;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;&lt;1-5-1&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;類別成員的宣告&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;存取修飾子&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;類別只能使用四種存取等級中的兩種(預設或 public)，但成員(members，函式及變數)可以使用全部(預設，public，protected，private)。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;存取控制議題可分為兩種：&lt;/li&gt;&lt;ol&gt;&lt;li&gt;一個類別內的函式是否可以存取另一類別的成員。&lt;/li&gt;&lt;li&gt;一個子類別是否可以繼承它的父類別的成員。&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;公開成&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;員&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;(Public Members)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;若成員被宣告為 public，則所有其他類別，不論是否在同一套件內，均可以取此成員。&lt;/li&gt;&lt;li&gt;子類別可完全繼承父類別的所有公開成員，並且可直接使用這些成員，例：父類別有一doThings()函式，子類別可直接呼叫 doThings()，而此成員是暗中透過 this 這個參考來取用，也可寫成 this.doThings(); (this 是指目前正在執行這段程式碼的物件)。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;私有成員(Private Memebers)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;除了它所屬的類別外，沒有其他類別可以取用。&lt;/li&gt;&lt;li&gt;子類別亦無法繼承父類別的私有成員，當在子類別宣告一個與父類別私有成員一樣名稱的成員是合法的，但這不是&lt;span style="color: rgb(51, 51, 255);"&gt;覆寫函式&lt;/span&gt;。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;預設成員(Default Members)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;只有同一套件內之類別函式可存取，沒有例外。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;保護成員(Protected Members)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;protected 和預設存取控制等級幾乎是相同，但有一關鍵點不同，就是保護成員除了只能讓同套件內的類別存取外，也可以被子類別存取，即使這個子類別在另外一個套件內。而且非一套件的子類別只能透過繼承的方式來看到 protected 成員(不能透過實體操作)。&lt;/li&gt;&lt;li&gt;一但有套件之外的子類別繼承了這個 protected 成員，這個成員對其他的子類別之外的而言，就是 private 的了，但不包含這個子類別的子類別們。(實際測試有一個例外，就是當某一類別與父類別同一套件，與子類別不同套件，可是此類別可以透過子類別的參考存取父類別的 protected 成員)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><link>http://kevin-view.blogspot.com/2008/04/scjp-2.html</link><author>noreply@blogger.com (Kevin Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5006045349284488376.post-7747226862686692820</guid><pubDate>Sun, 27 Apr 2008 07:49:00 +0000</pubDate><atom:updated>2008-04-28T21:04:58.514+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">SCJP</category><category domain="http://www.blogger.com/atom/ns#">認證筆記</category><title>SCJP - 自修重點筆記與心得 (1)</title><description>　　第一章都是一些很基本的規則，但是有時也會發現新大陸的感覺，例如識別字可以用$符號，我是第一次聽到，寫那麼久的程式，從來沒有用過。所以，枯燥中也會有一些驚喜！&lt;br /&gt;&lt;br /&gt;　　不過這個筆記，只是我記錄一些我比較容易忘記細節，並不是全部的課程，所以不一定適合每個人，如果有人跟我一樣想考 SCJP，不應該認為看我的筆記就OK喔！&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:180%;"&gt;&lt;&lt;1-2-1&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;合法識別字&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;識別字須以字母、貨幣符號($)或底線(_)為開頭，不可為數字。&lt;/li&gt;&lt;li&gt;第一個字元之後，可以包含字母、貨幣符號、連結字元(即底線)和數字。&lt;/li&gt;&lt;li&gt;字數沒有上限。&lt;/li&gt;&lt;li&gt;不能使用Java關鍵字。&lt;/li&gt;&lt;li&gt;有區分大小寫。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:180%;"&gt;&lt;&lt;1-2-3&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;JavaBean 屬性命名規則&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;屬性的型別不是 boolean 時，取值函式的前置字(prefix)必須是get，例：getSize() 為取 "size" 的值，但並不一定需要有 size 這個變數。&lt;/li&gt;&lt;li&gt;屬性的型別是 boolean 時，取值函式的前置字必須為 get 或 is，例：getStopped() 或 isStopped()。&lt;/li&gt;&lt;li&gt;設值函數的前置字必須是 set，例：setSize()。&lt;/li&gt;&lt;li&gt;設值或取值函式必須被標示為 public，格式如下：(屬性名的第一個字要改為大寫)&lt;br /&gt;　設值 &gt;&gt; public  void  set屬性名(該屬性型別  變數)&lt;br /&gt;　　　　　public void setStopped(boolean stopped)&lt;br /&gt;　取值 &gt;&gt; public  該屬性型別  get/is屬性名()&lt;br /&gt;　　　　　public boolean getStopped()　或　public boolean isStopped()&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;JavaBean 的監聽器命名規則&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;註冊監聽某事件的監聽器函式，必須用前置字 add，再接監聽器的型別，例：addActionListener()，以註冊監聽 Action 事件。&lt;/li&gt;&lt;li&gt;用前置字 remove 來移除註冊監聽某事件，例：removeActionListener()。&lt;/li&gt;&lt;li&gt;用來新增或移除監聽器的型別，必須當引數傳入這個函式。&lt;/li&gt;&lt;li&gt;註冊或移除監聽器的函式，須以"Listener"結尾。&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><link>http://kevin-view.blogspot.com/2008/04/scjp-1.html</link><author>noreply@blogger.com (Kevin Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5006045349284488376.post-2323942087891029249</guid><pubDate>Sun, 27 Apr 2008 07:14:00 +0000</pubDate><atom:updated>2008-04-28T13:18:28.042+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">SCJP</category><category domain="http://www.blogger.com/atom/ns#">認證筆記</category><title>SCJP - 認證序曲</title><description>　　我的第一個認證目標『SCJP (Sun Certified Java Programmer)，考試編號：310-055』。為什麼會選擇它呢？因為，我在業界比較常接觸的就是 Java，之前公司也派我去上過幾次 Java 的相關課程，其中還包含了SCJP的認證課程，但我還是沒去考。現在已經過了幾年，上的內容忘得也差不多了，Java 也從當時1.4到現在的5，其中也有所改變，所以，一切幾乎是要從頭來過，而首先要做的事，當然是去買一本認證專書囉，因此，我就到了天瓏書局找了半天，找到了一本自己覺得還不錯的書，OK，那就從這本書開始吧！&lt;br /&gt;&lt;br /&gt;SCJP Java 5 專業認證手冊正面&lt;br /&gt;&lt;img src="http://lh5.ggpht.com/kevin.tk.lee222/SBQnrKLkKkI/AAAAAAAABz8/8gFauj0fQQg/s400/P4273598.jpg" /&gt;&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;SCJP Java 5 專業認證手冊背面&lt;br /&gt;&lt;img src="http://lh3.ggpht.com/kevin.tk.lee222/SBQnrqLkKlI/AAAAAAAAB0E/oWzn8b4fxHc/s400/P4273599.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;參考書籍資訊：&lt;br /&gt;書名：SCJP Java 5 專業認證手冊&lt;br /&gt;出版社：GOTOP 碁峯&lt;br /&gt;作者：Kathy Sierra、Bert Bates 著&lt;br /&gt;　　　陳逸嘉、高名揚 譯&lt;br /&gt;ISBN 978-986-181-049-2&lt;br /&gt;售價：880元（天瓏打七八折）&lt;br /&gt;版次：2006年08月初版&lt;br /&gt;　　　2008年03月初版三刷&lt;/div&gt;</description><link>http://kevin-view.blogspot.com/2008/04/scjp.html</link><author>noreply@blogger.com (Kevin Lee)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="http://lh5.ggpht.com/kevin.tk.lee222/SBQnrKLkKkI/AAAAAAAABz8/8gFauj0fQQg/s72-c/P4273598.jpg" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5006045349284488376.post-4373320366295485689</guid><pubDate>Sat, 26 Apr 2008 15:30:00 +0000</pubDate><atom:updated>2008-04-27T05:27:39.229+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">心情</category><title>全新出發 - 為了自己而認證</title><description>　　我從高職開始接觸電腦，當初會選擇資訊科系，只因為我哥讀得還不錯，自己又不知喜歡什科系，所以就選擇了它。沒想到一讀就讀出興趣來了，讀完高職三年，接著夜二專三年，又夜二技三年，加一加共讀了九年的資訊科系。工作也是，一出社會就是系統開發，至今也有七、八年的工作經驗了。&lt;br /&gt;&lt;div id="fullpost"&gt;&lt;br /&gt;　　那麼長的時間，學過了數不清的技術，也開發了無數的系統，只要有一本工具書，沒有不會的技術。這樣的我，卻半張證照都沒有，之前總是認為「為什麼我要花錢來證明我會這樣技術！」，而且，認證考試費用隨便都是千元起跳，再加上我很討厭考試．．．，太多的借口讓我一直沒去考，其實就一個字『懶』。&lt;br /&gt;&lt;br /&gt;　　可是，最近在找工作，才發現證照的重要性，很多企業已經把證照列為求才基本要求，這也讓我失去了很多好的工作機會，縱然有豐富的學經歷，也是枉然。&lt;br /&gt;&lt;br /&gt;　　這讓我重新思考證照的必要性，Renee 也對我說：「做人要懂得投資自己。」，沒錯！沒有投資，那來的收穫。所以，我決定要執行我的認證計劃，就從現在的這一刻開始！並且，將我的學習過程、心得及筆記，一一記錄在我的blog裡，感覺有一種責任，讓我有持續下去的動力。加油吧！自己！&lt;/div&gt;</description><link>http://kevin-view.blogspot.com/2008/04/blog-post_26.html</link><author>noreply@blogger.com (Kevin Lee)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5006045349284488376.post-2389600187094482748</guid><pubDate>Fri, 11 Apr 2008 08:14:00 +0000</pubDate><atom:updated>2008-04-11T16:32:29.279+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">心情</category><title>回來了，我的部落格！</title><description>　　真是辛苦妳了，回去Google娘家整整快兩個禮拜，跟原本說得四個工作天內，好像有點差距，不過回來就好。&lt;br /&gt;&lt;br /&gt;　　只能對妳說聲對不起，都是我不好，都是我剛得到妳時太興奮，為了讓妳更美麗，幫妳加了些裝飾品，讓Google娘家以為妳偷人，硬是要妳回娘家檢查，害我不甘寂寞，又新娶了一個部落格（&lt;a href="http://kevin-renee.blogspot.com" target="_blank"&gt;Kevin &amp;amp; Renee @ TAIWAN&lt;/a&gt;），真得太對不起妳了！&lt;br /&gt;&lt;br /&gt;　　雖然妳原本的任務有人取代了，但是妳永遠是我的大房，我會重新思考妳的定位，讓妳重新出發的，相信我！</description><link>http://kevin-view.blogspot.com/2008/04/blog-post.html</link><author>noreply@blogger.com (Kevin Lee)</author><thr:total>0</thr:total></item></channel></rss>