總網頁瀏覽量

2013年4月27日 星期六

SCJP觀念筆記以及考取心得

考完之後跟網路上傳說的一樣
猛虎出閘跟教戰手冊考題背一背就可以上場了
約莫四十五題來自這兩本後面習題
其中四十題一模一樣
剩下五題只是小地方修改
感覺很像在考大學通識課的期末考



不過,準備OCJP過程感覺自己有在變強這才是最重要的
重點是過程而不是那張紙
過程補足自己忽略掉的小細節觀念
至少這樣拿這張證照不會心虛

在做練習題時候感覺很像中學考試一樣
書上教大觀念,考試一直考小細節
剛開始做題目時候挫折感真的很重




1.物件強制轉型
父類別物件不可assign給子類別變數(compile erro)



父類別物件不可強制轉型成為子類別物件(可以compile,但是會ClassCastException)


Thingy t = new Thingy();
//Thingy是父類別型態存放父類別物件
DeluxeThingy k= (DeluxeThingy)t;
//強制轉型成子類別型態的t裝不下原本父類別的物件所以發生classcastexcetpion



Thingy t = new DeluxeThingy();
//父類別型態存放子類別物件

DeluxeThingy k= (DeluxeThingy)t;
//雖然t放的是子類別物件,因為t的型態是父類別所以要強制轉型



2.
javac -d course java/Hello.java
這句話意思是編譯java/Hello.java檔案
並且將.class放在目錄course底下


3.
有個檔案Vermouth.class
放在D:Java\course\accessmode底下
檔案內容為
package course.accessmode;
public class Vermouth{   }

Java是專案跟目錄


在D任何資料夾打上底下這行指令,皆可以順利執行
java -classpath  /Java  course.accessmode.Vermouth

在D:Java目錄打上底下這行,可以順利執行
java course.accessmode.Vermouth 


注意:不可以進入accessmode目錄(類別檔所在目錄)
執行java Vermouth
會出現NoClassFound,因為accessmode沒有course\accessmode資料夾
所以找不到

4.宣告介面後不可再宣告同名的類別



5.

short a=5;
int b =6;
a=b;//不給過
a=(short)b;//給過


6.在java裡所有基本型態資料的變數,傳遞到method均已傳值呼叫(pass by value)傳值呼叫不影響原來的變數值
(編譯器將變數值拷貝一份,再將這個拷貝的一份傳遞給method引數)

傳遞陣列或物件是以傳參照(pass by reference)方式傳參照是傳遞變數的參考位置,因此在method更改變數內容原先變數內容也會隨之更改
(編譯器將物件或陣列參考位址拷貝一份 傳給method引數)
此時有兩個變數操作到同一個實體


如果有上萬的元素的陣列,採用傳值呼叫傳遞引數
那麼編譯器勢必要複製上萬的元素的值,給引數
會降低效率
如果採用傳參照 只消複製一個參考位址給引數即可

7.多載:將功能相似的method 以相同名稱命名,編譯器會根據引數的個數與型態自動值星相對應的method。一個多載化的method 引數內容都是獨一無二的。因此如果有引數相同的method,就算傳回型態不同,編譯器也會搞不清楚該呼叫誰。compile error


8.
列舉型態本身也是類別一種
每個項目預設為public final static
當建立物件時MyColor color = MyColor.RED;
會呼叫建構子,而且是每個項目都呼叫一次
以下的例子會呼叫帶有參數的建構子
因此只寫下面這樣會error
必須加上帶有參數的建構子
public enum MyColor{ RED(0xff0000),GREEN(0x00ff00),BLUE(0x0000ff); }

沒有留言:

張貼留言