方法(十)

方法(十)

方法与方法重载

package com.luca.function;

public class FunctionDemo1 {
    public static void main(String[] args) {
        test(); //方法的调用
        FunctionDemo1 functionDemo = new FunctionDemo1();
        int add = functionDemo.add(1, 2); //这里传入的1,2是实参,是真正参与运算的
        System.out.println(add);
        /*在调用方法的时候,解释器会根据参数类型和返回值类型判断,使用的是重名方法中的哪一个
        这就是方法重载*/
        double add1 = functionDemo.add(1, 2);
        System.out.println(add1);
    }

    //public static都是修饰符,void表示方法没有返回值
    public static void test() {
        System.out.println("this is a function test.");
    }

    //int指的是返回值的类型,括号里是需要的参数
    public int add(int a, int b) { //这里的a,b是形式参数,可以看作是一个占坑的符号
        return a+b;
    }

    //这里定义了一个重名的add方法,但是参数类型和返回值不同
    public double add(double a, double b) {
        return a+b;
    }
}

方法重载需要注意的点:

  1. 重载方法的名称需要与原来的方法一样
  2. 重载方法的参数或者返回值需要与原有方法不同

命令行传递参数

在main方法中,参数String args[]指的是一个String类型的数组,它可以接收来自命令行传递的参数

package com.luca.function;

public class FunctionDemo2 {
    public static void main(String[] args) {
        //命令行传参
        for (int i = 0; i < args.length; i++) {
            //将数组中的参数逐个打印
            System.out.println(args[i]);
        }
    }
}

我们打开终端,找到上述代码的文件;首先使用javac命令生成class文件,然后我们使用java命令运行。在这里需要注意的是,我的文件是有包的"package com.luca.function;",所以我需要在com目录的上级目录运行,java FunctionDemo2(我的文件名称叫FunctionDemo2),可以看到成功运行了,但是输出的结果为空,因为我们没有给它传递参数。

image-20210209104424839

我们接着后面加上一段字符串,再次运行,可以看到字符串被逐个输出了

image-20210209104523670

可变参数

有些时候我们不知道传递的参数的具体个数,这个时候可变参数就来了,看下面的例子

package com.luca.function;

public class FunctionDemo3 {
    public static void main(String[] args) {
        getMax(1, 3, 5, 7, 9);
    }
    
    //获取一串数字中最大的一个,但是我们不知道会有多少个数字
    //这里要在最后一个参数类型后面加上... 就是可变参数
    public static int getMax(int... num) {
        if (num.length == 0) {
            System.out.println("未输入数字!");
            return 0;
        }
        int max = 0;
        for (int i = 0; i < num.length; i++) {
            if (max < num[i]) {
                max = num[i];
            }
        }
        System.out.println("最大的数字是: "+max);
        return max;
    }
}

迭代

package com.luca.function;

public class FunctionDemo4 {
    public static void main(String[] args) {
        int f = fac(5);
        System.out.println(f);
    }

    //计算一个数的阶乘,使用迭代,即方法调用自身
    //当迭代的层数变多是,可能会出现栈溢出的问题,尽量避免在代码中使用迭代
    /*
    1! = 1
    2! = 2 * 1
    3! = 3 * 2 * 1
    4! = 4 * 3 * 2 * 1
    5! = 5 * 4 * 3 * 2 * 1

    5! = fac(5)
       = 5 * fac(4)
       = 5 * 4 * fac(3)
       = 5 * 4 * 3 * fac(2)
       = 5 * 4 * 3 * 2 * fac(1)
       = 5 * 4 * 3 * 2 * 1
     */
    public static int fac(int n) {
        if (n==1) {
            return 1;
        } else {
            return n * fac(n-1);
        }
    }
}
posted @ 2021-02-09 10:59  LucaZ  阅读(36)  评论(0编辑  收藏  举报