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 }
Java基礎——封裝