方法(十)
方法(十)
方法与方法重载
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;
}
}
方法重载需要注意的点:
- 重载方法的名称需要与原来的方法一样
- 重载方法的参数或者返回值需要与原有方法不同
命令行传递参数
在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),可以看到成功运行了,但是输出的结果为空,因为我们没有给它传递参数。
我们接着后面加上一段字符串,再次运行,可以看到字符串被逐个输出了
可变参数
有些时候我们不知道传递的参数的具体个数,这个时候可变参数就来了,看下面的例子
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);
}
}
}