•對象(Object):存在的具體實體,具備明確的狀態和行爲java
•類(Class):具備相同屬性和行爲的一組對象的集合,用於組合各個對象所共有操做和屬性的一種機制web
•從類看對象:類定義能夠視爲一個具備相似特性與共同行爲的對象的模板,可用來產生對象數組
•從對象看類:類的產生,是從少數實例,推廣到大量類似實例的抽象化過程(abstraction)dom
•類是對象的設計圖,對象是類的實例,生成對象要先定義類。類定義時使用class關鍵詞,創建實例要使用new關鍵詞。以類名稱聲明的變量,稱爲參考名稱、參考變量或直接叫參考。函數
•一個原始碼中能夠有不少個類定義,但只能有一個是公開類,且文檔中的主文檔名必須與公開類名稱相同。只要有一個類定義,編譯程序就會產生一個.class文檔。學習
•對象指定與相等性:this
當=用於基本類型時,是將值複製給變量,當==用於基本類型時,是比較兩個變量儲存的值是否相同。 當你在操做對象時,=是用在指定參考名稱參考某個對象,而==是用在比較兩個參考名稱是否參考同一對象。 注意:別使用==或!=來比較兩個對象實質內容值是否相同,要使用equals()
•爲了讓Java 基本類型像類同樣使用spa
int-Integer long-Long byte-Byte float-Float double-Double boolean-Boolean
•在Java中,數組是對象。設計
•與C語言不一樣,Java須要檢查數組邊界,越界會觸發ArrayIndexOutOfBoundsException異常。3d
•不管System.arraycopy()仍是Arrays.copyof(),用在類類型聲明的數組時,都是執行淺層複製。
•在Java中,字符串是java.lang.String實例,用來打包字符數組。
•在Java中,以""包括的字符串,只要內容相同(序列、大小寫相同),不管在代碼中出現幾回,JVM都只會創建一個String實例。
•封裝(Encapsulation)實際上使用方法(Method)將類的數據隱藏起來,控制用戶對類的修改和訪問數據的程度,隱藏對象細節,將對象看成黑箱進行操做。
經過構造方法(構造函數)封裝初始化流程 經過成員方法(函數)封裝操做 經過成員變量封裝數據
•若是沒有聲明權限修飾的成員,只有在相同包的類程序代碼中才能夠直接存取,也就是「包範圍權限」。若是想在其餘包的類程序代碼中存取某包的類或對象成員,則該類或對象成員必須是公開成員,在Java中要使用public加以聲明。
•若是定義類時,沒有撰寫任何構造函數,編譯程序會自動加入一個無參數、內容爲空的構造函數,稱爲默認構造函數。能夠定義多個構造函數,只要參數類型或個數不一樣,這稱爲重載構造函數。
•在Java中,this()表明了調用另外一個構造函數,且this()調用只能出如今構造函數的第一行。
•被聲明爲static的成員,不會讓個別對象擁有,而是屬於類。
•以類命名實例來講,首字母是大寫,以static使用習慣來講,是經過類名稱與「.」運算符來存取。
•在static方法或區塊中不能出現this關鍵字。static方法中不能用非static數據或方法成員。
•使用import static語法要注意名稱衝突問題,有些名稱衝突編譯程序可經過如下順序來解析。
局部變量覆蓋:選用方法中的同名變量、參數、方法名稱。 成員覆蓋:選用類中定義的同名數據成員、方法名稱。 重載方法比較:使用import static的各個靜態成員,如有同名衝突,嘗試經過重載判斷。
沒有看懂書上p86頁代碼中的:
int number = (int)(Math.random()*10);
經過上網百度,獲得以下解釋:
Math.random()是令系統隨機選取大於等於0.0且小於1.0的僞隨機double值,是Java、js等語言經常使用代碼。 例如:Number=Math.random()*2+1,即設置一個隨機1到3(取不到3)的變量。
因爲之前學的for循環語法都是:
for(初始式;執行結果必須是boolean的重複式;重複式){
描述句;
}
因此當看到書上p96頁的for循環語法時(具體語句以下),便感到很難理解。
for(int score:scores){
System.out.printf("學生分數:%d %n",score);
}
經過反覆看書上的解釋和上網查找資料,我知道了該語法是加強式for循環,執行結果其實與之前學的for循環語句相同 ,可是編寫代碼時會更簡潔方便。其具體執行過程是:上面的程序片斷取得scores數組第一個元素,指定給score變量 後執行循環體,接着取得scores中第二個元素,指定給score變量後執行循環體,依次類推,直到scores數組中全部 元素都訪問完爲止。
當敲到書上p124頁的代碼時,運行結果有問題,具體代碼與錯誤以下:
通過反覆看書中的代碼實例與文字解析,我明白了該段代碼中調用了函數,而書中給的代碼並不完整,缺乏構造函數的部分,所以出現如圖所示錯誤,因而,我試着將構造函數的代碼片斷補上,從新運行,最後運行成功,代碼與結果以下:
總結:Java的構造函數語法,可以實現對象初始化流程的封裝,封裝對象初始化流程的好處是用戶不用重複撰寫對象初始化流程,甚至不須要知道對象如何初始化,而且只要修改構造函數的內容,從新編譯並給予位碼文檔以後,用戶便無須再修改程序。
在敲書上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 | 學習了對象和封裝的相關知識 |