《Java程式設計》第三次學習總結
學號 《Java程式設計》第三次學習總結
教材學習內容總結
JAVA Fundations : 資料結構。
(1000字以內總結一下本週學習內容,儘量不要抄書)
- 看完了第五章(即:JAVA程式設計的第八版的第四章和第七章)。
- 一個類由兩部分組成:資料和方法,即:成員變數(也稱為域變數(Filed Variable)或者 例項變數)和成員方法。要區分好成員變數與區域性變數之間的差異。成員變數的作用域是整個類,而區域性變數是某個方法之中(區域性變數也僅僅只是在某個方法中定義的)。
- 對於大多數的類而言得去自己去改寫toString()方法。因為預設的情況下,呼叫Syetem.out.println("object");時會預設呼叫toString();方法,列印的是這個物件在記憶體中的一些資訊(我們看不懂,所以意義不太大,只知道它包含了這個物件在記憶體中的資訊)。所以,我們改寫toString();方法後,可以讓Syetem.out.println("object");輸出一些更加有意義的字串,可以讓我們更好的獲得某些相關資訊。
- 針對基本型別而言。對於類中的那些成員變數(也稱為域變數,例項變數),Java會自動初始化(如果我們沒有初始化,預設情況下,初始化為0,boolean為假),但是,JAVA不會預設初始化區域性變數,因此,最好在宣告資料(即:宣告變數時)初始化它。
- 封裝性:物件的例項資料只能由物件自己來修改,類A之外的程式碼,是無法去訪問以及修改A類之內的變數。
- 可以通過物件去呼叫setxxx(); 方法去修改變數,或者通過類名去呼叫方法(針對類方法)。注意:為客戶提供服務的方法,必須宣告為public。
- 設定器:setxxxx()和訪問器getxxxx()。通過這兩個方法來操作成員變數。對成員變數的操作只能是在方法之中!
- 呼叫方法時要注意是否是否是在同一個類中?一個JAVA程式是有若干個類組成的。所以才會出現這個呼叫的問題。
- 構造方法通常用於初始化物件。(這個初始化物件的作用是方便我們去使用物件,類似於:康師傅這個品牌下面的“紅茶”和“綠茶”,在初始化的時候瓶子裡就裝滿了相應的茶,如果不做相應的初始化,就需要我自己拿著瓶子去裝對應的飲料,這就很麻煩了,竟然還我自己去動手裝,我只想拿到瓶子我就能喝到我想要的飲料。)
預設的構造方法裡什麼也沒有,不會對新建立的物件有任何影響。
第七章總結:
軟體開發的步驟:
- 明確類和物件:首先,先確定問題描述中有哪些物件?物件通常是名詞,找出物件以後再去把這些物件分類,得到需要編寫的”類“有哪些。接下來就是程式設計了。
- 靜態方法只能使用靜態變數,不能使用成員變數(因為成員變數很有可能還沒有”誕生“,即:被例項化)。反過來,成員方法能夠使用靜態變數。
所有的類共享”靜態變數“。類比於:所有的同學去打水是改變的同一壺水的水量。這個“水壺”就是一個靜態變數。
類間的關係:聚合(也稱:關聯)、依賴
聚合就是:has a 的關係。如:汽車有底盤。這裡:汽車是一個物件A,底盤是另一個物件B。因此:A has a B。A類物件關聯與B類物件,或者:A類物件組合了B類物件。
依賴就是:is a 的關係。類A是類B中某個方法的引數或者類B的某個方法的返回的資料型別是A類物件。即:B類中有一個方法是:b_Class_Method(A object_a); 或者 A b_Class_Method(); 那麼B依賴於A。(沒有A類就不會有B類呀)
- this 代表正在執行該方法的那個物件。是一個代詞的意思。注意:類方法中不能使用this,因為this 很有可能還沒有"誕生"
- “介面”表示一組公共的方法(函式)。類通過實現定義在介面中的每個抽象方法來實現這個介面。注意:在IDEA中實現介面使,除了要有implements 關鍵字之外,還要有:<實現介面的類名> 。說到IDEA,IDEA中可以使用相對路徑,但是起點不是原始碼在的資料夾,起點是:專案的根目錄
專案的根目錄
- 一個類可以實現多個介面,但是隻能繼承一個父類。
- 列舉型別是一種特殊的類,列舉型別的值是物件。所有的列舉值實際上是物件的引用(地址)。在列舉型別的類定義中可以增加屬性和方法。
可以將物件A提供的一個複雜的方法分解為由多個簡單的方法來實現。如下圖:除法被分解為:乘以這個數的倒數。接著去實現:乘法以及求倒數這兩個簡單的方法就行。
- 方法的引數傳遞:分為兩種情況:①形參是基本型別;②形參是類型別。根據上一篇說的基本型別直接存,類型別存引用可知。對於基本型別來說,形參只是一個副本,在方法中對這個基本型別的形參做的操作並不會改變實參中的值。但是類型別就不一樣了,類型別裡放的是地址(引用),所以傳遞給形參的就是地址,這樣在方法中對形參做的一切操作都會改變實參的值,因為傳給形參的是地址呀!下圖的例子很生動:
書上的官方解釋
- 方法過載:方法名稱相同,只是形參引數不同:引數個數不同或者形參的型別不同。順序也行,只要這兩個方法的簽名不完全一樣就行。(返回值不屬於簽名的一部分!)
- 基本定義 簽名:
測試:找BUG,即:發現問題。也就是“舉反例”。
缺陷測試:
- 黑盒測試:就是黑盒子模型,只看輸入輸出,類似STEP OVER的概念。白盒就是對模型的每個細節都去測試:類似STEP INTO的概念。
對於黑盒測試中的輸入:稱為等價類。
- 可變引數:同一型別的引數的個數不確定,而且這種可變引數必須放在方法形參列表中的最後一項。如:public void g(double a,int ... x); 後面的 int ... x 就是可變引數。
如果使用了包名,則:儲存目錄下面必須有\tom\jiafei 的結構,用JAVA命令執行這個程式,要到tom的上一層。回想一下:Linux中的目錄,所以上一篇裡說的直接 /bin 就是這裡的上一層目錄。執行時,要寫主類的全名(即:包括包名)如:中國.安徽.合肥
教材學習中的問題和解決過程
求最大公約數的函式有問題,我修改為:
程式碼除錯中的問題和解決過程
完成了
- 問題1:編寫PP74時,實現介面有問題。
- 解決方法:加上<實現介面的類名>就解決了,如上圖。
- 問題2:編譯時出了問題,用 javac *.java 來編譯。而且是在父資料夾。
- 問題3:公共類名與檔名不匹配
- 解決方法:仔細檢查檔名!大小寫!!!O 和 o 還有 P 和 p
-
看錯誤資訊時,應該直接看“錯誤”兩個字前面的程式名字,那個程式才是有錯誤的程式。
本週程式碼託管截圖
其他(感悟、思考等,可選)
收穫良多!溫故而知新。知道了toString()的方法。知道了很多其他術語。還有Linux中O和o的大小寫,P和p的大小寫的區別,還有I 和 i的區別。。。
學習進度條
程式碼行數(新增/累積) | 部落格量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 68/68 | 5/5 | 20/20 | |
第二週 | 354/422 | 1/6 | 18/38 |
參考資料
- Java程式設計 第八版
- Java2實用教程