Java編程思想總結筆記The first chapter

来源:http://www.cnblogs.com/wujiancheng/archive/2017/07/14/7172273.html
-Advertisement-
Play Games

總覺得書中太啰嗦,看完總結後方便日後回憶,本想偷懶網上找別人的總結,無奈找不到好的,只好自食其力,儘量總結得最好。 第一章 對象導論 看到對象導論覺得這本書 目錄: 1.1 抽象過程1.2 每個對象都有一個介面1.3 每個對象都提供服務1.4 被隱藏的具體實現1.5 復用具體實現1.6 繼承1.7 ...


  總覺得書中太啰嗦,看完總結後方便日後回憶,本想偷懶網上找別人的總結,無奈找不到好的,只好自食其力,儘量總結得最好。

 

第一章  對象導論

 

看到對象導論覺得這本書

 

目錄:

1.1 抽象過程
1.2 每個對象都有一個介面
1.3 每個對象都提供服務
1.4 被隱藏的具體實現
1.5 復用具體實現
1.6 繼承
1.7 伴隨多態的可互換對象
1.8 單根繼承結構
1.9 容器
1.10 對象的創建和生命期
1.11 異常處理:處理錯誤
1.12 併發編程
1.13 Java與Internet
1.14 總結


覺得看完終於要精通Java了,然而本章只是介紹開發方法概述在內的OOP的基本概念,瞭解對象的重要性。


1.1 抽象過程

通過其他語言的缺點來說明面向對象語言的好。

彙編語言是對底層機器的輕微抽象、命令式語言(如C、BASIC)是對彙編語言的一種抽象,彙編語言直接控制電腦的硬體,命令式語言則基於電腦結構解決問題。OOP語言基於問題的結構解決問題,不會受限於任何特定類型的問題。

1.2 每個對象都有一個介面

介面:確定了對某一特定對象所能發出的請求      對象:類型名稱

看文字描述已經上升到哲學問題,從下麵例子很好理解。

Light lt = new Light(); //對象
lt.on;//介面向對象發出請求

 

1.3 每個對象都提供服務

好處:1、有助於提高軟體的內聚性   2、每個對象都可以很好的完成一項任務,但是它並不試圖做更多的事情。

理解:設計一個音樂播放器,有歌詞顯示、播放,暫停、背景顯示(服務),這時不要只提供一個對象(它並不試圖做更多的事情),可以提供三個對象,完成三個服務,三個對象提供三個服務完成一個音樂播放器(內聚性)。

1.4 被隱藏的具體實現

從Github下載一個框架,我的目標是實現快速應用開發,框架只需向我提供方法的調用即可,其他的隱藏了也不會影響我的調用

訪問許可權:public > protected(包+基類) > 包訪問許可權(沒有關鍵詞時預設) > private

1.5 復用具體實現

復用指在一個類中使用繼承或者組合。

  • 繼承 ----is a 的關係     荔枝是水果
  • 組合 ----has a 的關係   有一種睡覺的方式是趴著

1.6 繼承

從父類中派生出子類,子類能吸收父類的數據屬性和行為,並能擴展新的能力。

1.7 伴隨多態的可互換對象

 

class Shape{ 
  draw();
  erase();
  move();
  getColor();
  setColor();
}
void doSomething(Shape shape){
shape.erase();
//...
shape.draw();
}

Circle circle = new Circle(); //父類為Shape
Triangle triangle = new Triangle();  //父類為Shape
Line line = new Triangle();  //父類為Shape
doSomething(circle);
doSomething(triangle);
doSomething(line);

對doSomething的調用會自動地正確處理,而不管對象的確切類型(可互換對象)。

doSomething(Shape shape)的執行是指你是Shape類或者父類為Shape,而不是你是Circle類就執行這樣,你是Triangle 類就執行那樣。理解了可以去看設計模式之策略模式。

這裡還涉及到向上轉型,如下圖:

 

1.8 單根繼承結構

 1、所有類都繼承自單一的基類

public class JianCheng extends Object {  
}  
public class JianCheng {  
    public static void main(String[] args) {  
        JianCheng jiancheng= new JianCheng();  
        System.out.println(JianCheng instanceof Object);  
    }  
}  

輸出:true     //說明 JianCheng 類預設繼承 Object

2、保證所有對象具有某些功能

Object 的方法會被子類所繼承,例如: clone()、equals(Object obj)、toString() 等方法。

3、垃圾回收變得容易

對象保證有其(Object)類型信息,因此不會因無法確定對象的類型而陷入僵局。這對於系統級操作顯得十分重要(如異常處理)。

1.9 容器

持有對其他對象的引用稱為容器(集合),例如List(用於存儲序列),Map(也被稱為關聯數組,用來建立對象之間的關聯),Set(每種對象類型只持有一個),以及諸如隊列、樹、堆棧等更多的構件。

ArrayList與LinkedList的比較,前者是數組的形狀,隨機訪問元素開銷小,但插入、刪除操作開銷大。後者是鏈表形狀,插入、刪除操作方便。

1.10 對象的創建和生命期

認識對象置於堆棧和堆的區別

  • 堆棧 --間分配和釋放置於優先考慮的位置,犧牲了靈活性,因為必須知道對象確切的數量、生命周期和類型。
  • 堆 --記憶體池中動態的創建對象,運行時才知道對象的數量,生命周期和類型。動態管理所以需要大量的時間在堆中分配存儲空間,但創建存儲空間和釋放存儲空間非常方便。

Java 採用了動態記憶體分配的方式,使用 new 關鍵字創建對象,編譯器可以確定對象存活的時間,並通過“垃圾回收器機制”自動銷毀它。

1.11 異常處理:處理錯誤

異常是一種對象,從出錯地點被拋出,並被特定類型的錯誤異常處理器捕獲,通過try--catch或者throw。異常處理就像是與程式正常執行路徑並行的、在錯誤發生時執行的另一條路徑。

Java代碼重沒有編寫正確的處理異常的代碼,那麼就會得到一條編譯時的出錯消息。例如:IOException,ClassCastException(類轉換異常),NullPointerException(空指針異常)等。

1.12 併發編程

同一時刻處理多個任務的思想,也就是多線程運行。

同步多線程運行有一個隱患,共用資源。A本來想使用a=Love You 但在某個線程導致a = hate you 然後A使用了,這樣A肯定告白失敗。

1.14 總結

第一章全是理論知識,而且很多知識點明明很容易卻長篇大論導致難以理解,乾貨有卻夾雜太多虛的了。

轉載註明:http://www.cnblogs.com/wujiancheng/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、藉助列表 上述代碼實現了隨機驗證碼的功能,但是只能生成包含小寫字母的隨機驗證碼;並且我們也是藉助列表完成的,字元串的拼接加上列表,字元串jion()方法,生成了隨機驗證碼。下麵我們來嘗試也生成大寫驗證碼的方法。 由於數據之間有三種關係,大於,小於,等於,這樣把每種情況都進行分析,就能生成三種隨機 ...
  • 作者:匿名用戶鏈接:https://www.zhihu.com/question/21653286/answer/95532074來源:知乎著作權歸作者所有,轉載請聯繫作者獲得授權。 想學習Python3,但是暫時又離不開Python2。在Windows上如何讓它們共存呢? 目前國內網站經常會讓大家 ...
  • C++隨機數 一、 產生1-52的隨機數 ...
  • 實際開發中,Junit單元測試是必不可少的。在spring boot 中可以通過測試模塊(spring boot starter test)快速使用單元測試功能。 開始 本示例在 spring boot 1.5.4 版本測試通過 1、pom.xml中添加配置spring boot starter t ...
  • hibernate一級緩存 1.Hibernate一級緩存又稱為“Session緩存”,“會話級緩存”。 2.通過Session從資料庫查詢實體時會把實體在記憶體中存儲起來,下一次查詢同一實體時不再從資料庫獲取,而是從記憶體中獲取,這就是緩存 3.一級緩存的生命周期和Session相同,Session銷 ...
  • 今天總結一下最基礎的輸入輸出和運算符 輸入: python3里都是input("") input() name = input() #輸入的值會直接賦值給name name = input("請輸入你的姓名:") #("")里的話是輸入提示信息 ps: 輸入的值會直接賦值給name。 input輸入 ...
  • 變數是保存存儲值的記憶體位置。也就是說,當創建一個變數時,可以在記憶體中保留一些空間。 基於變數的數據類型,解釋器分配記憶體並決定可以存儲在保留的存儲器中的內容。 因此,通過為變數分配不同的數據類型,可以在這些變數中存儲的數據類型為整數,小數或字元等等 ...
  • 基礎: 什麼是進程(process)? 每一個程式的記憶體是獨立的,例如:world不能訪問QQ。 進程:QQ是以一個整體的形式暴露給操作系統管理,裡面包含了各種資源的調用(記憶體管理、網路介面調用等)。啟動一個QQ,也就是啟動了一個進程。 什麼是線程(thread)? 線程是操作系統能夠進行運算調度的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...