Week03-面向對象入門


1. 本周學習總結

1.1 寫出你認為本周學習中比較重要的知識點關鍵詞,如類、對象、封裝等

類 封裝 繼承 多態 抽象類 重寫 和重載

1.2 用思維導圖或者Onenote或其他工具將這些關鍵詞組織起來。


因為面板大小,圖片尺寸問題,導致圖片看起來有點模糊。有時間再整體修改設計一下。水平暫時有限,只能夠弄個簡單的概括性的思維導圖了

傳送門

2. 書面作業

以面向對象方式改造數據結構作業'有理數'(重點)

1.1 截圖你主要代碼(需要在程序中出現你的學號和姓名)並粘貼程序的git地址。


github地址

1.2 對比你的代碼與歷程的代碼,說明面向對象編程與面向過程編程有何區別?

面向過程的就是以一件要解決的事情為中心,然后分析解決問題的步驟,利用函數等來實現。
面向對象是以對象為中心

2. 構造函數與初始化塊

2.1 結合PTA 5(構造函數與toString)說明構造函數有什么用?其函數格式有何特征?

  1. 對象初始化。
  2. 創建對象。想要創建對象必須要有構造函數。沒有聲明會使用默認的
    初始化一個對象時會被執行函數名和類同名但是沒有返回類型

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.照片(上次很多同學並未貼照片,請貼上)
一、

  1. 對方姓名:陳芳毅
  2. 完成的題目:jmu-Java-03面向對象基礎-02-構造函數與初始化塊.
  3. 我們一個查找資料,一個敲代碼,感覺還是很有意思的。

二、

  1. 對方姓名:張晨曦
  2. 完成題目:有理數
  3. 倆個人分工合作,速度快,效率高

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM