1. 程式人生 > 其它 >Java前五週學習筆記(修正版)

Java前五週學習筆記(修正版)

(1)前言 :

  • 面對物件具有三大特性:封裝性、繼承性和多型
  • 類的分類

1) 實體類   最基本的類

2) 業務類(控制類)   目的:減少耦合

3) 介面類   介面、展示

  • 耦合性/內聚性

耦合性:兩個類之間的緊密程度

類之間的耦合性越低越好,方便擴充套件

  • 面對物件之間的關係

1) 關聯

2) 聚集(聚合、組合)    聚合整體和部分的生存期可以不同,組合整體和部分的生存期一致

3) 依賴

4) 繼承   一個類繼承另一個類的所有屬性和方法,與此同時可以在父類的基礎上進行擴充套件,擁有父類沒有的屬性或方法

  •  多型                                                                                                                 不同的物件接收到同樣的訊息時會產生不同的操作
  • 面向物件七個原則

1. 單一職責原則

2. 里氏替換原則

子類的方法父類必須有

3.依賴倒置原則

有繼承關係的兩個類有依賴關係,依賴抽象,不依賴具體

4.介面隔離原則

一個接口裡面的方法越少越好

5. 迪米特法則

(1):不要和陌生人說話

(2):只和你的直接朋友通訊

(3):最少知識原則

6. 開閉原則

對於修改是關閉的,對於增加是開啟的(程式碼只能加不能刪)

7.合成複用原則

單純實現複用用聚集

  • MVC設計模型

 

  • 容器

能裝載物件的,被叫做容器

  • 泛型

把型別作為引數  尖括號括起來的不能是基本型別

  • 八種基本型別

int long short char float double byte boolean

  • 修飾符

Private public protected default

Static final abstract

Class interface

Extends implenments

Object this super   this(),this.

String 定長字串 StringBuilder StringBuffer

StringBuffer使用原因:

1. 變長字串

2. 併發,執行緒安全的

非併發用 StringBuilder,併發用StringBuffer

List ArrayList LinkedList

Arrays

Collections

Math

Random

 

(2)設計與分析:

雨刷器系列:

1、brush1

第1個雨刷器較為簡單,其展示了對類的分工,體現了單一職責原則。

2、brush(MVC)

MVC模式是軟體工程中的一種軟體架構模式,它把軟體系統分為三個基本部分:模型(Model)、檢視(View)和控制器(Controller)。該實驗則在原本的基礎上加以改進,具體體現在將各實體類中的建構函式為 private,這樣該類就不會被例項化。

 

2、brush(繼承)

與之前的幾個雨刷器實驗最大的區別在於其使用了抽象類,並運用繼承的方法。在該實驗中充分體現了面向物件三大特性中的“多型”與“繼承性”,提高了程式碼的擴充性和可維護性。值得注意的是:抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下預設為public;抽象類不能直接例項化,需要依靠子類採用向上轉型的方式處理;抽象類必須有子類,使用extends繼承,一個子類只能繼承一個抽象類;子類(如果不是抽象類)則必須覆寫抽象類之中的全部抽象方法(如果子類沒有實現父類的抽象方法,則必須將子類也定義為為abstract類。

 

 

 

 

 

第一次作業:

題目集1涉及類設計,題目對於類的呼叫及類的定義瞭解有一定要求,需要對類的理解較深刻清晰,這樣就可以完成該題目集。其中7-3與7-4的區別需要分辨類與類之間的聯絡。

 

 

 

 

 

 

第二次作業:

題目集2所涉及的知識點較為單一,比較細緻,整體比較簡單,不存在太大的問題,按照題目示例做好輸入、輸出,使用恰當的選擇語句,這樣就可以完成該題目集。在7-7中判斷三角形的型別運用操作符結合三角形的性質,就可以判斷出三角形是什麼型別。

第三次作業:

7-1

本題需要將字母轉化為數字,這裡可以利用ASII碼裡字母之間的差值為1,只要將a/A定義為1,這樣後面的字母自然而然地轉換為數字。

 

 

7-2

這裡輸入的這串字元中每串有效字元八位,之後有奇效驗位和結束符,奇效驗是根據有效字元判斷,校驗線路在收到數後,通過發生器在校驗位填上 0 或 1,以保證和是奇數個 1。程式首先要判斷各種錯誤情況,利用length() 方法、charAt() 方法擷取字串中子串用於判斷,還有substring 方法擷取指定字串。將輸入的字串遍歷一遍得到要判斷的各個位置上的數字,這樣就可以根據題意判斷可能會出現的各種情況,先判斷錯誤的幾種情況,然後再判斷正確的情況。這道題主要考驗對字串的操作,以及擷取字串。

 

 

 

 

 

7-3

本題需要擷取字串、對比字串是否一樣,我用 substring 方法擷取自定位置的子串,使用 equals 方法將擷取的字串與指定字串對是否一樣,若一樣則返回true,則能執行 if 語句裡的語句。

 

 

 

第三次作業:

7-1

本題主要針對於對座標的輸入合法性的判斷,考驗我們對輸入的掌握,針對以逗號或者其他符號為分隔符的情況,我們需要使用 spilt 方法設定分隔符形式以及

Double.parseDouble()方法,這樣我們可以得正確的座標輸入。在計算距離時使用 Math.abs 與 Math.sqrt 兩種數學函式。

 

 

7-2

本題與第二題相像,同樣是對座標輸入合法性的判斷,以及對switch語句的運用,還有對點構成的三角形數學運算,同樣是運用 abs 等數學方法,本題涉及了幾種情況的選擇,所以在幾種選擇語句中,我選擇了switch語句,這樣會使程式碼更加簡潔直觀,在不同的情況下用與 & 、或 | 。在輸入的時候,我將座標存入字元陣列,這樣便於使用座標。在判斷兩個數是否相等時,考慮到 double 運算時的精度損失,當差值小於0.00001時就看作是兩個相等的數。

 

 

 

 

 7-3

      本題幾乎囊括了前兩題的知識點,涉及了許多三角形的數學知識,並且需要考慮多種不同的情況,這就考驗了我們對知識的熟練程度,以及程式碼的簡潔程度,所以需要構建許多類方法。我嘗試用charAt(indx) 方法遍歷字元陣列,但結果並不是我想的那樣會輸出是否合法。我又換成將字元陣列轉換為字串一個一個字元遍歷,以flag標記是否有不符合標準的情況,結果和第一種方法一樣不了了之。在本題當中涉及的數學方法,我掌握得不夠好,導致有些情況實現不了。

(3)採坑心得:

       在做題過程中我因為誤判奇效驗的方法而寫錯,以至於在測試的時候一直過不了測試點,一直出現錯誤的輸出,後來查資料才發現方法用錯了。在擷取字串時不知如何將擷取的子串與另一個字串比較,需要運用 equals 方法。以及在 length 方法使用上字串與字元陣列的使用方法是不一樣的,最開始做題時出現了關於length方法的報錯才知道使用上的區別。在測試時輸出有時為空,其實是有時程式沒有走到該步驟。有時因為慣性思維單個字元我用了 " " ,單字元理應用 ' ' ,所以程式報錯。在資料集2中7-2題目裡,在字串只有十一位時,返回的結果一直不正確,測試點顯示錯誤。在資料集3中,由於我不懂如何判斷輸入數字是否合法,暫時也找不到方法,我嘗試標記字元,但結果一直為空,我不知道是方法出現問題還是某一個環節出現差錯,我還在驗證當中,並且在運用數學方法上我也有所欠缺,導致有些步驟我不知道如何實現。在出現問題時應該首先看看錯的地方是否有語法錯誤或者有邏輯錯誤,尤其是邏輯錯誤隱藏最深,容易讓人忽略,導致測試一直報錯。當方法用錯時,或者方法不清楚時,查詢資料、看書是最有用快捷的方法,當然在查詢的過程中我們也應該不斷思考這方法如何用、為什麼要用這個方法、這個方法可不可行以及能否自己得出方法。

 

 

 

 

 

 

 

 (4) 改進建議

       每個測試點加上註釋,這樣可以讓學生們瞭解明白自己到底是哪一點沒有做好,為改進程式碼提供一個方向。在測試時不知道自己哪裡錯了,不清楚改的方向在哪,難免焦躁,如果有註釋指明是哪種型別的資料過不了,那麼我們的效率會更高,也會提高學生的積極性。

(5) 總結:

       雨刷器系列實驗與題目集由淺到深,知識點層層遞進,且涉及廣泛。類的設計邏輯對於我來說難度有點大,這也讓我意識到了自己的不足,意識到自己還有許多需要改進的地方,需要學習的地方,有些我認為自己懂了的地方,實際上我並沒有真正懂。我需要更多的知識來充實自己這樣才不會出現寸步難行,無法動手的情況。在知識掌握上,我還是比較淺顯,所以在真正運用上還是不夠熟練,有些時候甚至沒有用對。在意識到自己的不足後,我會改進自己的學習方法以達到更好的學習的效果。

       我學會了:類的概念,面向物件基本設計原則,繼承,MVC設計模式以及一些Java基礎類。