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

20145216 《Java程序設計》第3周學習總結

教材學習內容總結

第四章 認識對象

4.1 類與對象

•對象(Object):存在的具體實體,具備明確的狀態和行爲java

•類(Class):具備相同屬性和行爲的一組對象的集合,用於組合各個對象所共有操做和屬性的一種機制web

•從類看對象:類定義能夠視爲一個具備相似特性與共同行爲的對象的模板,可用來產生對象數組

•從對象看類:類的產生,是從少數實例,推廣到大量類似實例的抽象化過程(abstraction)dom

•類是對象的設計圖,對象是類的實例,生成對象要先定義類。類定義時使用class關鍵詞,創建實例要使用new關鍵詞。以類名稱聲明的變量,稱爲參考名稱、參考變量或直接叫參考。函數

•一個原始碼中能夠有不少個類定義,但只能有一個是公開類,且文檔中的主文檔名必須與公開類名稱相同。只要有一個類定義,編譯程序就會產生一個.class文檔。學習

•對象指定與相等性:this

當=用於基本類型時,是將值複製給變量,當==用於基本類型時,是比較兩個變量儲存的值是否相同。

當你在操做對象時,=是用在指定參考名稱參考某個對象,而==是用在比較兩個參考名稱是否參考同一對象。

注意:別使用==或!=來比較兩個對象實質內容值是否相同,要使用equals()

4.2基本類型打包器

•爲了讓Java 基本類型像類同樣使用spa

int-Integer

long-Long

byte-Byte

float-Float

double-Double

boolean-Boolean

4.3數組對象

•在Java中,數組是對象。設計

•與C語言不一樣,Java須要檢查數組邊界,越界會觸發ArrayIndexOutOfBoundsException異常。3d

•不管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()的流程時,也很方便,能夠直接在定義的方法中修改。

其餘(感悟、思考等,可選)

這周學到第4、五章,我感受到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 

學習了對象和封裝的相關知識 

相關文章
相關標籤/搜索