JAVA-面向?qū)ο缶幊袒A(chǔ)

1、面向?qū)ο蟾攀?/h2>

1.1 對象

在現(xiàn)實世界中嗤堰,對象是事物存在的實體戴质。而在計算機的世界中,面向?qū)ο蟪绦蛟O(shè)計的思想要以對象來思考問題梁棠,首先將現(xiàn)實世界的實體抽象為對象置森,然后考慮這個對象具備的屬性和行為。
舉個例子來說符糊,如果有一只大雁要從北方飛往南方這個實際問題凫海,我們首先可以從這一問題中抽象出大雁這個對象,然后識別出大雁的屬性男娄,比如有一對翅膀行贪,有黑色的羽毛等等。隨后模闲,我們可以識別出這個對象的動態(tài)行為建瘫,即這只大雁可以進行的動作,比如飛行尸折、覓食等啰脚,這些動作都是這個對象基于其屬性而具有的動作。

1.2 類

類是同一類事物的統(tǒng)稱实夹,如果將現(xiàn)實世界中的一個事物抽象成對象橄浓,類就是這類對象的統(tǒng)稱粒梦,比如鳥類,家禽類等等荸实。具有相同特征和行為的一類事物就稱為類匀们。
類與對象的關(guān)系可以如下來描述:類是世間事物的抽象稱呼,而對象則是這個事物相對應(yīng)的實體准给。

1.3 面向?qū)ο蟪绦蛟O(shè)計的特點

封裝
封裝是面向?qū)ο缶幊痰暮诵乃枷胄蛊樱瑢ο蟮膶傩院托袨榉庋b起來,其載體就是類露氮,類通常對客戶隱藏其實現(xiàn)細節(jié)祖灰,這就是封裝的思想。
類為用戶提供對象的屬性和行為的接口沦辙,用戶通過這些接口使用這些類夫植,無須知道這些類內(nèi)部是如何構(gòu)成的,不能操作類中的內(nèi)部數(shù)據(jù)油讯。

繼承
類與類之間同樣具有關(guān)系详民,繼承是關(guān)聯(lián)中的一種。舉例來說陌兑,四邊形中有平行四邊形沈跨,梯形等等,平行四邊形具有四邊形的所有性質(zhì)兔综,比如有四條邊饿凛,內(nèi)角和為360度等等,但是软驰,平行四邊形也有普通四邊形所不具備的特殊性質(zhì)涧窒,比如兩組對邊平行等等。 在JAVA中锭亏,我們將類似于平行四邊形的類稱為子類纠吴,將類似于四邊形的類稱為父類或者超類。

多態(tài)
多態(tài)(Polymorphism)按字面的意思就是“多種狀態(tài)”慧瘤。在面向?qū)ο蟮恼Z言中中戴已,接口的多種不同的實現(xiàn)方式即為多態(tài)。比如四邊形有繪制圖像的能力锅减,但是繪制怎樣的四邊形是不確定的糖儡,對于正方形,我們要繪制四條邊相等的圖形怔匣,對于平行四邊形握联,我們要繪制兩組對邊互相平行的圖形。在多態(tài)的機制中,父類通常被定義為抽象類并給出一個方法的標(biāo)準(zhǔn)拴疤,而不給出實現(xiàn)的具體流程永部。

2独泞、類與對象

在JAVA中定義類使用class關(guān)鍵字呐矾,其語法如下

class 類名稱{
  //成員變量
// 成員方法
}

我們直接用一個簡單的例子來介紹一下類的一些基本元素

public class Basic_oop {
    public int x = 100;
    public int y = 100;


    public int getX(){
        return this.x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getSum(int x,int y){
        return x + y;
    }

    public void change(int[] x){
        for(int i=0;i<x.length;i++) {
            x[i] = 100 * i;
        }
    }

    public int getSum(int... x){
        int sum = 0;
        for(int i=0;i<x.length;i++){
            sum += x[i];
        }
        return sum;
    }

    public Basic_oop(){

    }
    public Basic_oop(int x,int y){
        this.x = x;
        this.y = y;
    }



    public static void main(String[] args){
        Basic_oop obj = new Basic_oop(5,4);
        System.out.println(obj.x);
        System.out.println(obj.y);
        int[] arr = new int[]{0,1,2};
        obj.change(arr);
        for(int i:arr){
            System.out.print(i + "\t");
        }

    }
}

成員變量
成員變量即對象的屬性,可以看到懦砂,我們建立了一個Basic_oop的類蜒犯,類的對象有兩個屬性,或者說是兩個成員變量荞膘,分別是x和y罚随。

成員方法
成員方法即類對象的行為,我們定義了獲得屬性值和設(shè)置屬性值的set和get方法羽资。同時淘菩,為了介紹成員方法的參數(shù)的概念,我們定義了兩個getSum方法和一個change方法屠升。那么在成員方法中傳遞參數(shù)潮改,有三種方式。
(1)值參數(shù)
值參數(shù)表明實參與形參之間按值傳遞腹暖,因此對形參的修改不會引起實參的變化
(2)引用參數(shù)
如果在給方法傳遞參數(shù)時汇在,參數(shù)的類型是數(shù)組或者其他引用類型,那么在方法中對參數(shù)的修改會反映到原有的數(shù)組或者其他引用類型上脏答,這種類型的方法參數(shù)糕殉,稱為引用參數(shù)。如上面的例子中殖告,change方法修改了原來數(shù)組中的三個值阿蝶,變成了0、100和200黄绩,那么打印將輸出0羡洁、100和200。
(3)不定長參數(shù)
聲明方法時宝与,如果有若干個相同類型的參數(shù)焚廊,可以定義為不定長參數(shù),在參數(shù)類型和參數(shù)名之間有三個點即可习劫。比如上例中的第二個getSum方法咆瘟。

構(gòu)造方法
構(gòu)造方法是一個與類同名的方法,對象的創(chuàng)建就是通過構(gòu)造方法完成的诽里。對于構(gòu)造方法來說袒餐,它沒有返回值,名稱必須要與被類的名稱相同,在默認(rèn)情況下灸眼,構(gòu)造方法是沒有參數(shù)的卧檐,當(dāng)然我們也可以創(chuàng)建有參的構(gòu)造方法,來完成對對象的參數(shù)的初始化焰宣。如

 public Basic_oop(int x,int y){
        this.x = x;
        this.y = y;
    }

** 對象的創(chuàng)建**
對象的創(chuàng)建使用new關(guān)鍵字霉囚,如果不傳入?yún)?shù),將調(diào)用默認(rèn)的無參構(gòu)造函數(shù)創(chuàng)建匕积,如果帶參數(shù)盈罐,則使用有參的構(gòu)造函數(shù)創(chuàng)建:

Basic_oop obj = new Basic_oop(5,4);

訪問對象的屬性和行為
可以使用對象.類成員來獲取對象的屬性和行為。比如:

 System.out.println(obj.x);
 System.out.println(obj.y);
int[] arr = new int[]{0,1,2};
obj.change(arr);

對象的銷毀
JAVA擁有一套完整的垃圾回收機制闪唆,Java虛擬機會回收無用的但占用內(nèi)存的資源盅粪。那么那種對象會被Java虛擬機視為垃圾呢?主要有以下兩種:

1悄蕾、對象引用超過其作用范圍票顾;
2、將對象賦值為null帆调。

但垃圾回收器只能回收由new操作符創(chuàng)建的對象奠骄。

this關(guān)鍵字
JAVA語言中,this關(guān)鍵字被用來代替本類對象的引用贷帮。

3戚揭、static關(guān)鍵字

由static修飾的變量,常量和方法被稱為靜態(tài)變量撵枢、靜態(tài)常量和靜態(tài)方法民晒,也被稱為類的靜態(tài)成員。我們先來看一個例子:

public class Basic_oop_static {
    static public int water = 0;
    final static int inPerTime = 3;
    final static int outPerTime = 2;
    public void outlet(){//放水锄禽,一次兩個單位
        if(water > outPerTime){
            water -= outPerTime;
        }
        else{
            water = 0;
        }
    }

    public void inlet(){//注水潜必,一次3個單位
        water += inPerTime;
    }

    static public int printWater(){
        return water;
    }

    public static void main(String[] args){
        Basic_oop_static in = new Basic_oop_static();
        Basic_oop_static out = new Basic_oop_static();
        System.out.println("水池的水量"+Basic_oop_static.water);
        System.out.println("水池注水兩次");
        in.inlet();
        in.inlet();
        System.out.println("水池的水量"+Basic_oop_static.water);
        System.out.println("水池放水兩次");
        out.outlet();
        out.outlet();
        System.out.println("水池的水量"+Basic_oop_static.printWater());
    }
}

輸出為:

水池的水量0
水池注水兩次
水池的水量6
水池放水兩次
水池的水量2

3.1 靜態(tài)變量

如果想讓同一類的不同實例對象共享同一個變量,那么可以將該變量定義為靜態(tài)變量沃但,如上面的water對象磁滚,類中不同對象對靜態(tài)變量的修改,都會作用到其他該類的對象中宵晚,比如我們修改水池的水量垂攘,可以發(fā)現(xiàn)water變量是兩個對象所共享的。

3.2 靜態(tài)常量

由final static修飾的成員變量即為靜態(tài)常量淤刃,靜態(tài)常量由類的所有對象所共享晒他,且不能被改變:

    final static int inPerTime = 3;
    final static int outPerTime = 2;

3.3 靜態(tài)方法

調(diào)用靜態(tài)方法,無需創(chuàng)建類的對象逸贾,直接用 ** 類名.靜態(tài)方法() ** 調(diào)用即可陨仅。

Basic_oop_static.printWater();

3.4 靜態(tài)代碼塊

staitc修飾的代碼區(qū)域可以被稱之為靜態(tài)代碼塊津滞。
1、靜態(tài)代碼塊自始至終只運行一次灼伤,聲明一個對象的時候就會運行靜態(tài)代碼塊
2触徐、非靜態(tài)代碼塊每次創(chuàng)建對象時都會運行,并且會在構(gòu)造方法之前云行
3狐赡、構(gòu)造方法只有在使用new創(chuàng)建對象時才會運行
4撞鹉、成員方法只有在使用對象調(diào)用時才會運行

我們來看一個例子:

public class StaticTest {
    static String name;
    static{
        System.out.println(name + "靜態(tài)代碼塊");
    }

    {
        System.out.println(name + "非靜態(tài)代碼塊");
    }

    public StaticTest(String a){
        name = a;
        System.out.println(name + "構(gòu)造方法");
    }

    public void method(){
        System.out.println(name + "成員方法");
    }

    public static void main(String[] args){
        StaticTest s1;
        StaticTest s2 = new StaticTest("s2");
        StaticTest s3 = new StaticTest("s3");
        s3.method();
    }

}

輸出為:

null靜態(tài)代碼塊
null非靜態(tài)代碼塊
s2構(gòu)造方法
s2非靜態(tài)代碼塊
s3構(gòu)造方法
s3成員方法

由于聲明就會調(diào)用靜態(tài)代碼塊,而String的默認(rèn)值為null猾警,所以首先輸出 null靜態(tài)代碼塊孔祸,由于每次調(diào)用new來構(gòu)造對象,都會首先調(diào)用非靜態(tài)代碼塊发皿,然后執(zhí)行構(gòu)造方法,所以接連輸出:null非靜態(tài)代碼塊拂蝎、s2構(gòu)造方法穴墅、s2非靜態(tài)代碼塊、s3構(gòu)造方法温自。由于成員方法只有在對象調(diào)用時才會執(zhí)行玄货,所以最后輸出:s3成員方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悼泌,一起剝皮案震驚了整個濱河市松捉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馆里,老刑警劉巖隘世,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸠踪,居然都是意外死亡丙者,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門营密,熙熙樓的掌柜王于貴愁眉苦臉地迎上來械媒,“玉大人,你說我怎么就攤上這事评汰》桌蹋” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵被去,是天一觀的道長主儡。 經(jīng)常有香客問我,道長编振,這世上最難降的妖魔是什么缀辩? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任臭埋,我火速辦了婚禮,結(jié)果婚禮上臀玄,老公的妹妹穿的比我還像新娘瓢阴。我一直安慰自己,他們只是感情好健无,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布荣恐。 她就那樣靜靜地躺著,像睡著了一般累贤。 火紅的嫁衣襯著肌膚如雪叠穆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天臼膏,我揣著相機與錄音硼被,去河邊找鬼。 笑死渗磅,一個胖子當(dāng)著我的面吹牛嚷硫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播始鱼,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼仔掸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了医清?” 一聲冷哼從身側(cè)響起起暮,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎会烙,沒想到半個月后负懦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡持搜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年密似,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葫盼。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡残腌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贫导,到底是詐尸還是另有隱情抛猫,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布孩灯,位于F島的核電站闺金,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏峰档。R本人自食惡果不足惜败匹,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一寨昙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掀亩,春花似錦舔哪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炼七,卻和暖如春缆巧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豌拙。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工陕悬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姆蘸。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓墩莫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逞敷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容