Java方法详解
方法的定义
-
Java方法是语句的集合,一段语句集合在一起执行一个功能
- 方法是解决一类问题的步骤的有序结合
- 方法包含在类或对象中
- 方法在程序中被创建,在其他地方被调用
-
方法设计原则:方法的本意是功能块,设计方法的时候,最好一个方法只完成一个功能
-
语法:
修饰符 返回值类型 方法名(参数类型 参数名){ //方法语句块 return 返回值; }
- 修饰符:可选项,定义方法的访问类型
- 返回值类型:方法如果有void修饰符,表示返回值为空,则不需要返回值;如果没有void修饰符,则需要给方法一个返回值
- 方法名:方法实际名称
- 参数类型:方法中的参数属于形式变量,实际调用方法时传递的参数为实参
- 方法体:具体的语句,实现该方法的功能
-
举例:
package method;
public class Demo01 {
public static void main(String[] args) {
//调用add方法,传入实参2,5
int sum=add(2,5);
System.out.println(sum);
}
//创建一个方法add,类型为int,形参为a,b
public static int add(int a,int b){
return a+b;
}
}
package method;
public class Demo02 {
public static void main(String[] args) {
//调用test方法
test();
}
// 创建一个方法test,无返回值和参数
public static void test() {
for (int i = 1; i <= 1000; i++) {
if (i % 5 == 0) {
System.out.print(i + "\t");
}
if (i % (5 * 3) == 0) {
System.out.println();
}
}
}
}
方法的调用
-
调用方法:对象名.方法名(实参)
-
Java支持另种方法的调用,根据方法是否返回值来选择
-
当方法返回一个值的时候,方法调用通常被当做一个值,例如:
int larger=max(30,40);
-
如果方法返回值是viod,方法调用的一定是语句
System.out.println("学习使我快乐!");
-
举例:
package method; public class Demo03 { public static void main(String[] args) { //调用test方法 int max=test(10,20); System.out.println(max); } //定义一个方法,用于比大小 public static int test(int a,int b){ int result=0; if(a==b){ System.out.println("a和b相等"); return 0;//return 可以用于直接退出执行 }else if(a>b){ result=a; }else { result=b; } return result; } }
方法的重载
- 重载即在一个类中,有相同的方法名,但形参不同
- 方法重载规则:
- 方法名必须相同
- 参数必须不同(个数、类型、参数排列顺序等)
- 返回类型可以相同,也可以不同
- 只有返回类型不同不足以成为方法的重载
- 实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,已选择对应的方法,如果匹配失败,则编译器报错
package method;
public class Demo03 {
public static void main(String[] args) {
//方法名相同,编译器会根据调用方法参数类型选择对应的执行方法
int max=test(10.2,10);
System.out.println(max);
}
//参数类型都为int
public static int test(int a,int b){
int result=0;
if(a==b){
System.out.println("a和b相等");
return 0;
}else if(a>b){
result=a;
}else {
result=b;
}
return result;
}
//参数类型都为double和int
public static int test(double a,int b){
int result=0;
if(a==b){
System.out.println("a和b相等");
return 0;
}else if(a>b){
result=(int)a;
}else {
result=b;
}
return result;
}
}
命令行传参
-
有时候当一个程序在运行的时候传递给它消息,这时需要靠传递命令行参数给main()函数实现
-
举例:
- 第一步:
package method; public class Demo04 { public static void main(String[] args) { for(int i=0;i<args.length;i++){ System.out.println("args["+i+"]:"+args[i]); } } }
-
第二步,在Terminal中直接运行时会报错,所以在Doc命令中运行
-
-
注:直接在method中去运行java文件,会报错,所以需要退回到src中在输入“java method.Demo04 +内容”运行即可以看到数组中的每个数
-
可变参数
- 从JDK1.5开始,Java支持传递同类型的可变参数给一个方法
- 在方法声明中,在指定参数类型后加一个省略号(…)
- 一个方法只能指定一个可变参数,必须是方法的最好一个参数,其他的参数一定要在可变参数之前声明
package method;
public class Demo05 {
public static void main(String[] args) {
//调用方法
printMax(7,6,3,4);
//调用方法,可变参数本质上还是数组
printMax(new double[]{5,4,1,6});
}
//定义一个排序方法的可变参数,类型都为double
public static void printMax(double...numbers){
if(numbers.length==0){
System.out.println("没有参数");
return;
}
double result=numbers[0];
for (int i=0;i<numbers.length;i++){
if(numbers[i]>result){
result=numbers[i];
}
}
System.out.println("最大的数为:"+result);
}
}
递归
- 递归就是:A方法调用A方法,即方法自己调用自己(一般是A方法调用B方法)
- 递归结构包括两个部分:
- 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环
- 递归体:什么时候去调用自身方法
package method;
public class Demo06 {
public static void main(String[] args) {
//调用方法f(i)
int n=f(3);
System.out.println(n);
}
//求5!(5的阶乘)
//1! 1
//2! 2*1
//3! 3*2*1 3*2!
public static int f(int i){
if(i==1){ //递归头
return 1;
}
return i*f(i-1); //递归体
}
}