第02章物件導向程式設計——v512工作室 編輯:玄玉
| 物件導向思想 |
構造方法 |
|
我的部落格 |
| 類的屬性和方法 |
Java API文檔 |
v512工作室 |
| 對象的建立和使用 |
資訊的封裝和隱藏 |
中科院新科海學校 |
物件導向思想
分析階段:分析並確定使用者需求,採用適當的模型規範地表述這一需求。形成分析模型,為要處理的現實世界中的事物建立抽象建模
設計階段:確定系統如何?所需功能,採用適當的資料結構和控制邏輯,將分析模型細化
編碼實現:選定一種適當的程式設計語言,編碼實現上述的設計,並在開發過程中引入測試,完善整個解決方案
這裡要特彆強調的是:選擇適當的程式設計語言,沒有任何一種語言可以解決各種各樣的問題
不同語言針對性不同,每種語言都有優點和缺點,需要盡量使用適合的語言實現所需功能
比如編寫網路卡驅動程式,採用C++是非常適合的,若用Java編寫的話,就不是很適合的
思想概述:物件導向編程的三大核心機制:封裝、繼承、多態
物件導向的編程思想力圖使對電腦語言中對事物的描述與現實世界中該事物的本來面目儘可能的一致
物件導向的編程思想體現在Java中就表現為Java類的定義。類(class)和對象(object)是物件導向方法的核心概念
類是對一類事物的描述,是抽象的概念上的定義。對象是實際存在的該類事物的每個個體,因而也稱執行個體(instance)
類和對象:比如人和人類。人類是很抽象的一個概念,它把這個個體的共性都給抽象出來了
比如說人都會有腦袋有胳膊有腿,那麼個體就是具體的活生生的每一個人
比如張三,他屬於類當中的個體,那麼他就具有這個類所描述的這些特性,有胳膊有腿有腦袋
但是他也會有自己的個性,比如他名字叫張三,跟另外一個個體李四的名字是不同的
對象的建立和使用
格式:使用new++構造方法建立一個新的對象。建立對象後,把這個對象的地址賦給一個名稱或者說賦給了一個控制代碼
使用對象名.對象成員的方式訪問對象成員,包括屬性和方法
舉例:public class Test{public static void main(String[] args){
Person d=new Person();d.setAge(22);System.out.println("本人年齡:"+d.getAge());}}
說明:聲明並建立一個Person類的對象,並命名為a:Person a=new Person();
Person:說明產生的對象的類型是Person類型
new Person():建立一個Person類對象並把它的地址賦給了a
這樣就可以通過a調用這個對象的屬性或方法:a.setAge(22);
類的屬性和方法
類:[<modifiers>] class <class_name> {[<attribute_declarations>][<constructor_declarations>][<method_declarations>]}
符號[]表示裡面的內容是可選的,比如說定義一個類class Person{}也是合法的
屬性:[<modifiers>] type <attr_name> [=defaultValue];
public class Person{private int age;public String name="Lila";}
方法:[<modifiers>] <return_type> <name>([<argu_list>]){[<statements>]}
public class Person{private int age;public int getAge(){return age;}public void setAge(int i){age=i;}}
說明:方法名的書寫格式不是固定的,即不必非是setAge或getAge等形式。這麼寫是為了體現它的含義,增強可讀性
普通方法的名字也可以與類名相同。如在Person類中定義public void Person(){}是可以的
構造方法
文法:[<modifiers>] <class_name>([<argu_list>]){[<statements>]}
public class Person{ //構造方法不能有傳回值(連void都不能有)
public Person(String n){name=n;} //構造方法的名字必須和類的名字一致
public Person(String n,int a){name=n;age=a;}} //這是構造方法的重載,根據參數列表的不同
預設:Java語言中每個類都至少有一個構造方法。而預設的構造方法是沒有參數的,且方法體為空白
如果類中沒有顯式定義任何構造方法,系統將自動提供一個預設的構造方法
一旦類中式顯定義了一個或多個構造方法,系統將不再提供預設的構造方法
說明:比如類public class Person{private int age;public void setAge(int w){age=w;}}
等價於public class Person{private int age;public Person(){}public void setAge(int w){age=w;}}
當用反編譯工具將class檔案還原成java檔案後,會發現增加了一個構造方法
這是編譯時間自動增加的,這就是一個預設的構造方法,而且它是public類型
舉例:public class Test{public static void main(String args[]){Person d=new Person();d.setAge(22);}}
這裡new Person()實際上調用的就是增加的預設構造方法
如果上文中定義了構造方法,那麼此句在編譯時間會由於找不到系統提供的預設構造方法而報錯
假如上文真的定義了構造方法,而我們仍想使用這個句子,這時可以在上文中自己定義public Person(){}
資訊的封裝和隱藏
概述:使用者對類內部定義的資料,即對象的成員變數的直接操作會導致資料混亂或安全性問題
Java中通過將資料封裝,聲明為私人(private)。再提供一個或多個公開(public)方法,如setAge()和getAge()方法實現對屬性的操作
目的:隱藏一個類的實現細節,並且也使得代碼便於修改,增強代碼的可維護性
使用者只能通過事先定製好的方法來訪問資料,可以方便地加入控制邏輯,限制對屬性的不合理操作
例一:class Person{public int age;}
public class DirectAccess{public static void main(String[] args){
Person b=new Person();b.age=40;b.age=-3;System.out.println(b.age);}}
例二:class Person{private String name;private int age;
public Person(String n){name=n;}public String getName(){return name;}
public void setAge(int i){if(i>=0&&i<=120){age=i;}}public int getAge(){return age;}}
public class Encapsulation{public static void main(String[] args){
Person b=new Person("Tom");b.setAge(34);b.setAge(-3); //通過方法對屬性賦值要比直接對屬性賦值要好得多
System.out.println(b.getName() + "--" + b.getAge());}} //最後輸出:Tom--34
Java API文檔
概述API文檔:API文檔是JDK系統類別庫的使用說明,由Sun公司提供,:http://java.sun.com
Java推出後,內建了很多的API,就是很多已經寫好的類。這些類當中有很多方法,可以直接使用
為了瞭解這些類中的方法和屬性間的使用及具體區別,Sun針對這些API推出了一個使用說明,這個使用說明就叫API文檔
線上API文檔:官網右側Technologies下點擊JavaSE,然後點Reference,再點APIs&Documentation
在Core API DOCs下可以看到針對JDK不同版本的API文檔,其中JDK6的API文檔有三種語言格式,即英文、中文、日文
下載API文檔:官網→Technologies→JavaSE→Downloads→下面有一個Java SE 6 Documentation,點擊它後面的Download按鈕即可
這裡我們會看到它只提供英文和日文的下載。這時我們就需要換個網站下載http://gceclub.sun.com.cn
或http://developers.sun.com.cn/home/sdnchina/home在網站右側偏下方會看到一個下載的快速連結