1. 程式人生 > >[Java]《Java程式設計思想》知識點總結(堅持逐步更新)

[Java]《Java程式設計思想》知識點總結(堅持逐步更新)

第1章

1.抽象與物件:程式語言提供抽象機制,解決問題的複雜性取決於抽象的型別和質量。“型別”指“所抽象的是什麼”。

應只針對待解決的問題建模。面向物件方式提供表示問題空間中的元素的工具,將問題空間中的元素及其在解空間中的表示稱為”物件“。

程式可通過新增新型別的物件使自身適用於某個特定問題,當你閱讀描述解決方案的程式碼時,也是在閱讀問題的表述。這是一種更靈活和強有力的語言抽象。

2.面嚮物件語言的五個基本特性:

1)萬物皆物件 2)程式是物件的集合,通過傳送訊息互動(呼叫) 3)每個物件都由其他物件構成 4)每個物件都擁有其型別(類)

5)某一特定型別的所有物件都可接收同樣的訊息

物件具有狀態(內部資料)、行為(方法)和標識(唯一地址)

3.介面:類描述了具有相同特性(資料元素)和行為(功能) 的物件集合,實際上就是一個數據型別。介面確定了對某一特定物件所能發出的請求。程式中必須有滿足這些請求的程式碼,這些程式碼與隱藏的資料一起構成了實現。每個可能的請求都有一個方法與之相關聯。

4.UML:Unified Modelling Language,統一建模語言——每個類用一個方框表示,類名在方框頂部,資料成員描述在方框中間部分,方法在方框底部。通常,只有類名和公共方法被示於UML設計圖中。

5.服務提供者:1)呼叫或建立提供理想服務的物件來解決問題 2)提高物件內聚性:高內聚是軟體設計基本質量要求之一,指的是一個軟體構件各方面”組合“得很好。要避免將過多的功能都塞在同一物件中。

6.訪問控制:程式開發人員按照角色分為類建立者(那些建立新資料型別的程式設計師)和客戶端程式設計師(那些在其應用中使用資料型別的類消費者),類建立者構建的類只向客戶端程式設計師暴露必需部分,而隱藏其他部分。原因:1)讓客戶端程式設計師無法觸及他們不應該觸及的部分 2)介面和實現分離,庫設計者可以改變類內部工作方式而不會影響到客戶端程式設計師。

訪問許可權:1)public——任何人可用 2)private——只有類建立者和型別內部方法可訪問 3)protected——繼承的類可訪問 4)預設訪問許可權——沒有使用前面任何指定詞時發揮作用,通常稱包訪問許可權,這種許可權下,類可訪問同一個包中其他類成員,在包之外,如同指定了private一樣。

7.組合與繼承

使用現有的類合成新的類,被稱為組合(composition),如果組合動態發生,稱為聚合(aggregation),組合被視為"has-a"(擁有)關係。組合更簡單靈活,建立新類時應首先考慮組合。

一個基型別包含所有匯出型別共享的特性和行為,子類複製了基類的介面,與基類具有相同型別。改變現有基類的方法的行為,稱為覆蓋(overriding)。

8.多型

把一個物件當作其泛化型別物件對待,可以編寫不依賴於特定型別的程式碼(僅僅和基類互動)。這時需要在函式呼叫機制上採用後期繫結:被呼叫程式碼直到執行時才能確定。將匯出類看做是它的基類的過程稱為向上轉型(upcasting):

9.單根繼承結構

Java中的所有類最終都繼承自單一基類:Object

在單根繼承結構中所有物件都具有一個共用介面,所以它們歸根結底都是相同的基本型別;所有物件都具備某些功能;不會因為無法確定物件型別而陷入僵局。

10.容器:儲存物件,執行時確定空間大小

1)不同容器提供不同型別的介面和外部行為 2)不同容器對於某些操作具有不同效率

11.引數化型別:JavaSE5以前,容器儲存的物件都只具有Java通用型別Object.物件置入容器會丟失其身份。這時要變回原型別需要向下轉型:轉型錯誤會發生執行時異常,所以需要以某種方式記住究竟是什麼型別。

建立儲存特定型別的容器,稱為引數化型別機制。Java中稱泛型。

12.物件建立和銷燬

儲存:1)置於堆疊或靜態儲存區域,明確儲存空間分配和釋放(C++) 2)在被稱為堆(heap)的記憶體池中動態建立:執行時確定多少物件、生命週期和具體型別

Java完全採用動態記憶體分配方式。提供”垃圾回收器“機制,自動發現物件何時不再使用,繼而銷燬它。

13.異常處理

Java將異常處理直接置於程式語言中,異常是一種物件,從出錯地點被”丟擲“,被處理相應型別的異常處理器”捕獲“。異常處理就像與程式正常執行並行的,錯誤發生時執行的另一條路徑。不會干擾正常執行程式碼。Java內建異常處理並強制使用。它是唯一可接受的錯誤報告方式。

14.併發

把問題切分成多個可獨立執行的部分,提高程式響應能力。獨立執行的部分稱為執行緒,上述概念稱為”併發“。

隱患:共享資源。多個並行任務訪問同一資源,就會出問題。解決辦法:某個任務鎖定某項資源,完成其任務,然後釋放資源鎖,使其他任務可使用此資源。

第2章

1.引用操縱物件:可單獨建立,不一定有一個物件與之關聯。向一個未關聯物件的引用傳送訊息會返回一個執行時錯誤。安全的做法是建立引用的同時初始化:String s="dlsl".

2.儲存資料的地方

1)暫存器 2)堆疊(通用RAM中):堆疊指標向下移動分配新記憶體,向上移動釋放記憶體 3)堆:一種通用記憶體池(也位於RAM),存放所有Java物件。編譯器不需知道儲存資料存活時間。會自動進行儲存分配。4)常量儲存:程式程式碼內部; ROM中:字串池,所有字面常量字串和具有字串值的常量表達式都自動記憶體限定,置於特殊的靜態儲存區 5)非RAM儲存:資料完全存活於程式之外 例子:流物件——轉化成位元組流被髮送給另一臺機器  持久化物件——存放於磁碟,需要時恢復成常規RAM物件。

3.基本資料型別:直接儲存”值“,不用new建立變數,並非引用,不置於堆,而置於堆疊中,更加高效。

Java基本資料型別所佔儲存空間大小不隨硬體架構而變化:


boolean——儲存空間大小無明確指定,僅定義為字面值true或false

4.Java陣列

Java確保陣列會被初始化,而且不能在它的範圍之外被訪問。建立一個數組物件時,實際上是建立了一個引用陣列,每個引用會自動被初始化為一個特定值:null.在使用任何引用前,必須為其指定一個物件,如果試圖使用一個還是null的引用,執行時會報錯。因此陣列錯誤在Java中可以避免。

基本資料型別的陣列:編譯器確保這種陣列的初始化,將這種陣列所佔記憶體全部置零。

5.類基本資料型別成員預設值

基本資料型別變數只有作為類的成員使用時,Java才確保給定其預設值,確保那些是基本型別成員得到初始化,防止程式錯誤。但這些初始值可能是不正確甚至不合法的,所以最好明確對變數初始化。

上述確保初始化的方法不適用於”區域性“變數:int x;可能是任意值,不會被自動初始化為零。使用前應賦予一個適當值,否則Java會在編譯時返回一個錯誤。

6.方法基本組成:名稱、引數、返回值和方法體。

方法名和引數列表(合稱”方法簽名“)唯一標識某個方法。

7.引數列表:傳遞物件實際上是傳遞引用,基本資料型別是例外:傳遞是是值。返回:如果返回型別不是void,編譯器會強制返回一個正確型別的返回值。

8.static關鍵字

建立類時只想為某特定域分配單一儲存空間,希望某個方法不與包含它的類的任何物件關聯在一起。

由於static方法不需要建立任何物件,所以不能簡單呼叫其他非static域或方法而沒有指定其物件。

9.註釋和嵌入式文件

將程式碼和文件”連結“起來,使用一種特殊註釋語法來標記文件,一個工具提取註釋:javadoc——解析特殊註釋標籤,將毗鄰的類名或方法名抽取出來,輸出一個HTML檔案。

所有javadoc命令都只能在/**中出現,結束於*/獨立文件標籤以@開頭,置於註釋行最前面。行內文件標籤可出現在任何地方,也以@開頭,但括在花括號內。

javadoc只能為public和protected成員進行文件註釋,private註釋會被忽略掉。可以通過-private標記包括在內。

相關推薦

[Java]《Java程式設計思想知識點總結堅持逐步更新

第1章 1.抽象與物件:程式語言提供抽象機制,解決問題的複雜性取決於抽象的型別和質量。“型別”指“所抽象的是什麼”。 應只針對待解決的問題建模。面向物件方式提供表示問題空間中的元素的工具,將問題空間中的元素及其在解空間中的表示稱為”物件“。 程式可通過新增新型別的物件使自身

閱讀java編程思想總結

info -s 等價 ace 分享圖片 xtend 發出 new idt 學而不思則罔,思而不學則殆 一、對象(Object) 1、機器模型(方案空間),實際解決問題的問題模型(問題空間)。 2、我們將問題空間中的元素以及它們在方案空間的表示物稱為“對象”(Object)。

Java面試知識點總結牛客網

---------------------https://blog.csdn.net/u012456528/article/details/79759487?utm_source=copy 1. 什麼是Java虛擬機器?為什麼Java被稱作是“平臺無關的程式語言”?

Java程式設計思想-Class物件附上課後題

什麼是Class物件? 首先Class物件是用來建立類的所有的“常規”物件,Java使用Class物件來執行RTTI。 每個類都有一個Class物件,該物件由JVM建立和載入。當程式建立第一個(注意是第一個喲)對類的靜態成員的引用時,就會載入這個類。這一點說明了構造器也是類的靜態方法,即使在

java 程式設計思想課後題第四章

練習1: public class twoSum { public static void main(String[] args){ for(int i = 1;i <= 100;i ++){ System.out.pr

java多線程知識點總結面試利器

代碼簡潔 部分 ren hashmap cep 圖片 協作式 dex 兩個 1.什麽是進程和線程 進程:程序運行資源分配的最小單位,進程內部有多個線程,會共享這個進程的資源 線程:CPU調度的最小單位,必須依賴進程而存在。 2. 新起線程方法 兩種方法:

java中方法總結每周更新

實例 參數 創建 方法 get ack bject 子類 generate 1、URLEncoder.encode(username,"utf-8")將“utf-8”編碼的username先解碼,然後再采用URL編碼 2、URLDecoder.decode(autoLogi

Java 中內部類特性總結吐血之作

內部 不能 今天 了解 基本 靜態 外部類 pro this PS:今天花了整個下午時間看內部類相關的內容,因知識點多而雜,故記之如下。 一、內部類的作用 內部類看起來是一種代碼隱藏機制:將類置於其他類的內部。它還了解外部類,並能與之通信;使用內部類可以實現閉包;內部

Java內部類超詳細總結含程式碼示例

什麼是內部類 什麼是內部類? 顧名思義,就是將一個類的定義放在另一個類的內部。 概念很清楚,感覺很簡單,其實關鍵在於這個內部類放置的位置,可以是一個類的作用域範圍、一個方法的或是一個程式碼塊的作用域範圍。 所以理解了概念只是第一步,掌握細節才能徹底搞定Java的內部類特性。 看例子,這是最普通的內部類: pu

計算機作業系統知識點總結前3章

第一章 作業系統引論1、作業系統是什麼?作業系統為使用者完成所有“硬體相關,應用無關“的工作,以給使用者方便、高效、安全的使用環境1.1、定義:   作業系統是一個大型的程式系統,它負責計算機的全部軟、硬體資源的分配、排程工作,控制並協調多個任務的活動,實現資訊的存取和保護。

前端知識點總結HTML篇2

html概念、全稱、含義 web標準構成----結構、表現、行為 html基本結構 doctype ---- 宣告文件型別 常用標籤 img的屬性 src alt title 含義 a的屬性 href target含義 表格屬性 border-collapse table-layout:fixed 表單 bu

個人學習運維對資料庫基礎知識點總結適合新人觀看

oracle,mysql,sql server(mssql),DB2,MariaDB阿里 :x-DS        三、非關係型資料庫(not only sql)nosql資料庫:radis(鍵值對 ),MongoDB四、什麼是sql1、SQL結構化查詢語言,專門用於關係型資料庫的一種語言。2、ORACLE

java一一些經典技術問題不定期更新

一. Spring MVC 如何接受並處理一個請求的? 兩種方法 1、web.xml          首先我們會在 web.xml 中註冊一個 DispatcherServlet ,並令這個 servlet 接收所有的請求,專案啟動後Spring會掃描配置檔案,根據配置載

kettle----功能點用法總結不定期更新

技術分享 插入數據 ttl 指定 ima 用法 mage class 功能點 表輸入(從指定的數據庫中,讀取所查詢表的數據) 截圖如下: 允許簡易轉換: 替換SQL語句裏的變量: 從步驟插入數據: kettle----功能點用法總結(不定期更新)

Angular中響應式表單 FormBuilder、FormControl 、FormGroup、FormArray、setControl、setValue用法總結不定時更新

以我的專案作為示例,總結一下Angular響應式表單的應用和常用的方法: 1.建立表單 form.ts程式碼 import { Component, OnInit } from "@angular/core"; import { FormArray, FormBuilder, FormC

《快速上手React程式設計》學習心得正在逐步更新

第Ⅰ部分 React基礎 第3章 JSX 3.4 React和JSX陷阱 3.4.3 style屬性 style屬性命名必須使用小駝峰風格。例如: background-color變成backgroundColor <input style = {{fo

Python常用關鍵字和常用函式總結不定期更新

1.print('')            #可以直接列印字串&列表裡的所有資料,python2.x中print “” 無需加括號 2.轉換字串:str()    #將字元轉義成字串 3.字串:     (1)string.title()    #將字串轉義成標題(單詞首字母大寫)     (2)字

專案中遇到的一些問題總結08.23更新

寫一些最近工作中Vue專案中遇到的問題。 巴啦啦小魔仙,汙卡拉,全身變,小本本,出來吧! 會不定期更新,所以建議收藏。 1.獲取一個物件的鍵(key) 在某種特定需求下(未知的Object型別資料),我們想拿到這個未知物件中第一個元素的鍵(也就是newData)。程式碼如

c++開發中常見bug總結不定期更新

儘管平時千叮嚀萬囑咐,可是低階錯誤總是不可避免的會在程式開發過程中出現:因此博主記錄自己開發過程中出現過的錯誤,以便後期參考和總結:1. 通過指標加下標訪問陣列我自己寫的一段程式碼,通過結構體指標p_structA 逐個訪問結構體陣列A,A大小為3, 指標初始化, p_str

shell問題總結隨緣更新

class 正則表達式 hadoop 大量 一行 and 正則 斜杠 path $PATH的值為什麽可以使用cut命令切出列? $ echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/loca