20145216史婧瑤《Java程式設計》第3周學習總結

20145216史婧瑤發表於2016-03-20

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 

學習了物件和封裝的相關知識 

相關文章