java基礎(chǔ)5&實(shí)戰(zhàn)開發(fā)Day2/方法/2020-04-26

目錄

1.撲克牌Demo
2.方法的定義
3.參數(shù)的值傳遞
4.可變參數(shù)
5.方法重載和構(gòu)造方法

1.撲克牌Demo

一個(gè)小程序讓大家了解方法的定義和使用
生成一副撲克牌:
1.首先要?jiǎng)?chuàng)建一張牌(包括點(diǎn)數(shù)和花色),需要在Poker類定義點(diǎn)數(shù)和花色(此處只展示了主程序,Poker類的定義很簡單俱恶,只需定義一個(gè)Poker類蝙叛,在下面定義dot(點(diǎn)數(shù))和pic(花色)屬性就好了)间景,便于在MyClass程序中直接使用Poker的兩種屬性兄春;
2.生成保存點(diǎn)數(shù)和花色的數(shù)組主胧;
3.生成保存所有撲克牌的數(shù)組晦譬,并用for循環(huán)用同一種方法創(chuàng)建整副撲克牌疤苹;
4.用增強(qiáng)for循環(huán)輸出所有的撲克牌(視自己的需求而定,增強(qiáng)for循環(huán)對數(shù)組順序沒有要求敛腌。
另外卧土,我們還需要有一些基礎(chǔ)的了解

println 自動(dòng)換行
print 不換行
數(shù)組一旦創(chuàng)建惫皱,內(nèi)存空間確定,無法變化

在撲克牌的生成中尤莺,需要對數(shù)組進(jìn)行訪問旅敷,需要使用遍歷數(shù)組的方法,把數(shù)組中所有元素全部體現(xiàn)出來

如何遍歷一個(gè)數(shù)組
            //1.for循環(huán)對數(shù)組進(jìn)行操作
            for (int i = 0; i < titles.length; i++) {
                System.out.println(titles[i]);
                }

            //2.增強(qiáng)for循環(huán)(只關(guān)心你得到的颤霎,不關(guān)心是第幾個(gè))
            for (String temp : titles){
                System.out.println(temp);

有了以上基礎(chǔ)后媳谁,我們一起來看看整個(gè)撲克牌Demo的實(shí)例吧:

public class MyClass {
    public static void main(String[] args) {
        
        {
            //生成一副牌
            //準(zhǔn)備一個(gè)數(shù)組保存所有的點(diǎn)數(shù)
            String[] dots = new String[]{
                    "2","3","4","5","6",
                    "7","8","9","10","J",
                    "Q","K","A"
                    };

            //保存所有的花色
            String[] pics = new String[]{"?","?","?","?"};

            //保存所有的撲克牌
            Poker[] pokers = new Poker[52];
            
            int index = 0;//記錄存到第幾張撲克牌
            for(String dot : dots){
                for (String pic : pics){
                    //創(chuàng)建一張撲克牌
                    Poker poker = new Poker();
                    poker.dot = dot;
                    poker.pic = pic;
                    pokers[index] = poker;
                    index++;
                }
            }
            
            //輸出一副牌
            for (Poker poker : pokers){
                System.out.print(poker.dot + poker.pic + " ");
            }
        }
    }
}

2.方法的定義

首先我們應(yīng)該了解各種名詞的性質(zhì)

屬性:類所具有的能引用的東西
方法:類的行為,類能做的事或具有的狀態(tài)
類 -> 內(nèi)部類:在類的內(nèi)部友酱,還可以定義這個(gè)類所具有的其他類晴音,方便歸類的區(qū)分
靜態(tài)代碼塊:特點(diǎn)是在類加載的時(shí)候就執(zhí)行
類方法=靜態(tài)方法
對象方法=實(shí)例方法

  • Java是面向?qū)ο蟮恼Z言,一切皆對象 類缔杉,Java里面方法是不能獨(dú)立存在的锤躁,只能在類里面聲明
    a.沒有參數(shù)的實(shí)例方法
public class Person {

    //定義一個(gè)沒有參數(shù)的實(shí)例方法
    public void eat(){
        
    }

但以下定義方法是錯(cuò)誤的

 public void eat(){
        
    }

public class Person {

    }

由此可知,方法必須定義在類里面壮吩,也就是說:方法是歸類管轄的进苍,不能越界。
b.有具體參數(shù)的實(shí)例方法

public class Person {

 public void work(String tool, String dest){

    }
}

c.靜態(tài)方法
和非靜態(tài)方法的區(qū)別:

  • 定義的區(qū)別:靜態(tài)方法 使用static修飾
  • 意義的區(qū)別:
    1.靜態(tài)方法依附于這個(gè)類本身鸭叙,比實(shí)例方法優(yōu)先被加載;
    2.當(dāng)這個(gè)類被加載到內(nèi)存中觉啊,這個(gè)類就被加載了,而此時(shí)對象還不存在;
    3.所以只能用這個(gè)類來調(diào)用靜態(tài)方法;
    4.對象方法依附于對象沈贝,必須創(chuàng)建這個(gè)類的一個(gè)對象杠人,用對象來調(diào)用

static可以修飾以下內(nèi)容
-變量 靜態(tài)變量
-方法 靜態(tài)方法
-類(內(nèi)部類)靜態(tài)內(nèi)部類

下面是靜態(tài)方法和實(shí)例(對象)方法的空間關(guān)系的運(yùn)行先后順序示意圖

靜態(tài)/棧/堆關(guān)系示意圖

d.有返回值的方法

public String test(){
        //做一定的操作
        return "result";
    }

下面演示四種方法的調(diào)用方法:

public class MyClass {
    public static void main(String[] args) {
        Person p = new Person();
        p.eat();// 沒有參數(shù)的實(shí)例方法
        p.work(tool: "榔頭",dest: "工地");//有參數(shù)的實(shí)例方法
        String result = p.test();//想要返回值
        p.test();//不想要返回值
        Person.test2();//靜態(tài)方法調(diào)用
        }
}

3.參數(shù)的值傳遞

Java參數(shù)傳遞機(jī)制:值傳遞(傳遞過去的是當(dāng)前變量的一份拷貝


1.如果傳遞的是一個(gè)參數(shù),則對方法無影響宋下;

  • 右邊的函數(shù)將左邊a的值拷貝過來嗡善,但是右邊的操作不影響左邊a的值。所以傳遞的是拷貝不是指針
public void eat(int a){
        a++;
    }

程序定義參數(shù)并賦值学歧,然后將參數(shù)傳遞給eat()方法

        {
            int a = 10;
            Person p = new Person();
            p.eat(a);
            System.out.println("a = " + a);
        }

程序打印結(jié)果為:a = 10

值傳遞示意圖

2.如果傳遞的是一個(gè)對象罩引,則方法會(huì)隨對象賦值變化而變化(傳遞了對象的地址)。
首先枝笨,我們創(chuàng)建一個(gè)Car類袁铐,定義一個(gè)Car屬性:WheelCount

public class Car {
    public int wheelCount;
}

然后在Person類里面定義一個(gè)test3()方法,并把Car類定義的對象car傳遞過來横浑,聲明WheelCount = 4

public void test3(Car car){
        car.wheelCount = 4;
    }

我們在主程序里面給Car類定義一個(gè)對象bz剔桨,并聲明Car bz的屬性WheelCount = 8,然后將對象bz傳遞給Person類的test3()方法徙融,讓bz的屬性WheelCount在test3()方法中運(yùn)算后洒缀,賦值給對象bz,最后打印WheelCount的值

        {
            Car bz = new Car();
            bz.wheelCount = 8;

            Person p = new Person();
            p.test3(bz);

            System.out.println("wheel count is " + bz.wheelCount);
        }

打印結(jié)果:

wheel count is 4

我們可以看到,雖然我們聲明屬性WheelCount時(shí)树绩,數(shù)值為8萨脑,但是將對象bz傳遞給test3()方法計(jì)算過后,屬性WheelCount的值最終變?yōu)?葱峡。由此可見砚哗,當(dāng)傳遞對象時(shí)龙助,方法會(huì)隨著對象賦值變化而變化砰奕,也就是說,我們將這個(gè)對象進(jìn)行了二次計(jì)算提鸟,最后賦值給這個(gè)對象军援。
我們來看看對象值傳遞的過程示意圖吧

對象值傳遞示意圖

4.可變參數(shù)

首先在Person類里面創(chuàng)建一個(gè)有參數(shù)的test4()方法,但是不知道有多少參數(shù)称勋,于是使用可變參數(shù)示意

}
    //可變參數(shù) 參數(shù)的個(gè)數(shù)不一定
    //使用數(shù)組來接收
    //String ... agrs 等價(jià)于 String[] args;
    public void test4(String ... args){
        for (int i = 0; i < args.length; i++){
            System.out.println(args[i]);
        }
    }

在主程序中調(diào)用test4()方法胸哥,并給參數(shù)賦值

        {
            Person p = new Person();
            p.test4( ...args : "jack","rose","marry");
        }

5.方法重載和構(gòu)造方法

方法的重載:同一個(gè)類里面 方法名相同 參數(shù)一定不同
方法的重載和返回值、修飾符沒有關(guān)系
例如以下兩個(gè)方法赡鲜,參數(shù)不同空厌,方法名相同,就算方法的重載

public class Person {

    public void eat(int a){
        a++;
    }

    public void eat(float b){

    }
}

構(gòu)造方法:如何去創(chuàng)建一個(gè)對象
系統(tǒng)默認(rèn)提供一個(gè)無參數(shù)的構(gòu)造方法
特點(diǎn):

  • 方法名和類名相同银酬;
  • 沒有返回值嘲更;

方法重載能解決兩個(gè)問題
1.讓代碼更簡潔;
例如以下兩個(gè)方法調(diào)用的區(qū)別:
a.定義兩個(gè)方法揩瞪,第二個(gè)方法是第一個(gè)方法的重載

    public Car(){

    }

    public Car(int count, int cEngine, int cSeat){
        wheelCount = count;
        engine = cEngine;
        seat = cSeat;
    }

b.在主函數(shù)調(diào)用兩個(gè)方法

        {
            //調(diào)用第一個(gè)方法
            Car c1 = new Car();
            c1.wheelCount = 4;
            c1.engine = 2;
            c1.seat = 7;

            //調(diào)用第二個(gè)方法
            Car c2 = new Car( count : 4, cEngine : 2, cSeat : 7);
        }

2.在數(shù)據(jù)使用時(shí)能保證有數(shù)據(jù)赋朦;
a.如果使用第一種方法,可能出現(xiàn)數(shù)據(jù)的丟失:
先調(diào)用test()方法再引用屬性engine時(shí):

        {
            Car c1 = new Car();
            c1.test();
            c1.engine = 3;
        }

運(yùn)行方法test()結(jié)果為:

engine count:0

先引用屬性engine再調(diào)用test()方法時(shí):

        {
            Car c1 = new Car();
            c1.engine = 3;
            c1.test();
        }

運(yùn)行方法test()結(jié)果為:

engine count:3

b.如果使用第二種方法李破,在創(chuàng)建方法時(shí)就進(jìn)行了賦值操作宠哄,數(shù)據(jù)是不會(huì)丟失的

        {
            Car c2 = new Car( count : 3, cEngine : 2, cSeat : 7);
            c2.test();
        }

運(yùn)行方法test()結(jié)果為:

engine count:2

總結(jié)

1.方法的創(chuàng)建和調(diào)用是編程中經(jīng)常使用到的內(nèi)容,必須要靈活掌握方法的使用嗤攻;
2.方法的重載能在編程中讓代碼更簡潔易懂毛嫉,并且減少bug的產(chǎn)生;
3.在進(jìn)行參數(shù)傳遞的操作中妇菱,一定要注意是僅對參數(shù)本身進(jìn)行傳遞還是對對象進(jìn)行了傳遞承粤,對對象進(jìn)行了傳遞就是地址的拷貝,會(huì)更改原有數(shù)據(jù)恶耽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末密任,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子偷俭,更是在濱河造成了極大的恐慌浪讳,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涌萤,死亡現(xiàn)場離奇詭異淹遵,居然都是意外死亡口猜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門透揣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來济炎,“玉大人,你說我怎么就攤上這事辐真⌒肷校” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵侍咱,是天一觀的道長耐床。 經(jīng)常有香客問我,道長楔脯,這世上最難降的妖魔是什么撩轰? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮昧廷,結(jié)果婚禮上堪嫂,老公的妹妹穿的比我還像新娘。我一直安慰自己木柬,他們只是感情好皆串,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弄诲,像睡著了一般愚战。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上齐遵,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天寂玲,我揣著相機(jī)與錄音,去河邊找鬼梗摇。 笑死拓哟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伶授。 我是一名探鬼主播断序,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼糜烹!你這毒婦竟也來了违诗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤疮蹦,失蹤者是張志新(化名)和其女友劉穎诸迟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阵苇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年壁公,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绅项。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡紊册,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出快耿,到底是詐尸還是另有隱情囊陡,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布润努,位于F島的核電站关斜,受9級特大地震影響示括,放射性物質(zhì)發(fā)生泄漏铺浇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一垛膝、第九天 我趴在偏房一處隱蔽的房頂上張望鳍侣。 院中可真熱鬧,春花似錦吼拥、人聲如沸倚聚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惑折。三九已至,卻和暖如春枯跑,著一層夾襖步出監(jiān)牢的瞬間惨驶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工敛助, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粗卜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓纳击,卻偏偏與公主長得像续扔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子焕数,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

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