1. 本周學習總結
1.1 寫出你認為本周學習中比較重要的知識點關鍵詞,如類、對象、封裝等
類 封裝 繼承 多態 抽象類 重寫 和重載
1.2 用思維導圖或者Onenote或其他工具將這些關鍵詞組織起來。
因為面板大小,圖片尺寸問題,導致圖片看起來有點模糊。有時間再整體修改設計一下。水平暫時有限,只能夠弄個簡單的概括性的思維導圖了
傳送門
2. 書面作業
以面向對象方式改造數據結構作業'有理數'(重點)
1.1 截圖你主要代碼(需要在程序中出現你的學號和姓名)並粘貼程序的git地址。
1.2 對比你的代碼與歷程的代碼,說明面向對象編程與面向過程編程有何區別?
面向過程的就是以一件要解決的事情為中心,然后分析解決問題的步驟,利用函數等來實現。
面向對象是以對象
為中心
2. 構造函數與初始化塊
2.1 結合PTA 5(構造函數與toString)說明構造函數有什么用?其函數格式有何特征?
- 對象初始化。
- 創建對象。想要創建對象必須要有構造函數。沒有聲明會使用默認的
初始化一個對象時會被執行函數名和類同名但是沒有返回類型
2.2 如果一個類不寫構造函數,它有構造函數嗎?如果一個類中只有帶參的構造函數,它有沒有不帶參數的默認構造函數?
會的,會創建以一個無參構造函數。有了一個帶參的話就不會創建不帶參構造函數
2.3 查看String類的源代碼,找出3個看得懂的String類的構造函數,並使用自己的話描述這3個構造函數的區別。
該構造方法會創建空的字符序列,注意這個構造方法的使用,因為字符串對象是不可變的。
public String(){
this.value = "".value;
}
直接將源 String 中的 value 和 hash屬性直接賦給目標 String。String 的值會影響到目標 String 的值。
public String(String original){
this.value = original.value;
this.hash = original.hash;
}
當通過char數組構建時,將char數組復制到value中去
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
2.4 結合PTA(構造函數與初始化塊)說明初始化塊與構造函數的異同。並說明,初始化塊與構造函數誰先執行?初始化塊與靜態初始化塊有何不同,誰先執行?
相同的是構造函數和初始化塊都可以對對象初始化,不同的是構造函數只能初始化相應的對象,而初始化塊卻是可以初始化所有對象。還有一個的就是初始化塊不接受參數,但構造函數可以接受有參和無參
靜態初始化塊多了static
,且靜態初始化塊只執行一次。
靜態初始化塊先執行
3.代碼分析:Math類
3.1 使用java.lang.Math類的方法時,為什么不需要new出一個Math對象,然后調用該對象上相應的方法?
public final class Math extends Object,沒有static修飾,所以Math不是靜態類,但是里面的方法是靜態的,所以可以直接用類名.方法名來調用
3.2 如果new Math()會產生什么錯誤?嘗試閱讀Math類源代碼,分析原因。
The constructor Math() is not visible
math 被private修飾,所以不能被外部所調用
3.3 進一步:你覺得什么樣的對象需要new出來才能用,調用什么方法時不必創建相應對象就可以使用?(重點檢查)
當我們需要調用這個對象里面的非靜態方法或屬性時,需要new出來,調用靜態方法的時候可以不用創建對象
4. 重載Overload
4.1 什么是重載?什么是構造函數重載?怎么才能區分兩個重載的方法?
重載:在類中同名不同參
構造函數重載:就是在一個類當中,可以定義多個同名的方法,他們中的參數類型或參數個數或者是順序不同,當我們給這個類創建對象時,就有了多種不同的創建方式
區分方式:參數個數以及類型或者參數的順序來判斷
4.2 在java.lang.Math類中舉出1個方法重載的例子?
5. 代碼閱讀: final
final修飾的變量不能改變,為什么如下代碼卻可正常運行?
final int[] NUMBS= {1,2,3,4,5}; NUMBS[2] = 1;
final修飾的變量不能改變,final修飾的數組的地址不能改變,但地址中的數值可以改變。這沒有改變引用變量的地址
6. Java8中的時間日期類:編寫函數public static boolean isMondayToFriday()
功能:判斷今天如果是周一到周五,返回true,返回false。main函數中調用該函數,如果為true則輸出“工作日+姓名學號”,否則輸出"休息+姓名學號"。
截圖:關鍵代碼。
提示:使用LocalDateTime, DayOfWeek類
7. 封裝
7.1 結合PTA(形狀),請用自己的話簡單總結一下面向對象中封裝是什么意思?有何好處?
在pta中,我們用private來修飾width,length,radius這些屬性來達到封裝的目的。這樣在了類的外部我們就不能操作這些數據了
可以徹底的隱藏類中方法的內部實現,操作簡單,提高對象數據的安全性
7.2 和封裝有關的關鍵字有哪些?
private default protected public
8. 結對編程實踐
找一個水平相近的同學完成1-2題實驗題。開始編程前,可先對內容進行討論。
寫出體驗報告,包括以下內容:1.對方姓名。2.所完成的題目。3.感想。4.照片(上次很多同學並未貼照片,請貼上)
一、
- 對方姓名:陳芳毅
- 完成的題目:jmu-Java-03面向對象基礎-02-構造函數與初始化塊.
- 我們一個查找資料,一個敲代碼,感覺還是很有意思的。
二、
- 對方姓名:張晨曦
- 完成題目:有理數
- 倆個人分工合作,速度快,效率高
3.github及PTA
3.1. github代碼提交記錄
在github的項目中,依次選擇“統計-Commits歷史-設置時間段”, 然后搜索並截圖
3.2 截圖PTA題集完成情況圖
需要有兩張圖(1. 排名圖。2.PTA提交列表圖)
3.3 統計本周完成的代碼量
需要將每周的代碼統計情況融合到一張表中,可使用最新版的代碼統計工具的-history參數,詳細用法見項目wiki地址。表格如下所示:
周次 | 總代碼量 | 新增代碼量 | 總文件數 | 新增文件數 |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 |
3 | 484 | 484 | 3 | 3 |