天天看點

從零開始學android程式設計_從零開始學程式設計第五天基礎文法第1章 方法1.1 方法概述1.2 方法的文法格式1.3 方法調用圖解1.4 方法定義練習1.5 方法的重載1.5.1 重載的注意事項1.5.2 參數傳遞1.5.3 參數傳遞圖解與結論第2章 随機點名器案例2.1 案例介紹2.2 案例需求分析2.3 實作代碼步驟第3章 庫存管理案例3.1 案例介紹3.2 案例需求分析3.3 實作代碼步驟第4章 總結4.1 知識點總結

從零開始學android程式設計_從零開始學程式設計第五天基礎文法第1章 方法1.1 方法概述1.2 方法的文法格式1.3 方法調用圖解1.4 方法定義練習1.5 方法的重載1.5.1 重載的注意事項1.5.2 參數傳遞1.5.3 參數傳遞圖解與結論第2章 随機點名器案例2.1 案例介紹2.2 案例需求分析2.3 實作代碼步驟第3章 庫存管理案例3.1 案例介紹3.2 案例需求分析3.3 實作代碼步驟第4章 總結4.1 知識點總結

今日内容介紹

u 方法

第1章 方法

1.1 方法概述

在我們的日常生活中,方法可以了解為要做某件事情,而采取的解決辦法。

如:小明同學在路邊準備坐車來學校學習。這就面臨着一件事情(坐車到學校這件事情)需要解決,解決辦法呢?可采用坐公共汽車或坐計程車的方式來學校,那麼,這種解決某件事情的辦法,我們就稱為方法。

在java中,方法就是用來完成解決某件事情或實作某個功能的辦法。

方法實作的過程中,會包含很多條語句用于完成某些有意義的功能——通常是處理文本,控制輸入或計算數值。

我們可以通過在程式代碼中引用方法名稱和所需的參數,實作在該程式中執行(或稱調用)該方法。方法,一般都有一個傳回值,用來作為事情的處理結果。

1.2 方法的文法格式

在Java中,聲明一個方法的具體文法格式如下:

修飾符 傳回值類型 方法名(參數類型 參數名1,參數類型 參數名2,......){

執行語句

………

return 傳回值;

}

對于上面的文法格式中具體說明如下:

l 修飾符:方法的修飾符比較多,有對通路權限進行限定的,有靜态修飾符static,還有最終修飾符final等,這些修飾符在後面的學習過程中會逐漸介紹

l 傳回值類型:用于限定方法傳回值的資料類型

l 參數類型:用于限定調用方法時傳入參數的資料類型

l 參數名:是一個變量,用于接收調用方法時傳入的資料

l return關鍵字:用于結束方法以及傳回方法指定類型的值

l 傳回值:被return語句傳回的值,該值會傳回給調用者

需要特别注意的是,方法中的“參數類型 參數名1,參數類型 參數名2”被稱作參數清單,它用于描述方法在被調用時需要接收的參數,如果方法不需要接收任何參數,則參數清單為空,即()内不寫任何内容。方法的傳回值必須為方法聲明的傳回值類型,如果方法中沒有傳回值,傳回值類型要聲明為void,此時,方法中return語句可以省略。

接下來通過一個案例來示範方法的定義與使用,如下圖所示。MethodDemo01.java

public class MethodDemo01 {    public static void main(String[] args) {        int area = getArea(3, 5); // 調用 getArea方法        System.out.println(" The area is " + area);    }     // 下面定義了一個求矩形面積的方法,接收兩個參數,其中x為高,y為寬    public static int getArea(int x, int y) {        int temp = x * y; // 使用變量temp記住運算結果        return temp; // 将變量temp的值傳回    }}
           

運作結果如下圖所示。

從零開始學android程式設計_從零開始學程式設計第五天基礎文法第1章 方法1.1 方法概述1.2 方法的文法格式1.3 方法調用圖解1.4 方法定義練習1.5 方法的重載1.5.1 重載的注意事項1.5.2 參數傳遞1.5.3 參數傳遞圖解與結論第2章 随機點名器案例2.1 案例介紹2.2 案例需求分析2.3 實作代碼步驟第3章 庫存管理案例3.1 案例介紹3.2 案例需求分析3.3 實作代碼步驟第4章 總結4.1 知識點總結

在上述代碼中,定義了一個getArea()方法用于求矩形的面積,參數x和y分别用于接收調用方法時傳入的高和寬,return語句用于傳回計算所得的面積。在main()方法中通過調用getArea()方法,獲得矩形的面積,并将結果列印。

1.3 方法調用圖解

接下來通過一個圖例示範getArea()方法的整個調用過程,如下圖所示。

從零開始學android程式設計_從零開始學程式設計第五天基礎文法第1章 方法1.1 方法概述1.2 方法的文法格式1.3 方法調用圖解1.4 方法定義練習1.5 方法的重載1.5.1 重載的注意事項1.5.2 參數傳遞1.5.3 參數傳遞圖解與結論第2章 随機點名器案例2.1 案例介紹2.2 案例需求分析2.3 實作代碼步驟第3章 庫存管理案例3.1 案例介紹3.2 案例需求分析3.3 實作代碼步驟第4章 總結4.1 知識點總結

從上圖中可以看出,在程式運作期間,參數x和y相當于在記憶體中定義的兩個變量。當調用getArea()方法時,傳入的參數3和5分别指派給變量x和y,并将x*y的結果通過return語句傳回,整個方法的調用過程結束,變量x和y被釋放。

1.4 方法定義練習

分别定義如下方法:

定義無傳回值無參數方法,如列印3行,每行3個*号的矩形

定義有傳回值無參數方法,如鍵盤錄入得到一個整數

定義無傳回值有參數方法,如列印指定M行,每行N個*号的矩形

定義有傳回值有參數方法,如求三個數的平均值

l 無傳回值無參數方法,如列印3行,每行3個*号的矩形

    public static void printRect(){        //列印3行星        for (int i=0; i<3; i++) {            //System.out.println("***"); 相當于是列印3顆星,換行            //每行列印3顆星            for (int j=0; j<3; j++) {                System.out.print("*");  // ***            }            Systeum.ot.println();        }    } l  有傳回值無參數方法,如鍵盤錄入得到一個整數    public static int getNumber(){        Scanner sc = new Scanner(System.in);        int number = sc.nextInt();        return number;    } l  無傳回值有參數方法,如列印指定M行,每行N個*号的矩形    public static void printRect2(int m, int n){        //列印M行星        for (int i=0; i
           

1.5 方法的重載

我們假設要在程式中實作一個對數字求和的方法,由于參與求和數字的個數和類型都不确定,是以要針對不同的情況去設計不同的方法。接下來通過一個案例來實作對兩個整數相加、對三個整數相加以及對兩個小數相加的功能,具體實作如下所示。

MethodDemo02.javapublic class MethodDemo02 {    public static void main(String[] args) {        // 下面是針對求和方法的調用        int sum1 = add01(1, 2);        int sum2 = add02(1, 2, 3);        double sum3 = add03(1.2, 2.3);        // 下面的代碼是列印求和的結果        System.out.println("sum1=" + sum1);        System.out.println("sum2=" + sum2);        System.out.println("sum3=" + sum3);    }     // 下面的方法實作了兩個整數相加    public static int add01(int x, int y) {        return x + y;    }    // 下面的方法實作了三個整數相加    public static int add02(int x, int y, int z) {        return x + y + z;    }    // 下面的方法實作了兩個小數相加    public static double add03(double x, double y) {        return x + y;    }}
           

運作結果如下圖所示。

從零開始學android程式設計_從零開始學程式設計第五天基礎文法第1章 方法1.1 方法概述1.2 方法的文法格式1.3 方法調用圖解1.4 方法定義練習1.5 方法的重載1.5.1 重載的注意事項1.5.2 參數傳遞1.5.3 參數傳遞圖解與結論第2章 随機點名器案例2.1 案例介紹2.2 案例需求分析2.3 實作代碼步驟第3章 庫存管理案例3.1 案例介紹3.2 案例需求分析3.3 實作代碼步驟第4章 總結4.1 知識點總結

從上述代碼不難看出,程式需要針對每一種求和的情況都定義一個方法,如果每個方法的名稱都不相同,在調用時就很難厘清哪種情況該調用哪個方法。

為了解決這個問題,Java允許在一個類中定義多個名稱相同的方法,但是參數的類型或個數必須不同,這就是方法的重載。

下面的三個方法互為重載關系

l public static int add(int x,int y) {邏輯} //兩個整數加法

l public static int add(int x,int y,int z) {邏輯} //三個整數加法

l public static int add(double x,double y) {邏輯} //兩個小數加法

接下來通過方法重載的方式進行修改,如下所示。

MethodDemo03.javapublic class MethodDemo03 {    public static void main(String[] args) {        // 下面是針對求和方法的調用        int sum1 = add(1, 2);        int sum2 = add(1, 2, 3);        double sum3 = add(1.2, 2.3);        // 下面的代碼是列印求和的結果        System.out.println("sum1=" + sum1);        System.out.println("sum2=" + sum2);        System.out.println("sum3=" + sum3);    }     // 下面的方法實作了兩個整數相加    public static int add(int x, int y) {        return x + y;    }    // 下面的方法實作了三個整數相加    public static int add(int x, int y, int z) {        return x + y + z;    }    // 下面的方法實作了兩個小數相加    public static double add(double x, double y) {        return x + y;    }}
           

MethodDemo02.java的運作結果和MethodDemo03.java一樣,如下圖所示。

從零開始學android程式設計_從零開始學程式設計第五天基礎文法第1章 方法1.1 方法概述1.2 方法的文法格式1.3 方法調用圖解1.4 方法定義練習1.5 方法的重載1.5.1 重載的注意事項1.5.2 參數傳遞1.5.3 參數傳遞圖解與結論第2章 随機點名器案例2.1 案例介紹2.2 案例需求分析2.3 實作代碼步驟第3章 庫存管理案例3.1 案例介紹3.2 案例需求分析3.3 實作代碼步驟第4章 總結4.1 知識點總結

上述代碼中定義了三個同名的add()方法,它們的參數個數或類型不同,進而形成了方法的重載。

在main()方法中調用add()方法時,通過傳入不同的參數便可以确定調用哪個重載的方法,如add(1,2)調用的是兩個整數求和的方法。值得注意的是,方法的重載與傳回值類型無關,它隻有兩個條件,一是方法名相同,二是參數個數或參數類型不相同。

1.5.1 重載的注意事項

l 重載方法參數必須不同:

參數個數不同,如method(int x)與method(int x,int y)不同

參數類型不同,如method(int x)與method(double x)不同g

參數順序不同,如method(int x,double y)與method(double x,int y)不同

l 重載與方法名與參數類型相關與傳回值無關

如void method(int x)與int method(int y)不是方法重載,不能同時存在

l 重載與具體的變量辨別符無關

如method(int x)與method(int y)不是方法重載,不能同時存在

1.5.2 參數傳遞

參數傳遞,可以了解當我們要調用一個方法時,我們會把指定的數值,傳遞給方法中的參數,這樣方法中的參數就擁有了這個指定的值,可以使用該值,在方法中運算了。這種傳遞方式,我們稱為參數傳遞。

l 在這裡,定義方法時,參數清單中的變量,我們稱為形式參數

l 調用方法時,傳入給方法的數值,我們稱為實際參數

我們看下面的兩段代碼,來明确下參數傳遞的過程:

public class ArgumentsDemo01 {    public static void main(String[] args) {        int a=5;        int b=10;        change(a, b);//調用方法時,傳入的數值稱為實際參數        System.out.println("a=" + a);        System.out.println("b=" + b);    }     public static void change(int a, int b){//方法中指定的多個參數稱為形式參數        a=200;        b=500;    }}
           

程式的運作結果如下:

從零開始學android程式設計_從零開始學程式設計第五天基礎文法第1章 方法1.1 方法概述1.2 方法的文法格式1.3 方法調用圖解1.4 方法定義練習1.5 方法的重載1.5.1 重載的注意事項1.5.2 參數傳遞1.5.3 參數傳遞圖解與結論第2章 随機點名器案例2.1 案例介紹2.2 案例需求分析2.3 實作代碼步驟第3章 庫存管理案例3.1 案例介紹3.2 案例需求分析3.3 實作代碼步驟第4章 總結4.1 知識點總結

再看另一段代碼

public class ArgumentsDemo02 {    public static void main(String[] args) {        int[] arr = { 1, 2, 3 };        change(arr);// 調用方法時,傳入的數值稱為實際參數               for (int i = 0; i < arr.length; i++) {            System.out.println(arr[i]);        }    }     public static void change(int[] arr) {// 方法中指定的多個參數稱為形式參數        for (int i = 0; i < arr.length; i++) {            arr[i] *= 2;        }    }}  
           

程式的運作結果如下:

從零開始學android程式設計_從零開始學程式設計第五天基礎文法第1章 方法1.1 方法概述1.2 方法的文法格式1.3 方法調用圖解1.4 方法定義練習1.5 方法的重載1.5.1 重載的注意事項1.5.2 參數傳遞1.5.3 參數傳遞圖解與結論第2章 随機點名器案例2.1 案例介紹2.2 案例需求分析2.3 實作代碼步驟第3章 庫存管理案例3.1 案例介紹3.2 案例需求分析3.3 實作代碼步驟第4章 總結4.1 知識點總結

1.5.3 參數傳遞圖解與結論

通過上面的兩段程式可以得出如下結論:

從零開始學android程式設計_從零開始學程式設計第五天基礎文法第1章 方法1.1 方法概述1.2 方法的文法格式1.3 方法調用圖解1.4 方法定義練習1.5 方法的重載1.5.1 重載的注意事項1.5.2 參數傳遞1.5.3 參數傳遞圖解與結論第2章 随機點名器案例2.1 案例介紹2.2 案例需求分析2.3 實作代碼步驟第3章 庫存管理案例3.1 案例介紹3.2 案例需求分析3.3 實作代碼步驟第4章 總結4.1 知識點總結

l 當調用方法時,如果傳入的數值為基本資料類型(包含String類型),形式參數的改變對實際參數不影響

l 當調用方法時,如果傳入的數值為引用資料類型(String類型除外),形式參數的改變對實際參數有影響

第2章 随機點名器案例

2.1 案例介紹

随機點名器,即在全班同學中随機的列印出一名同學名字。

要做的随機點名器,它具備以下3個内容:

l 存儲所有同學姓名

l 總覽全班同學姓名

l 随機點名其中一人,列印到控制台

2.2 案例需求分析

在全班同學中随機的列印出一名同學名字。

我們對本案例進行分析,得出如下分析結果:

1.存儲全班同學名字

2.列印全班同學每一個人的名字

3.在班級總人數範圍内,随機産生一個随機數,查找該随機數所對應的同學名字

該案例須有以下3個内容:

l 存儲所有同學姓名

l 總覽全班同學姓名

l 随機點名其中一人,列印到控`制台

随機點名器明确地分為了三個功能。如果将多個獨立功能的代碼寫到一起,則代碼相對冗長,我們可以針對不同的功能可以将其封裝到一個方法中,将完整獨立的功能分離出來。

而在存儲同學姓名時,如果對每一個同學都定義一個變量進行姓名存儲,則會出現過多孤立的變量,很難一次性将全部資料持有。此時,我們可以使用數組解決多個資料的存儲問題。

2.3 實作代碼步驟

編寫CallName.java檔案,完成程式的編寫。

l  main方法中調用三個獨立方法    public static void main(String[] args) {        System.out.println("--------随機點名器--------");        // 建立一個存儲多個同學名字的容器(數組)        String[] students = new String[3];        /*         * 1.存儲全班同學名字         */        addStudentName(students);        /*         * 2.列印全班同學每一個人的名字         */        printStudentName(students);        /*         * 3.擷取随機點名到的學生姓名,并列印         */        String randomName = randomStudentName(students);        System.out.println("被點到名的同學是 :" + randomName);    } l  1.存儲所有同學姓名    /**     * 1.存儲全班同學名字     * 建立一個存儲多個同學名字的容器(數組)     *  鍵盤輸入每個同學的名字,存儲到容器中(數組)     */    public static void addStudentName(String[] students) {        //鍵盤輸入多個同學名字存儲到容器中        Scanner sc = new Scanner(System.in);        for (int i = 0; i < students.length; i++) {            System.out.println("存儲第"+i+"個名稱:");            students[i] = sc.next();        }    }上述方法中,通過鍵盤錄入,完成為指定數組元素指派。方法定義時,将參數定義為字元串數組,用于接收存放的同學姓名。l  列印全班同學每一個人的名字    /**     * 2列印全班同學每一個人的名字     */    public static void printStudentName(String[] students) {        //周遊數組,得到每個同學名字        for (int i = 0; i < students.length; i++) {            String name = students[i];            //列印同學名字            System.out.println("第"+i+"個學生名稱:" + name);        }    }         上述方法中,方法參數students數組中存儲了所有學生的姓名。通過周遊将數組中的每一個元素通路一遍,得到每一個同學名稱。l  3.擷取随機點到的學生姓名    /**     * 3.在班級總人數範圍内,随機産生一個随機數,傳回随機數位置上的學生姓名     */    public static String randomStudentName(String[] students) {        //根據數組長度,擷取随機索引        int index = new Random().nextInt(students.length);        //通過随機索引從數組中擷取名稱        String name = students[index];        //傳回随機點到的名稱        return name;    }
           

上述方法中,通過随機數類Random産生一個從0到數組長度的随機索引。使用該索引擷取students數組中對應的值,便得到了全班同學的随機姓名。

第3章 庫存管理案例

3.1 案例介紹

現在,我們将原有的庫存管理案例,進行業務邏輯的封裝。

将對下列功能進行方法封裝:

l 列印庫存清單功能

l 庫存商品數量修改功能

l 退出程式功能

3.2 案例需求分析

管理者能夠進行的操作有3項(檢視、修改、退出),我們可以采用(switch)菜單的方式來完成。

-------------庫存管理------------

1.檢視庫存清單

2.修改商品庫存數量

3.退出

請輸入要執行的操作序号:

每一項功能操作,我們采用方法進行封裝,這樣,可使程式的可讀性增強。

選擇“1.檢視庫存清單”功能,則控制台列印庫存清單

選擇“2.修改商品庫存數量”功能,則對每種商品庫存數進行更新

選擇“3.退出”功能,則退出庫存管理,程式結束

3.3 實作代碼步驟

編寫代碼Demo庫存管理.java,完成如下功能:

l 功能菜單

public static int chooseFunction() {

System.out.println("-------------庫存管理------------");

System.out.println("1.檢視庫存清單");

System.out.println("2.修改商品庫存數量");

System.out.println("3.退出");

System.out.println("請輸入要執行的操作序号:");

//接收鍵盤輸入的功能選項序号

Scanner sc = new Scanner(System.in);

int choose = sc.nextInt();

return choose;

}

上述方法用來完成庫存管理功能菜單的顯示、接收管理者選擇的功能操作序号。這是完成了案例的第一步。接下來完成“檢視、修改、退出”這三項功能。

l 編寫main主方法,調用庫存管理功能菜單方法,和“檢視、修改、退出”這三個方法。

    public static void main(String[] args) {        //記錄庫存商品資訊        //品牌型号        String[] brands = new String[]{"MacBookAir", "ThinkpadT450"};        //尺寸大小        double[] sizes = new double[]{13.3, 14.0};        //價格        double[] prices = new double[]{6988.88, 5999.99};        //庫存個數        int[] counts = new int[]{0, 0};               //通過while循環模拟管理者進行功能重複選擇操作        while (true) {            //列印功能菜單操作,接收鍵盤輸入的功能選項序号            int choose = chooseFunction();            //執行序号對應的功能            switch (choose) {            case 1://檢視庫存清單                printStore(brands, sizes, prices, counts);                break;            case 2://修改商品庫存數量                update(brands, counts);                break;            case 3://退出                exit();                return;            default:                System.out.println("----------------------------------");                System.out.println("功能選擇有誤,請輸入正确的功能序号!");                break;            }        }    }         在主方法中,建立了5個數組,分别用來存儲商品的品牌型号、尺寸大小、價格、配置、庫存個數,通過接收到的功能選項序号,進行switch語句判斷後,調用對應的功能方法。l  檢視庫存清單功能    /**     * 檢視庫存清單     * @param brands 商品品牌型号     * @param sizes 商品尺寸大小      * @param prices 商品價格     * @param counts 商品庫存個數     */    public static void printStore(String[] brands, double[] sizes, double[] prices, int[] counts) {        //統計總庫存個數、統計庫存總金額        int totalCount = 0;        double totalMoney = 0.0;        for (int i = 0; i < brands.length; i++) {            totalCount += counts[i];            totalMoney += counts[i] * prices[i];        }        //清單頂部        System.out.println("---------------------------檢視庫存清單--------------------------");        System.out.println("品牌型号     尺寸 價格 庫存數");        //清單中部        for (int i = 0; i < brands.length; i++) {            System.out.println(brands[i]+"  "+sizes[i]+"    "+prices[i]+"   "++counts[i]);        }        //清單底部        System.out.println("-------------------------------------------------------------");        System.out.println("總庫存數:"+totalCount);        System.out.println("庫存商品總金額:"+totalMoney);    }         上述方法用來完成列印庫存清單功能,5個方法參數用來列印的庫存商品相關資訊l  修改商品庫存數量功能    /**     * 修改商品庫存數量     * @param brands 商品品牌型号     * @param counts 商品庫存個數     */    public static void update(String[] brands, int[] counts){        System.out.println("------------修改商品庫存數量-----------");        for (int i = 0; i < brands.length; i++) {            System.out.println("請輸入"+ brands[i] +"商品庫存數");            counts[i] = new Scanner(System.in).nextInt();        }    }         上述方法用來完成修改商品庫存數量功能,2個方法參數用來指定所要修改的商品與庫存數l  退出功能    /**     * 退出     */    public static void exit(){        System.out.println("----------------退出---------------");        System.out.println("您已退出系統");    }
           

上述方法用來完成退出程式的功能

第4章 總結

4.1 知識點總結

l 方法

格式:

修飾符 傳回值類型 方法名(參數類型 參數名1, 參數類型 參數名2, ...) {

方法體;

return 傳回值;

}

方法使用的注意事項:

1,方法不調用,自己不執行

2,方法中不能定義方法, 但是,方法中可以調用方法

3, 方法定義的位置在類中,其他方法的外面

4, 如果方法沒有明确的傳回值類型,使用'空'類型, void表示

5,void隻能在方法傳回值類型位置使用,不能作為 普通的資料類型使用

6, 如果方法傳回值類型為void類型,可以省略 return ;

方法調用方式:

有明确傳回值類型的方法調用方式:

1,單獨調用

2,輸出調用

3,指派調用

沒有明确傳回值類型的方法調用方式:

1, 單獨調用

方法重載:

方法重載,在同一個類中,出現了多個同名的方法,他們的參數清單不同 (參數清單的個數不同,參數清單的資料類型不同,參數清單的順序不同)。

方法重載特點:

與方法的傳回值類型無關,與方法的參數名無關,隻看方法名與參數清單;

方法重載,是通過JVM來完成同名方法的調用的,通過參數清單來決定調用的是哪一個方法。