Java基礎——封裝

来源:http://www.cnblogs.com/1693977889zz/archive/2017/06/15/7020488.html
-Advertisement-
Play Games

最近學習Java面向對象方面的知識點,一直沒時間更新博客,因為這塊的知識點真的蠻繞的。一個知識點一個知識點的往外冒,而且對於我這個初學者來說區分構造器和方法就花費了一整天的時間。現在準備再重新過一遍知識點。 先背下來一個理念: 面向對象程式設計是將數據放在第一位的,然後再考慮操作數據的方法。 之前, ...


最近學習Java面向對象方面的知識點,一直沒時間更新博客,因為這塊的知識點真的蠻繞的。一個知識點一個知識點的往外冒,而且對於我這個初學者來說區分構造器和方法就花費了一整天的時間。現在準備再重新過一遍知識點。

先背下來一個理念:

面向對象程式設計是將數據放在第一位的,然後再考慮操作數據的方法。

之前,再學習Java的優越性的時候,我們知道了Java是一種面向對象設計的程式設計語言。那到底什麼是面向對象程式設計呢?要弄懂它,首先我們簡單瞭解一下另一種程式設計。

一、面向過程程式設計:

面向過程程式設計就是自頂向下順序執行,逐步求精;其程式結構是按照功能劃分為若幹個基本板塊,這些板塊形成一個樹狀結構;各模塊之間的關係儘可能的簡單,在功能上相對獨立;每一板塊內部均是由順序、選擇和迴圈三種基本結構組成的;其板塊化實現的具體方法是使用與子程式。程式流程在寫程式時就已決定。

(這個概念是我在學習面向對象時在網上找的,我把它和麵向對象程式設計的概念抄在一張白紙上,其實我也不知道啥是面向過程程式設計,但是,當我學完一遍面向對象和類之後,再回來看這個概念時,是有收穫的。沒學過面向過程也不敢多言,僅僅學了一遍面向對象更不敢多加評論了。依照我的理解就是面向過程就像把某件事情的所有工作流程都弄成環環相扣的了,牽一發而動全身。而面向對象呢,它很聰明,它像一個製造大型機械的廠家,零件啥的它不一定都自己弄,但是它可以用盡辦法去拼裝(當然,拼裝你也要遵循人家制定的規則),這樣的好處在於,想改那塊都不用擔心整個工程跟著受牽連,尤其是在客戶端那塊。)

二、面向對象程式設計:

面向對象程式設計簡稱OOP,它是當今主流的程式設計範例,它已經取代了20世紀7年代的“結構化”過程化程式設計開發技術。面向對象就是把數據及對數據的操作方法放在一起,作為一個互相依存的整體,我們就叫它對象。對同類對象抽象出其共性,就形成了類。類中的大多數數據只能用於本類的方法進行處理。類通過一個簡單的外部介面與外界發生關係,對象與對象之間通過消息進行溝通。程式流程由用戶使用中決定。Java是完全面向對象的,必須熟悉OOP才能夠編寫Java程式。

(圖)演示面向對象程式設計與面向過程程式設計的不同

下麵這句話很重要:

面向對象的程式是由對象組成的,每個對象包含對用戶公開的特定功能部分隱藏的實現部分。(這句話真的是太重要了,以後學習單例、封裝、抽象類、介面的時候,就能體會的到了!)

三、類

類(class)是構造對象的模版或藍圖。由類 構造(construct)對象的過程成為創建類的實例(instance)。

在學習這裡的時候,不免會有些驚慌,那麼多類都需要記住啊?自己還要創建類?自己創建的類裡面的內容能想全面嗎?種種疑惑在心裡揮之不去。其實啊,用Java編寫的所有代碼多位於某個類的內部。標準的Java庫提供了幾千類,可以用於用戶界面設計、日期、日曆和網路程式設計。儘管如此,我們在弄自己的項目時,也是需要根據具體情況的不同進行增加、刪除和改動的。

四、封裝

封裝(encapsulation,有時候被成為數據隱藏),看視頻課,他們把封裝形容問get、set方法。從形式上看,封裝不過是將數據和行為組合在一個包中,並對對象的使用者隱藏了數據的實現方式。

對象中的數據稱為實例域(instance field),操作數據的過程稱作方法(method)。對於每個特定的類實例(對象)都有一組特定的實例域值。這些值的集合就是這個對象的當前狀態(state)。

下麵這句話很重要,背下來:

實現封裝的關鍵在於絕對不能讓類中的方法直接的訪問其他類的實例域。程式僅通過對象的方法與對象的數據進行交互。

封裝給對象賦予了'黑盒“特征,這是提高重用性和可靠性的關鍵。這意味著一個類可以全面地改變存儲數據的方式,只要仍舊使用同樣的方法操作數據,其他對象就不會知道或介意所發生的變化。

// 這句話是啥意思?就是說如果你哪天有需求想要定義一個Java的類,就不用擔心其他的類會受到你的干擾了,你可以通過擴展一個類來建立一個你需要的新類。別忘了,實際上,在Java中所有的類都源自於一個Object。以後,我會繼續介紹Object。

====封裝的過程:

1.封裝是將屬性私有化(private);

2.你要提供get/set方法(get/set不一定都提出來,具體看你自己的需求。如果你不想讓別人得到,就不提供get;如果你不想讓別人設置,你就拒絕提供set。)

====訪問符許可權:

訪問符 本類中 本包中 本包子類中 外包類 外包子類
public(常用) 可以訪問 可以訪問 可以訪問 可以訪問 可以訪問
protected 可以訪問 可以訪問 可以訪問 不可以訪問 可以訪問
預設 可以訪問 可以訪問 可以訪問 不可以訪問 不可以訪問
private(常用) 可以訪問 不可以訪問 不可以訪問 不可以訪問 不可以訪問

 代碼示例:

1 public class XiaoNanHai{
2 private int age;
3 public void setAge(int age){
4 if(age>=15&&age<=35)
5 this.age=age;}else{
6 System.err.println"你輸入的年齡不在指定範圍內,請重新輸入”);
7 8

 


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

-Advertisement-
Play Games
更多相關文章
  • 1. 為重用以及更好的維護代碼,`Python`使用了模塊與包;一個`Python`文件就是一個模塊,包是組織模塊的特殊目錄(包含`__init__.py`文件)。 2. 模塊搜索路徑,`Python`解釋器在特定的目錄中搜索模塊,運行時`sys.path`即搜索路徑。 3. 使用`import`關... ...
  • 編譯器是怎麼實現引用類型的呢?本篇文章複習了const常量和指針,在此基礎上推測了引用類型的本質。旨在加深對語言的理解,希望對你有所幫助。 ...
  • /* 這裡要說明一下 因為本人比較懶 博客中相關文章的內容更多的是對一書中代碼的整理和簡單註解方便自己日後複習和參考, 對相關內容感興趣的初學的朋友建議請先閱讀原文。此處的內容只能當成一種學習的補充和參考。謝謝! 因原書中領域模型+數據映射器的示例代碼是連貫在一起的 所以這裡就整理在一起了。 簡單介... ...
  • jdk1.7.0_79 對於線程池大部分人可能會用,也知道為什麼用。無非就是任務需要非同步執行,再者就是線程需要統一管理起來。對於從線程池中獲取線程,大部分人可能只知道,我現在需要一個線程來執行一個任務,那我就把任務丟到線程池裡,線程池裡有空閑的線程就執行,沒有空閑的線程就等待。實際上對於線程池的執行 ...
  • 段落 非常自然,一行文字就是一個段落。 比如 這是一個段落。 會被解釋成 這是一個段落。 如果你需要另起一段,請在兩個段落之間隔一個空行。 這是一個段落。 這是另一個段落。 會解釋成 這是一個段落 這是另一個段落 不隔一個空行的換行行為,在一些編輯器中被解釋為換行,即插入一個標簽。對與另外一些編輯器 ...
  • 面試時,面試官如果想考查你機算機網路學得怎麼樣,怎麼說也得問下TCP三次握手的過程吧? so, 我4月24號就開始複習電腦網路,斷斷續續複習了3天吧。 ISP: Internet Service Provider 網際網路服務提供商 Eg: 中國電信、中國聯通和中國移動 路由器是一種專用電腦。路由 ...
  • xml文件讀取到資料庫 第一步,導包 c3p0,dom4j,jaxen,MySQL-connector 第二步 xml文件,config文件 第三步 javabean 第四步 c3p0的工具類 第五步 讀取xml文件 SAXReader中的xpath的方式 首先需要map集合添加別名,遍歷讀取到的文 ...
  • java.util.concurrent.locks 介面 Condition Condition 將 Object 監視器方法(wait、notify 和 notifyAll)分解成截然不同的對象,以便通過將這些對象與任意 Lock 實現組合使用,為每個對象提供多個等待 set(wait-set) ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...