05 Java方法

一、方法

1.方法是什么

  • 方法是一种语法结构,它可以把一段代码封装称一个功能,以便重复调用

2.方法的完整格式

3.方法如何执行

  • 定义方法后,必须调用才可以跑起来,调用格式:方法名(...)

4.方法定义时几个注意点

  • 方法的修饰符:暂时都使用public static修饰
  • 方法申明了具体的返回值类型,内部必须使用return返回对应类型的数据
  • 形参列表可以有多个,甚至可以没有;如果有多个形参,多个形参必须用“,”隔开,且不能给初始化值

5.使用方法的好处是?

  • 提高了代码的复用性,提高了开发效率
  • 让程序的逻辑更加清晰
package define;

public class MethodDemo1 {
    public static void main(String[] args) {
        // 目标:掌握定义方法的完整格式,搞清楚使用方法的好处。
        // 需求:假如现在很多程序员都要进行2个整数求和的操作

        // 1. 李工
        int rs = sum(10,20);
        System.out.println("和是:" +rs);

//        int a = 10;//原本写法
//        int b = 20;
//        int c = a + b;
//        System.out.println("和是:" + c);

        // 2. 张工
        int rs2 = sum(30,20);
        System.out.println("和是:" + rs2);
//        int a1 = 20;
//        int b1 = 30;
//        int c1 = a1 + b1;
//        System.out.println("和是:" + c1);

    }

    //封装一段功能代码,以便别人重复调用
    public static int sum(int a , int b){
        int c = a + b;
        return c;
    }

}

二、方法的其他形式

1.方法定义时:

  • 需要按照方法解决的实际业务需求,来设计合理的方法形式解决问题

2.注意事项

  • 如果方法不需要返回数据,返回值类型必须申明void(无返回值申明),此时方法内部不可以使用return返回数据
  • 方法如果不需要接收数据,则不需要定义形参,且调用方法时也不可以传数据给方法
  • 没有参数,且没有返回值类型(void)申明的方法,称为无参数、无返回值的方法,依此类推
package define;

public class MethodDemo2 {
    public static void main(String[] args) {
        // 目标:掌握按照方法解决的实际业务需求不同,设计出合理的方法形式来解决问题。
        // 需求:打印3行Hello World
        printHelloWorld();

        System.out.println("-----------------");

        printHelloWorld1(5);
    }

    /**
     * 无参数,无返回值的方法
     */
    public static void printHelloWorld(){//如果没有返回值,一定要填void,表示无返回值
        for (int i = 1; i <= 3 ; i++) {
            System.out.println("Hello World");
        }

    }

    /**
     * 有参数,无返回值的方法
     */
    public static void printHelloWorld1(int n){//要接受n个数据
        for (int i = 1; i <= n ; i++) {
            System.out.println("Hello World1");
        }

    }
}

三、方法使用时的常见问题

1. 方法在类中的位置放前放后无所谓,但一个方法不能定义在另一个方法里面


2. 方法的返回值类型写void(无返回申明)时,方法内不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据。


3. return语句的下面,不能编写代码,属于无效的代码,执行不到这儿


4. 方法不调用就不会执行,调用方法时,传给方法的数据,必须严格匹配方法的参数情况


5. 调用有返回值的方法,有3种方式:(1)可以定义变量接收结果 (2)或者直接输出调用 (3)甚至直接调用


6. 调用无返回值的方法,只有1种方式:(1)只能直接调用

package define;

public class MethodDemo3 {
    public static void main(String[] args) {
        // 目标:搞清楚使用方法时的几个常见问题
        // 1. 方法在类中的位置放前放后无所谓,但一个方法不能定义在另一个方法里面
        printHelloWorld();

        // 2. 方法的返回值类型写void(无返回申明)时,方法内不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据。

        // 3. return语句的下面,不能编写代码,属于无效的代码,执行不到这儿

        // 4. 方法不调用就不会执行,调用方法时,传给方法的数据,必须严格匹配方法的参数情况

        // 5. 调用有返回值的方法,有3种方式:(1)可以定义变量接收结果 (2)或者直接输出调用 (3)甚至直接调用
        int rs = sum(10,20);
        System.out.println(rs);//定义变量接收结果
        System.out.println(sum(10,90));//直接输出调用
        sum(100,200);//直接调用,但不打印

        // 6. 调用无返回值的方法,只有1种方式:(1)只能直接调用



    }

    public static int sum(int a,int b){//2,3
        int c = a + b;
        return c;//有返回值类型int一定要写return
        //System.out.println(2);//return下面不能编写代码

    }

    public static void printHelloWorld(){//1
        for (int i = 1; i <= 3 ; i++) {
            System.out.println("Hello World");
        }

    }
}

四、方法的案例

1.设计方法的技巧,主要关注三方面:

  • 方法是否需要接收数据进行处理?
  • 方法是否需要返回数据?
  • 方法要处理的业务(编程能力)。

2.案例-计算1-n的和

  • 方法是否需要接收数据进行处理?   需要接收n具体的值,因此形参声明为: int n
  • 方法是否需要返回数据?  需要返回1-n的求和结果,因此返回值类型声明为int.
  • 方法内部的业务:完成求1-n的和并返回。

3.案例-判断一个整数是奇数还是偶数

需求:判断一个整数是奇数还是偶数,并把判断的结果输出出来

分析:

  • 方法是否需要接收数据进行出来?  需要接收一个整数来判断,因此形参声明为: int number.
  • 方法是否需要返回数据?  方法内部判断完后直接输出结果即可,无需返回,因此返回值类型声明为:void
  • 方法内部的业务:通过if语句判断number是奇数还是偶数,并输出结果。
package define;

public class MethodTest4 {
    public static void main(String[] args) {
        // 目标:掌握设计方法的技巧
        int rs = add(5);
        System.out.println("1-5的和是:" + rs);

        System.out.println("---------------");

        judge(10);

    }

    public static void judge(int number){
        if(number % 2 == 0){
            System.out.println(number + "是一个偶数!");
        }else {
            System.out.println(number + "是一个奇数!");
        }
    }

    public static int add(int n){
        //i = 1 2 3 ... n
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += i;
        }
        return sum;
    }
}

五、方法在计算机中的执行原理

  • 方法被调用的时候,是进入到栈内存中运行
  • 栈的特点:先进后出
  • 方法为什么要在栈中运行自己?  保证一个方法调用完另一个方法后,可以回来

六、Java的参数传递机制

1.基本类型的参数传递

Java的参数传递机制都是:值传递

  • 所谓值传递:指的是在传输实参给方法的形参的时候,传递的是实参变量中存储的值的副本。
  • 实参:在方法内部定义的变量
  • 形参:定义方法时“(...)”中所声明的参数

package parameter;

public class MethodDemo1 {
    public static void main(String[] args) {
        // 目标: 理解方法的参数传递机制,值传递
        int a = 10;
        change(a); // change(10);
        System.out.println("main:" + a);  //10
    }
    public static void change(int a){
        System.out.println("change1:" + a);
        a = 20;
        System.out.println("change2:" + a);
    }
}

2.引用类型的参数传递

package parameter;

public class MethodDemo2 {
    public static void main(String[] args) {
        // 目标: 理解引用类型的参数传递机制:值传递的。
        int[] arrs = new int[]{10,20,30};
        //数据放在堆内存中,arrs在栈中是堆内存的地址
        change(arrs);//把地址值传给change后,在change里面修改数据,结束后回到main方法中地址值里面的数据也会改变
        System.out.println("main:" + arrs[1]);

    }

    public static void change(int[] arrs){
        System.out.println("方法内1:" + arrs[1]);
        arrs[1] = 222;
        System.out.println("方法内2:" + arrs[1]);
    }

}

3.引用类型参数传递的相关案例-数组的传递

(1)打印int类型的数组内容

需求:

  • 输出一个int类型的数组内容,要求输出格式为:[11,22,33,44,55]。

分析:

  • 方法是否需要接收数据进行处理? 需要接收一个int类型的数组,因此形参声明为: int[] arr.
  • 方法是否需要返回数据? 方法内部直接输出数组内容即可,无需返回,因此返回值类型声明为:void
  • 方法内部的业务:遍历数组,并输出相应的内容
package parameter;

public class MethodTest3 {
    public static void main(String[] args) {
        // 目标: 完成打印int类型的数据内容。
        int[] arr = {10, 30, 50, 70};
        printArray(arr);

        int[] arr2 = null;
        printArray(arr2);

        int[] arr3 = {};
        printArray(arr3);
    }

    public static void printArray(int[] arr){

        if(arr == null){//没有这个if,客户要是输了null就会报错
            System.out.println(arr);//null
            return; //退出当前方法
        }

        System.out.print("[");
        // 直接遍历接到的数组元素
        for (int i = 0;i < arr.length;i++){

            /** 这种打印方式过于繁琐
            if(i == arr.length - 1){  //到了最后一个元素要将后面的逗号去掉
                System.out.print(arr[i]);
            }else{
                System.out.print(arr[i] + ", ");
            }
             */

            System.out.print(i == arr.length -1 ?arr[i] : arr[i] + ", " );

        }
        System.out.println("]");
    }

}

(2)比较两个int类型的数组是否一样,返回true或者false

需求:

  • 如果两个int类型的数组,元素个数,对应位置的元素内容都是一样的则认为这2个数组是一摸一样的。

分析:

  • 方法是否需要接收数据进行处理?需要接受两个int类型的数组,因此,形参声明为:int[] arr1,int[] arr2
  • 方法是否需要返回数据? 方法判断完后需要返回:true、false,因此,返回值类型声明为boolean类型。
  • 方法内部的业务:判断两个数组内容是否一样。
package parameter;

public class MethodTest4 {
    public static void main(String[] args) {
        // 目标:完成判断两个int类型的数组是否一样
        int[] arr1 = null;
        int[] arr2 = {10};
        System.out.println(equal(arr1, arr2));

    }

    public static boolean equal(int[] arr1, int[] arr2){
        // 1. 判断arr1和arr2是否都是null
        if (arr1 == null && arr2 == null){//都
            return true; // 相等的
        }

        // 2. 判断arr1是null 或者 arr2是null
        if (arr1 == null || arr2 == null){
            return false; // 不相等
        }

        // 3. 判断两个数组的长度是否一样,如果长度不一样,直接返回false
        if (arr1.length != arr2.length){
            return false; // 不相等
        }

        // 4. 两个数组的长度是一样的,接着比较它们的内容是否一样
        // arr1 = {10,20,30}
        // arr2 = {10,20,30}
        for (int i = 0; i < arr1.length; i++) {
            // 判断当前位数2个数组的元素是否不一样,不一样直接返回false
            if(arr1[i] != arr2[i]){
                return false; // 不相等
            }
        }
        return true;
    }
}

七、方法重载

  • 一个类中,出现多个方法的名称相同,但是它们的形参列表是不同的,那么这些方法就称为方法重载了。

1.方法重载的注意事项

  • 一个类中,只要一些方法的名称相同、形参列表不同,那么它们就是方法重载了,其它的都不管(如:修饰符,返回值类型是否一样都无所谓)
  • 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称
package overload;

public class MethodOverloadDemo1 {
    public static void main(String[] args) {
        // 目标: 认识方法重载,并认识其应用场景
        test();
        test(100);
    }

    public static void test(){
        System.out.println("===test===");
    }

    public static void test(int a){
        System.out.println("===test2===" + a);
    }

    void test(double a){

    }

    //形参的顺序不同
    void test(double a,int b){

    }

    void test(int a,double b){

    }
    //以上是形参的顺序不同

    int test(int a, int b){
        return a + b;
    }

}

2.方法重载的应用场景

  • 开发中我们经常需要为处理一类业务,提供多种解决方案,此时用方法重载来设计是很专业的。

3.案例导学

(1)开发武器系统,功能需求如下:

  • 可以默认发一枚武器
  • 可以指定地区发射一枚武器
  • 可以指定地区发射多枚武器
package overload;

public class MethodTest2 {
    public static void main(String[] args) {
        // 目标: 掌握方法重载的应用场景
        fire();
        fire("米国");
        fire("米国",999);
    }

    public static void fire(){
        System.out.println("默认给岛国发射了一枚武器~~");
    }

    public static void fire(String country){
        System.out.println("发射了一枚武器给" + country);
    }

    public static void fire(String country,int number){
        System.out.println("发射了" + number + "枚武器给" + country);
    }

}

八、补充知识:方法中单独使用return关键字

  • return;可以用在无返回值的方法中,作用是:立即跳出并结束当前方法的执行。
package returndemo;

public class ReturnDemo1 {
    public static void main(String[] args) {
        // 目标: 掌握return单独使用。return;可以用在无返回值的方法中,作用是:立即跳出并结束当前方法的执行。
        System.out.println("程序开始。。。");
        chu(10,0);
        System.out.println("程序结束。。。");
    }

    public  static void chu(int a,int b){
        if(b == 0){
            System.out.println("您的数据有问题,不能除0~~");
            return;
        }
        int c = a / b;
        System.out.println("除法结果是:" + c);
    }
}
  • break;跳出并结束当前所在循环的执行
  • continue;结束当前所在循环的当次继续,进入下一次执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值