java从入门到精通-day05、【方法】&【重载】

day05【方法】

今日内容

方法的概念

方法的参数和返回值

方法的重载

方法的练习

教学目标

能够知道方法定义和通用格式

能够知道形参和实参的区别

能够使用方法完成两个较大数的获取并调用方法

能够知道方法重载的特点

能够使用方法重载完成比较两个整数是否相同并调用方法

能够使用方法完成数组遍历并调用方法

能够使用方法完成获取数组最大值并调用方法

第一章 方法入门

1.1 概述

我们在学习运算符的时候,都为每个运算符单独的创建一个新的类和main方法,我们会发现这样编写代码非常的繁琐,而且重复的代码过多。能否避免这些重复的代码呢,就需要使用方法来实现。

方法:就是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。

当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。

1.2 无参数无返回值的方法定义

定义格式:

修饰符返回值类型方法名(参数列表){

    代码... 

    return;

定义格式解释:

修饰符: 目前固定写法 public static 。

返回值类型: 目前固定写法 void ,其他返回值类型在后面的课程讲解。

方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。

参数列表: 目前无参数, 带有参数的方法在后面的课程讲解。

return:方法结束。因为返回值类型是void,方法大括号内的return可以不写。

举例:

publicstaticvoidmethod() {

  System.out.println("这是一个方法");

}

注意:方法必须先定义,后调用,否则程序将报错,而且方法不调用不执行

1.3 无参数无返回值的方法的调用

方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法。在主方法中,直接写要调用的方法名字就可以调用了。

调用格式:

方法名();

举例:

method();

1.4 无参数无返回值的方法的调用图解

publicstaticvoidmain(String[]args) {

//调用定义的方法method

method();

}

//定义方法,被main方法调用

publicstaticvoidmethod() {

  System.out.println("这是一个方法");

}

总结:每个方法在被调用执行的时候,都会进入栈内存,并且拥有自己独立的内存空间,方法内部代码调用完毕之后,会从栈内存中弹栈消失。

1.5 无参数无返回值的方法练习

需求1: 定义一个方法,打印输出该方法内部的数据(方法内部定义的变量)是否是偶数

思路:

①定义一个方法,用于打印该方法内部的数字是否是偶数,例如isEvenNumber()

②方法中定义一个变量,用于保存一个数字

③使用if语句判断数字是否是偶数,并打印结果

④在main()方法中调用定义好的方法

代码:

publicclassMethodDemo{

publicstaticvoidmain(String[]args) {

//调用方法

isEvenNumber();

   }

//需求:定义一个方法,在方法中定义一个变量,判断该数据是否是偶数

publicstaticvoidisEvenNumber() {

//定义变量

intnumber=10;

number=9;

//判断该数据是否是偶数

if(number%2==0) {

System.out.println(true);

}else{

System.out.println(false);

       }

   }

}

需求2:定义一个方法,打印该方法内部的两个数据(方法内部定义的变量)的最大值

思路:

①定义一个方法,用于打印两个数字中的较大数,例如getMax()

②方法中定义两个变量,用于保存两个数字

③使用分支语句分两种情况对两个数字的大小关系进行处理

④在main()方法中调用定义好的方法

代码:

publicclassMethodTest{

publicstaticvoidmain(String[]args) {

//在main()方法中调用定义好的方法

getMax();

   }

//定义一个方法,用于打印两个数字中的较大数,例如getMax()

publicstaticvoidgetMax() {

//方法中定义两个变量,用于保存两个数字

inta=10;

intb=20;

//使用分支语句分两种情况对两个数字的大小关系进行处理

if(a>b) {

System.out.println(a);

}else{

System.out.println(b);

       }

   }

}

第二章 方法详解

2.1 定义方法的格式详解

修饰符返回值类型方法名(参数列表){

//代码省略...

return结果;

}

修饰符: public static 固定写法

返回值类型: 表示方法运行的结果的数据类型,方法执行后将结果返回到调用者

参数列表:方法在运算过程中的未知数据,调用者调用方法时传递

return:将方法执行后的结果带给调用者,方法执行到return ,整体方法运行结束

小贴士:return 结果;  这里的"结果"在开发中,我们正确的叫法成为方法的返回值

2.2 定义方法的三个明确

明确方法名称:给方法起个名字,方便调用,只要符合标识符规则就可以,尽量做到见名知意

明确返回值类型:方法计算的是整数的求和,结果也必然是个整数,返回值类型定义为int类型。

明确参数列表:计算哪两个整数的和,并不清楚,但可以确定是整数,参数列表可以定义两个int类型的变量,由调用者调用方法时传递

2.3  带参数的方法定义

定义格式:

参数:由数据类型和变量名组成 -  数据类型 变量名

参数范例:int a

public static void 方法名 (参数1) {

方法体;

}

public static void 方法名 (参数1, 参数2, 参数3...) {

方法体;

}

范例:

public static void printSum(int a,int b){

int sum = a + b;

    System.out.println(sum);

}

注意:

方法定义时,参数中的数据类型与变量名都不能缺少,缺少任意一个程序将报错

方法定义时,多个参数之间使用逗号( ,)分隔

2.3 带参数的方法调用

调用格式:

方法名(参数);

方法名(参数1,参数2);

范例:

printSum(5,6);

2.4 带参数的方法调用流程图解

public static void main(String[] args) {

    //调用定义的方法method

    printSum(5,6);

}

//定义方法,被main方法调用

public static void printSum(int a,int b){

int sum = a + b;

    System.out.println(sum);

}


2.5 带参数的方法练习

需求1:定义一个方法,该方法接收一个参数,方法内部打印是输出该数据是否是偶数

思路:

①定义一个方法,用于打印该方法内部的数字是否是偶数,例如isEvenNumber()

②为方法定义一个变量作为方法参数,用于接收一个数字

③方法内部使用if语句判断数字是否是偶数,并打印结果

④在main()方法中调用定义好的方法,传递方法需要的参数(常量/变量)

代码:

public class MethodDemo {

    public static void main(String[] args) {

        //常量值的调用

        isEvenNumber(10);

        //变量的调用

        int number = 10;

        isEvenNumber(number);

    }

    //需求:定义一个方法,该方法接收一个参数,判断该数据是否是偶数

    public static void isEvenNumber(int number) {

        if(number%2 == 0) {

            System.out.println(true);

        } else {

            System.out.println(false);

        }

    }

}

需求2:定义一个方法用于打印两个数中的较大数,数据来自于方法参数

思路:

①定义一个方法,用于打印两个数字中的较大数,例如getMax()

②为方法定义两个参数,用于接收两个数字

③使用分支语句分两种情况对两个数字的大小关系进行处理

④在main()方法中调用定义好的方法(使用常量)

⑤在main()方法中调用定义好的方法(使用变量)

代码:

public class MethodTest {

    public static void main(String[] args) {

        //在main()方法中调用定义好的方法(使用常量)

        getMax(10,20);

        //调用方法的时候,人家要几个,你就给几个,人家要什么类型的,你就给什么类型的

        //getMax(30);

        //getMax(10.0,20.0);

        //在main()方法中调用定义好的方法(使用变量)

        int a = 10;

        int b = 20;

        getMax(a, b);

    }

    //定义一个方法,用于打印两个数字中的较大数,例如getMax()

    //为方法定义两个参数,用于接收两个数字

    public static void getMax(int a, int b) {

        //使用分支语句分两种情况对两个数字的大小关系进行处理

        if(a > b) {

            System.out.println(a);

        } else {

            System.out.println(b);

        }

    }

}

2.6 带返回值的方法定义

定义格式

public static 数据类型 方法名 ( 参数 ) {

return 数据 ;

}

范例

public static int getSum(int a,int b){

int sum = a + b;

    return sum;

}

注意

方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错

2.7 带返回值的方法调用

调用格式

方法名 ( 参数 ) ;

数据类型 变量名 = 方法名 ( 参数 ) ;

范例

getSum(5,6);

int result = getSum(5,6);

注意:

方法的返回值通常会使用变量接收,否则该返回值将无意义

2.8 带返回值的方法调用流程图解

2.9 带返回值的方法练习

需求1: 定义一个方法,该方法接收一个参数,判断该数据是否是偶数,并返回真假值

思路:

①定义一个方法,用于获取一个数字是否是偶数

②使用分支语句对数字是否是偶数进行处理

③根据题设分别设置两种情况下对应的返回结果

④在main()方法中调用定义好的方法并使用变量保存

⑤在main()方法中调用定义好的方法并直接打印结果

代码:

public class MethodDemo {

    public static void main(String[] args) {

        //1:方法名(参数);

        //isEvenNumber(10);

        //true;

        //2:数据类型 变量名 = 方法名(参数);

        boolean flag = isEvenNumber(10);

        //boolean flag = true;

        System.out.println(flag);

    }

    //需求:定义一个方法,该方法接收一个参数,判断该数据是否是偶数,并返回真假值

    public static boolean isEvenNumber(int number) {

        if(number%2 == 0) {

            return true;

        } else {

            return false;

        }

    }

}

需求:设计一个方法可以获取两个数的较大值,数据来自于参数

思路:

①定义一个方法,用于获取两个数字中的较大数

②使用分支语句分两种情况对两个数字的大小关系进行处理

③根据题设分别设置两种情况下对应的返回结果

④在main()方法中调用定义好的方法并使用变量保存

⑤在main()方法中调用定义好的方法并直接打印结果

代码:

public class MethodTest {

    public static void main(String[] args) {

        //在main()方法中调用定义好的方法并使用变量保存

        int result = getMax(10,20);

        System.out.println(result);

        //在main()方法中调用定义好的方法并直接打印结果

        System.out.println(getMax(10,20));

    }

    //定义一个方法,用于获取两个数字中的较大数

    public static int getMax(int a, int b) {

        //使用分支语句分两种情况对两个数字的大小关系进行处理

        //根据题设分别设置两种情况下对应的返回结果

        if(a > b) {

            return a;

        } else {

            return b;

        }

    }

}

2.10 定义方法的注意事项

方法不能嵌套定义

public class MethodDemo {

    public static void main(String[] args) {

    }

    public static void methodOne() {

public static void methodTwo() {

      // 这里会引发编译错误!!!

    }

    }

}

返回值类型,必须要和return语句返回的类型相同,否则编译失败 。

// 返回值类型要求是int

public static int getSum() {

    return 5;// 正确,int类型

    return 1.2;// 错误,类型不匹配

    return true;// 错误,类型不匹配

}

不能在return 后面写代码,return 意味着方法结束,所有后面的代码永远不会执行,属于无效代码。

public static int getSum(int a,int b) {

  return a + b;

  System.out.println("Hello");// 错误,return已经结束,这里不会执行,无效代码

}

void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据

public class MethodDemo {

    public static void main(String[] args) {

    }

    public static void methodTwo() {

        //return 100; 编译错误,因为没有具体返回值类型

        return;

        //System.out.println(100); return语句后面不能跟数据或代码

    }

}

第三章 方法重载

3.1 概念

方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。

多个方法在同一个类中

多个方法具有相同的方法名

多个方法的参数不相同,类型不同或者数量不同

注意

参数列表:个数不同,数据类型不同,顺序不同。

重载方法调用:JVM通过方法的参数列表,调用不同的方法。

3.2 方法重载练习

需求1:使用方法重载的思想,设计比较两个两个数据是否相等的方法,兼容全整数类型byte,short,int,long)

思路:

①定义比较两个数字的是否相同的方法compare()方法,参数选择两个int型参数

②定义对应的重载方法,变更对应的参数类型,参数变更为两个long型参数

③定义所有的重载方法,两个byte类型与两个short类型参数

④完成方法的调用,测试运行结果

代码:

public class Method_Demo6 {

    public static void main(String[] args) {

        //定义不同数据类型的变量

        byte a = 10;

        byte b = 20;

        short c = 10;

        short d = 20;

        int e = 10;

        int f = 10;

        long g = 10;

        long h = 20;

        // 调用

        System.out.println(compare(a, b));

        System.out.println(compare(c, d));

        System.out.println(compare(e, f));

        System.out.println(compare(g, h));

    }

    // 两个byte类型的

    public static boolean compare(byte a, byte b) {

        System.out.println("byte");

        return a == b;

    }

    // 两个short类型的

    public static boolean compare(short a, short b) {

        System.out.println("short");

        return a == b;

    }

    // 两个int类型的

    public static boolean compare(int a, int b) {

        System.out.println("int");

        return a == b;

    }

    // 两个long类型的

    public static boolean compare(long a, long b) {

        System.out.println("long");

        return a == b;

    }

}

需求2:判断哪些方法是重载关系。

public static void open(){}

public static void open(int a){}

static void open(int a,int b){}

public static void open(double a,int b){}

public static void open(int a,double b){}

public void open(int i,double d){}

public static void OPEN(){}

public static void open(int i,int j){}

第四章 方法的练习

4.1 练习一

需求1:设计一个方法用于数组遍历,要求遍历的结果是在一行上的。例如:[11, 22, 33, 44, 55]

思路:

①因为要求结果在一行上输出,所以这里需要在学习一个新的输出语句System.out.print(“内容”);

System.out.println(“内容”); 输出内容并换行

System.out.print(“内容”); 输出内容不换行

System.out.println(); 起到换行的作用

②定义一个数组,用静态初始化完成数组元素初始化

③定义一个方法,用数组遍历通用格式对数组进行遍历

④用新的输出语句修改遍历操作

⑤调用遍历方法

代码:

public class MethodTest01 {

    public static void main(String[] args) {

        //定义一个数组,用静态初始化完成数组元素初始化

        int[] arr = {11, 22, 33, 44, 55};

        //调用方法

        printArray(arr);

    }

    //定义一个方法,用数组遍历通用格式对数组进行遍历

    /*

        两个明确:

            返回值类型:void

            参数:int[] arr

    */

    public static void printArray(int[] arr) {

        System.out.print("[");

        for(int x=0; x<arr.length; x++) {

            if(x == arr.length-1) {

                System.out.print(arr[x]);

            } else {

                System.out.print(arr[x]+", ");

            }

        }

        System.out.println("]");

    }

}

4.2 练习二

需求2:设计一个方法用于获取数组中元素的最大值

思路:

①定义一个数组,用静态初始化完成数组元素初始化

②定义一个方法,用来获取数组中的最大值,最值的认知和讲解我们在数组中已经讲解过了

③调用获取最大值方法,用变量接收返回结果

④把结果输出在控制台

代码:

public class MethodTest02 {

    public static void main(String[] args) {

        //定义一个数组,用静态初始化完成数组元素初始化

        int[] arr = {12, 45, 98, 73, 60};

        //调用获取最大值方法,用变量接收返回结果

        int number = getMax(arr);

        //把结果输出在控制台

        System.out.println("number:" + number);

    }

    //定义一个方法,用来获取数组中的最大值

    /*

        两个明确:

            返回值类型:int

            参数:int[] arr

    */

    public static int getMax(int[] arr) {

        int max = arr[0];

        for(int x=1; x<arr.length; x++) {

            if(arr[x] > max) {

                max = arr[x];

            }

        }

        return max;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容