20145216 《Java程式設計》第3周學習總結
教材學習內容總結
第四章 認識物件
4.1 類與物件
•物件(Object):存在的具體實體,具有明確的狀態和行為
•類(Class):具有相同屬性和行為的一組物件的集合,用於組合各個物件所共有操作和屬性的一種機制
•從類看物件:類定義可以視為一個具有類似特性與共同行為的物件的模板,可用來產生物件
•從物件看類:類的產生,是從少數例項,推廣到大量相似例項的抽象化過程(abstraction)
•類是物件的設計圖,物件是類的例項,生成物件要先定義類。類定義時使用class關鍵詞,建立例項要使用new關鍵詞。以類名稱宣告的變數,稱為參考名稱、參考變數或直接叫參考。
•一個原始碼中可以有很多個類定義,但只能有一個是公開類,且文件中的主文件名必須與公開類名稱相同。只要有一個類定義,編譯程式就會產生一個.class文件。
•物件指定與相等性:
當=用於基本型別時,是將值複製給變數,當==用於基本型別時,是比較兩個變數儲存的值是否相同。
當你在操作物件時,=是用在指定參考名稱參考某個物件,而==是用在比較兩個參考名稱是否參考同一物件。
注意:別使用==或!=來比較兩個物件實質內容值是否相同,要使用equals()
4.2基本型別打包器
•為了讓Java 基本型別像類一樣使用
int-Integer
long-Long
byte-Byte
float-Float
double-Double
boolean-Boolean
4.3陣列物件
•在Java中,陣列是物件。
•與C語言不同,Java需要檢查陣列邊界,越界會觸發ArrayIndexOutOfBoundsException異常。
•無論System.arraycopy()還是Arrays.copyof(),用在類型別宣告的陣列時,都是執行淺層複製。
4.4字串物件
•在Java中,字串是java.lang.String例項,用來打包字元陣列。
•在Java中,以""包括的字串,只要內容相同(序列、大小寫相同),無論在程式碼中出現幾次,JVM都只會建立一個String例項。
第五章 物件封裝
5.1 何謂封裝
•封裝(Encapsulation)實際上使用方法(Method)將類的資料隱藏起來,控制使用者對類的修改和訪問資料的程度,隱藏物件細節,將物件當作黑箱進行操作。
通過構造方法(建構函式)封裝初始化流程
通過成員方法(函式)封裝操作
通過成員變數封裝資料
5.2類語法細節
•如果沒有宣告許可權修飾的成員,只有在相同包的類程式程式碼中才可以直接存取,也就是“包範圍許可權”。如果想在其他包的類程式程式碼中存取某包的類或物件成員,則該類或物件成員必須是公開成員,在Java中要使用public加以宣告。
•如果定義類時,沒有撰寫任何建構函式,編譯程式會自動加入一個無引數、內容為空的建構函式,稱為預設建構函式。可以定義多個建構函式,只要引數型別或個數不同,這稱為過載建構函式。
•在Java中,this()代表了呼叫另一個建構函式,且this()呼叫只能出現在建構函式的第一行。
•被宣告為static的成員,不會讓個別物件擁有,而是屬於類。
•以類命名例項來說,首字母是大寫,以static使用習慣來說,是通過類名稱與“.”運算子來存取。
•在static方法或區塊中不能出現this關鍵字。static方法中不能用非static資料或方法成員。
•使用import static語法要注意名稱衝突問題,有些名稱衝突編譯程式可通過以下順序來解析。
區域性變數覆蓋:選用方法中的同名變數、引數、方法名稱。
成員覆蓋:選用類中定義的同名資料成員、方法名稱。
過載方法比較:使用import static的各個靜態成員,若有同名衝突,嘗試通過過載判斷。
教材學習中的問題和解決過程
問題1:
沒有看懂書上p86頁程式碼中的:
int number = (int)(Math.random()*10);
解決過程:
通過上網百度,得到如下解釋:
Math.random()是令系統隨機選取大於等於0.0且小於1.0的偽隨機double值,是Java、js等語言常用程式碼。
例如:Number=Math.random()*2+1,即設定一個隨機1到3(取不到3)的變數。
問題2:
由於以前學的for迴圈語法都是:
for(初始式;執行結果必須是boolean的重複式;重複式){
描述句;
}
所以當看到書上p96頁的for迴圈語法時(具體語句如下),便感到很難理解。
for(int score:scores){
System.out.printf("學生分數:%d %n",score);
}
解決過程:
通過反覆看書上的解釋和上網查詢資料,我知道了該語法是增強式for迴圈,執行結果其實與以前學的for迴圈語句相同
,但是編寫程式碼時會更簡潔方便。其具體執行過程是:上面的程式片段取得scores陣列第一個元素,指定給score變數
後執行迴圈體,接著取得scores中第二個元素,指定給score變數後執行迴圈體,依次類推,直到scores陣列中所有
元素都訪問完為止。
程式碼除錯中的問題和解決過程
問題1:
當敲到書上p124頁的程式碼時,執行結果有問題,具體程式碼與錯誤如下:
解決過程:
經過反覆看書中的程式碼例項與文字解析,我明白了該段程式碼中呼叫了函式,而書中給的程式碼並不完整,缺少建構函式的部分,因此出現如圖所示錯誤,於是,我試著將建構函式的程式碼片段補上,重新執行,最後執行成功,程式碼與結果如下:
總結:Java的建構函式語法,能夠實現物件初始化流程的封裝,封裝物件初始化流程的好處是使用者不用重複撰寫物件初始化流程,甚至不需要知道物件如何初始化,並且只要修改建構函式的內容,重新編譯並給予位碼文件之後,使用者便無須再修改程式。
問題2:
在敲書上P128頁的程式碼時,發現它與124頁的程式碼有相同的問題,於是我再次補上建構函式的程式碼,原以為這次會萬無一失,結果執行時又出現了一個錯誤,截圖如下:
解決過程:
由於這個錯誤與之前的錯誤類似,所以我認為應該也是缺少了某些程式碼片段,於是我又迴歸教材,很快我便知道了錯誤所在,該段程式碼直接使用了store()方法,而沒有定義儲值用的store()方法,同樣,我加上定義store()方法的程式碼後,程式便執行成功,截圖如下:
總結:定義儲值用的store()方法其實就是將儲值重複流程封裝到store()方法中,這麼做的好處是使用者不用再一遍一遍地敲儲值的重複程式碼,並且在修改store()的流程時,也很方便,可以直接在定義的方法中修改。
其他(感悟、思考等,可選)
這周學到第四、五章,我感覺到Java這門課越來越難,開始本想通過看書來自學,後來發現僅僅只看書並不能完全弄懂知識點,書中給出的程式碼例項也總是看不懂,於是,我繼續看視訊,邊看邊做筆記,不懂的地方也記下來,然後上網查詢資料來弄懂,最後再敲書上的程式碼,發現比之前輕鬆許多。雖然這周學習Java感到吃力,但我完成學習任務後卻覺得很有成就感。
程式碼託管截圖:
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 4500行 | 30篇 | 350小時 | 能將java運用自如 |
第一週 | 150/150 | 2/2 | 15/15 | 學習了與java相關的基礎知識 |
第二週 | 200/350 | 1/3 | 20/35 |
學習了java的基本語法 |
第三週 | 450/800 | 1/4 | 25/60 |
學習了物件和封裝的相關知識 |