[Java入門筆記] 物件導向編程基礎(一):類和對象,java物件導向編程

來源:互聯網
上載者:User

[Java入門筆記] 物件導向編程基礎(一):類和對象,java物件導向編程
什麼是物件導向編程?

  我們先來看看幾個概念:

面向過程程式設計

面向過程,是根據事情發展的步驟,按進行的順序過程劃分,面向過程其實是最為實際的一種思考方式,可以說面向過程是一種基礎的方法,它考慮的是實際地實現,一般的面向過程是從上往下步步求精。

例如:如果你要吃飯,那需要:“買菜-洗菜-做飯-吃飯”等等,一步一步的來設計,就是面向過程

結構化程式設計

結構化程式設計是主張通過按功能來分析系統需求的一種設計思想。其主要原則可以概括為:

自頂向下:程式設計時,應先考慮總體,後考慮細節;先考慮全域目標,後考慮局部目標。不要一開始就過多追求眾多的細節,先從最上層總目標開始設計,逐步使問題具體化。

逐步細化:對複雜問題,應設計一些子目標作為過渡,逐步細化。

模組化設計:一個複雜問題,肯定是由若干稍簡單的問題構成。模組化是把程式要解決的總目標分解為子目標,再進一步分解為具體的小目標,把每一個小目標稱為一個模組。

結構化程式設計首先採用結構化的程式分析方法進行功能需求分析,然後使用結構化設計方法對系統進行設計,最後採用結構化編程方式進行系統實現。
這種採用結構化程式設計主張按功能把軟體逐步細化,因此這種方法也被稱為面向功能的程式設計方法

結構化程式設計裡最小的程式單元是函數,每個函數都負責完成一個功能,作為程式入口的函數被稱作主函數,由主函數調用其他函數,其他函數再調用其他一些函數,從而完成整個程式的功能。

圖中可以看出,結構化程式設計自頂而下的設計方式,將一些功能定義成函數模組,再一步步細化功能。結構化程式設計具有兩個不足之處:

1、設計不夠直觀,需要將客觀世界的模型分解成一個一個的功能,每個功能處理一定的資料。

2、可擴充性不強,當其中某一個函數需要修改其功能是,需要自上而下地修改模組結構。

 物件導向程式設計

物件導向就是針對一個功能,而進行模組的劃分,這部分和結構化程式很相似,但是有不同點,就是對象有繼承,多態等形式,使得你沒必要在大體相同地方要重新寫程式。它從現實世界中客觀存在的事物出發來構造軟體系統,強調以現實世界中的事物(既對象)來思考問題。

使用物件導向方式開發,其最小的程式單元是類,這些類可以產生系統中的多個對象,而這些對象則直接反應為客觀世界中的各種事物,如:

有“人”這樣一個類,他有什麼特徵(年齡、體重等),有什麼功能(吃飯、行走等),如果我們要完成上面面向過程中的功能,我們只需調用某個“人”對象的“食”方法即可。

程式的三種基本結構

無論是上面的哪種設計思想設計和實現程式,程式的設計都有可能會涉及都下面三種程式的結構:

順序結構

順序結構表示程式中的各操作是按照它們出現的先後順序執行的。

選擇結構

選擇結構表示程式的處理步驟出現了分支,它需要根據某一特定的條件選擇其中的一個分支執行。選擇結構有單選擇、雙選擇和多選擇三種形式。

迴圈結構

迴圈結構表示程式反覆執行某個或某些操作,直到某條件為假(或為真)時才可終止迴圈。在迴圈結構中最主要的是:什麼情況下執行迴圈?哪些操作需要迴圈執行?迴圈結構的基本形式有兩種:當型迴圈和直到型迴圈。

當型迴圈:表示先判斷條件,當滿足給定的條件時執行迴圈體,並且在迴圈終端處流程自動返回到迴圈入口;如果條件不滿足,則退出迴圈體直接到達流程出口處。因為是"當條件滿足時執行迴圈",即先判斷後執行,所以稱為當型迴圈。

直到型迴圈:表示從結構入口處直接執行迴圈體,在迴圈終端處判斷條件,如果條件不滿足,返回入口處繼續執行迴圈體,直到條件為真時再退出迴圈到達流程出口處,是先執行後判斷。因為是"直到條件為真時為止",所以稱為直到型迴圈。

類和對象

物件導向的程式設計過程中有兩個重要的概念:類(class)和對象(Object)。

什麼是類?

類是對現實生活中一類具有共同特徵的事物的抽象,它是一個抽象的概念。

比如小轎車、摩托、卡車、公交車,他們都有共同的特徵,能夠機動化的行走以及運載人或物品。所以我們可以把他們抽象為一個類:車。

什麼是對象?

 對象是類這個抽象概念的一個具體體現,比如有一個類叫“人”,而這個叫張三的人、那一個叫李四的人,都是“人”這個類的具體的體現,所以他們是對象。需要注意的是:對象一定具體到某個個體,張三不一定是一個對象,因為可以有很多個叫張三的,一定是“這一個張三”才是一個對象。

如何定義類

定義文法:

[修飾符] class 類名{    //類的內容}

 

 如:

public class Person{    }

 

 我們定義了叫“Person”的一個類。

因為Java語言是區分大小寫,所以需要注意關鍵字的大小寫問題,類名可以自己任意定義,建議起名要具有實際意義以及每個單字首大寫。

對於一個類而言,它包含三種最常見的成員:構造器、Field和方法。三個成員都可以定義0個或多個。

構造器

構造器是一個類建立對象的根本途徑,如果一個類沒有構造器,通常無法建立對象,所以系統會為每一個類預設定義一個構造器,在不明確定義的情況下,它是隱藏的,如果明確定義了,則不會預設定義。

 定義構造器的文法:

[修飾符] 類名([形參 參數名]){
  功能代碼
}

 

 修飾符可以是public private protected 或者不寫。

例:

public class Person{    public Person(){}}

 

 Field(屬性)

Field用於定義該類或該類執行個體所包含的狀態資料、描述對象的特徵等,定義文法如下:

[修飾符] 資料類型 屬性名稱 = 值;

 

 例:

public class Person{    public String name;    public int age;}

 

 

 Person(人)這個類有兩個Filed,分別用來描述姓名、年齡。上面這個例子中沒有為其定義一個構造器,所以系統會為其預設一個構造器:public Person(){}

方法

方法用來定義該類或該類執行個體的行為特徵或功能實現。

文法如下:

[修飾符] 傳回值 方法名([形參 參數名]){    //功能代碼}

 

例:

public class Person{  //定義一個Person類    public String name;  //具有Field 姓名(name)、年齡(age)    public int age;    public Person(){}  //第一個構造方法    public Person(String n, int a){  //第二個構造方法,有兩個參數n和a,在建立對象是如果調用了該構造方法就會將name屬性設定為傳進來的n,age為a。        name = n;        age = a;    }    public void eat(String s){  //方法,類比吃東西的功能        System.out.println(name + "在吃" + s);    }    public void sleep(int hour){  //方法,類比睡覺功能        System.out.println(name + "睡了" + hour + "個小時");    }}

 

 

對象的建立和使用

前面已經說明過,建立對象的根本途徑是構造器,通過new關鍵字調用該類的構造器來建立一個對象,如:

上面我們已經定義了一個“人”類,我們通過它建立一個對象。

Person p;  //定義一個Person類型的變數p = new Person();  //通過new關鍵字Person類的第一個構造器,返回一個Person執行個體,也就是該對象。

 

也可以這樣:

Person p = new Person("張三", 20);  //我們將上面的兩步簡化為一步,並且調用第二個構造方法,傳遞兩個參數,為這個對象設定了姓名和年齡。

 

 

有了對象,我們就可以使用它了:

使用對象:使用“.”進行以下操作  給類的屬性賦值:對象名.屬性  調用類的方法:對象名.方法名()
System.out.println(p.name);  //將這個對象的名稱列印出來p.sleep(5);  //調用睡覺的方法

 

建立和使用對象在記憶體中的樣本

上面我們有這樣一行代碼:Person p = new Person("張三", 20);

這行代碼建立了一個Person對象,這個對象被賦值給p變數。

這行代碼中實際產生了四個東西,p變數和Person對象、"張三"對象、數字20

當有等號時會先執行等號右邊的代碼new Person("張三", 20),這句代碼中調用的是public Person(String n, int a)構造方法,而我們發現,在這個方法中也有兩個變數String類型的n和int類型的a,所以執行這句話時記憶體中是這樣的:

產生兩個變數s和a,s是一個參考型別的變數,它在棧記憶體中儲存的是一個堆記憶體中的記憶體位址,該地址指向堆記憶體中String類型的一個對象,啊變數是一個int類型資料,所以它的數值直接儲存在棧記憶體中。

調用構造方法首先會建立一個Person類型的對象,對象中有name和age兩個屬性:

構造方法中有兩句代碼

name = n; age = a;

此時會將兩個值賦給給對象

name = n:指向同一個對象

age = a:將值複製給age

繼續執行,構造方法結束,清除a變數和s變數,執行語句等號右邊代碼,建立一個Person類型變數p,該變數指向通過構造方法返回的Person對象

                          

對象建立完成。

 

 

謝謝大家閱讀,如有錯誤之處,歡迎大家指正。( ^_^ )

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.