官术网_书友最值得收藏!

4.1.1 方法的組成形式

經(jīng)過前面的學(xué)習(xí),我們發(fā)現(xiàn)演示的Java代碼越來越復(fù)雜,而且每個(gè)例子的代碼都堆在入口方法main內(nèi)部,這會(huì)導(dǎo)致如下問題:

(1)一個(gè)方法內(nèi)部堆砌了太多的代碼行,看著費(fèi)神,維護(hù)起來也吃力。

(2)部分代碼描述的是通用算法,比如牛頓迭代法、二分查找法等,這些通用的算法代碼結(jié)構(gòu)固定,很多地方都會(huì)用到,倘若每次都要復(fù)制粘貼,無疑太過煩瑣。

基于此,亟需對(duì)紛繁復(fù)雜的代碼段加以梳理:一方面把若干代碼依據(jù)功能劃分,這樣剝離出來的各段代碼不會(huì)相互影響;另一方面封裝通用的算法代碼,做到只定義一次,就能被多次調(diào)用。這樣既可以提高代碼的可讀性,又使得代碼易于維護(hù),還能減少無謂的重復(fù)勞動(dòng)。

就代碼的封裝途徑而言,每種編程語言都采取了方法包裝的形式,通過定義形態(tài)完整、兼具輸入和輸出功能的新方法,即可將一大段邏輯復(fù)雜的代碼分解成各個(gè)功能單一的代碼塊,然后在原位置依次調(diào)用這些代碼塊對(duì)應(yīng)的方法名稱便省事了。

可是費(fèi)了許多口舌,這個(gè)方法定義到底是怎樣的呢?前面的大部分演示代碼基本上都裝載在對(duì)應(yīng)代碼文件的main方法中,這個(gè)main方法不但是該代碼文件的入口,也是程序員最開始接觸到的常用方法。接下來通過main方法來研究一下究竟如何定義一個(gè)方法。下面來看一段簡(jiǎn)單的main方法代碼:

    public static void main(String[] args) {  // String[]表示字符串?dāng)?shù)組
    }

上面的main方法除了名稱與包括內(nèi)部代碼的花括號(hào)之外,方法名稱左右兩邊還有幾個(gè)關(guān)鍵詞,從而構(gòu)成了完整的方法定義形式“訪問權(quán)限類型可選的static返回值的數(shù)據(jù)類型方法名稱(參數(shù)類型參數(shù)名稱)”。這幾個(gè)關(guān)鍵詞分別介紹如下:

(1)最前面的public的意思是公開的,表示該方法可被其他代碼文件訪問;反過來,倘若此處寫的是private,則表示該方法不可被其他文件訪問。

(2)public后面的static的意思是靜態(tài)的,表示該方法類似于通用函數(shù),可被外部直接訪問,比如Math工具類的round、sqrt、abs、sin等方法都屬于靜態(tài)方法。

(3)main名稱前面的void表示該方法不返回任何數(shù)據(jù),即不存在輸出參數(shù)。若該方法需要返回整型數(shù),則此處應(yīng)填int;若該方法需要返回雙精度數(shù),則此處應(yīng)填double。

(4)main名稱后面緊跟著帶參數(shù)的圓括號(hào),表示該方法需要填寫指定的輸入?yún)?shù)。若不存在輸入?yún)?shù),則圓括號(hào)內(nèi)部留空;若存在好幾個(gè)輸入?yún)?shù),則以逗號(hào)分隔多個(gè)參數(shù),形如“參數(shù)1類型參數(shù)1名稱,參數(shù)2類型參數(shù)2名稱”。

關(guān)于方法的輸入?yún)?shù),既可以在方法調(diào)用處填寫,也可能是Java命令行輸入的。譬如以下的代碼例子將演示如何讀取命令行輸入的命令參數(shù)(完整代碼見本章源碼的src\com\method\function\ Simple.java):

package com.method.function;
//說明main方法的格式定義
public class Simple {
    // 方法的定義格式為:“訪問權(quán)限 可選的static 返回值的數(shù)據(jù)類型 方法名稱(參數(shù)類型 參數(shù)名稱)”
    // 其中多個(gè)參數(shù)之間以逗號(hào)分隔,如“參數(shù)1類型 參數(shù)1名稱, 參數(shù)2類型 參數(shù)2名稱”
    // 若該方法無須返回任何數(shù)值,則返回值的數(shù)據(jù)類型填void
    public static void main(String[] args) {  // String[]表示字符串?dāng)?shù)組
        if (args.length == 0) {
            System.out.println("您沒有輸入任何參數(shù)");
        }
        for (int i=0; i<args.length; i++) {  // 依次取出并打印該Java程序在命令行執(zhí)行的輸入?yún)?shù)
            int seq=i+1;
            System.out.println("您輸入的第"+seq+"個(gè)參數(shù)是:"+args[i]);
        }
    }
}

先打開DOS窗口,進(jìn)入Simple.java所在的目錄,運(yùn)行以下命令編譯程序:

javac -encoding UTF-8 Simple.java

再回到src目錄下,輸入以下指令:

java com.method.function.Simple

此時(shí)程序輸出界面如圖4-1所示。

圖4-1 命令行未輸入?yún)?shù)

可見打印的文字為“您沒有輸入任何參數(shù)”,這是因?yàn)槊钚械腟imple后面沒帶任何參數(shù)。現(xiàn)在往Simple右邊添加一個(gè)參數(shù)“hello”,則修改后的程序指令是這樣的:

java com.method.function.Simple hello

再次運(yùn)行Simple程序,此時(shí)界面輸出信息如圖4-2所示。

圖4-2 命令行輸入了一個(gè)參數(shù)

可以看到打印文字為“您輸入的第1個(gè)參數(shù)是:hello”,說明程序成功讀取到了命令行的輸入?yún)?shù)。趁熱打鐵,接著往Simple右邊添加第二個(gè)參數(shù)“world”,于是擁有兩個(gè)參數(shù)的程序指令變成下面這樣:

java com.method.function.Simple hello world

第三次運(yùn)行Simple程序,此時(shí)程序運(yùn)行界面如圖4-3所示。

圖4-3 命令行輸入了兩個(gè)參數(shù)

該程序果然不負(fù)眾望,把“hello”和“world”這兩個(gè)參數(shù)全都打印出來了,從而驗(yàn)證了main方法的輸入?yún)?shù)是有效的。

主站蜘蛛池模板: 合阳县| 小金县| 察隅县| 昌江| 灵石县| 上犹县| 巴中市| 上林县| 封开县| 德清县| 临泉县| 岳阳县| 郑州市| 上犹县| 河西区| 武威市| 格尔木市| 澎湖县| 湟源县| 宿迁市| 精河县| 沙坪坝区| 鄢陵县| 阳高县| 托里县| 淮南市| 盈江县| 合肥市| 资阳市| 通渭县| 曲阜市| 邯郸市| 峡江县| 深水埗区| 邹城市| 邵东县| 同心县| 汽车| 太仓市| 鄂温| 澳门|