JavaMethod
- 什么是方法
- 方法的定义及调用
- 方法重载
- 命令行传参
- 可变参数
- 递归
何谓方法
-
方法是语句的结合,他们在一起执行一个功能。
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类中
- 方法在程序中被创建,在其地方被引用
-
设计方法时,最好保持方法的原子性,就是一个方法只完成一个功能,这样子利于我们后期的拓展。
-
命名规则:首字母小写的驼峰命名法
-
方法创建及使用
package com.heng.method; public class Demo01 { //main方法 public static void main(String[] args) { int sum = add(1,3); System.out.println(sum); } //add方法 public static int add(int a , int b){ return a+b; }
方法的定义及调用
- 方法的定义
-
方法包含一个方法头和一个方法体。以下是一个方法的所有部分
-
修饰符:定义了该方法的访问类型
-
返回值类型:方法会根据所需返回对应的值得类型,当无需返回值时,方法的类型是void
-
方法名:是方法的实际名称,方法名和参数表共同构成方法签名
-
参数类型:参数像是一个占位符。有实参与形参,也可以不包含参数
- 形参:在方法被调用时用于接收外界输入的数据
- 实参:调用方法是实际传给方法的数据
public class Demo01 { public static void main(String[] args) { //实际参数:实际调用传递给他的参数 int sum = add(1,3); System.out.println(sum); } //形式参数,用来定义作用的 public static int add(int a , int b){ return a+b; }
-
方法体:方法体包含具体的语句。定义了方法的功能
public static int add(int a,int b){ /* 修饰符:public static * 返回值类型:int * 方法名:add * 参数类型:int 参数名:a */ return a+b;//方法体 }
-
-
return除了放回值之外也可以终止方法。
- 方法的调用
- 调用方法:对象名.方法名(实参列表)
方法的重载
-
重载是在一个类中,有相同的函数名称,但形参不同的函数。
-
方法重载的规则
- 方法名必须相同。
- 参数类别必须不同(个数不同、类型不同、参数排列顺序不同等)
- 方法的返回类型可以相同也可以不同
- 仅仅返回类型不同不足以成为方法的重载
-
下面代码两个方法名都为max 但方法类型不同,所以两个方法重载
package com.heng.method; public class Demo02 { public static void main(String[] args) { //调用double类型的返回方法 double max = max(20,30); //根据需要的类型调用方法 System.out.println(max); } public static int max(int num1,int num2){ int result = 0; if(num1==num2){ System.out.println("num1=num2"); return 0;//终止方法 } if(num1>num2){ result = num1; }else { result = num2; } return result; } public static double max(double num1,double num2){ double result = 0; if(num1==num2){ System.out.println("num1=num2"); return 0;//终止方法 } if(num1>num2){ result = num1; }else { result = num2; } return result; } }
命令行传参
-
有时候你希望运行一个程序再传递给它消息,这要靠传递命令行参数给main()函数实现
package com.heng.method; public class Demo03 { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.println("args["+i+"]:"+args[i]); } } }
上述代码需要先进入到命令行模式编译成.class文件
编译完成后,生成了一个class文件
最后在命令行模式下执行Demo03.class;同时向main()函数传参
需要注意的是执行class文件需要返回到src目录下才能执行
可变参数
-
可变参数又可以叫做不定项参数(本质就是数组)
-
在方法声明中,在指定参数类型后加一个省略号(…)即表示可变参数
-
一个方法中只能指定一个可变参数,他必须是方法的最后一个参数。任何普通的参数必须在它之前声明
-
代码演示:
package com.heng.method; public class Demo04 { public static void main(String[] args) { //新建一个对象 Demo04 demo04 = new Demo04(); //调用对象方法 demo04.printMax(34,3,2,4,1,5.5); demo04.printMax(new double[]{1,2,3}); } public void printMax(double... number){ if(number.length==0){ System.out.println("没有参数"); return; } double result = number[0]; //排序 for (int i = 1; i < number.length; i++) { if(number[i]>result){ result = number[i]; } } System.out.println("max="+result); } }
递归
-
递归结构包括两部分:
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环
- 递归体:什么时候调用自身方法。
-
需要注意的是递归是把函数堆压在栈里面的,如果递归的次数太多,栈内存会不过,即系统会报错
-
递归代码演示:
package com.heng.method; public class Demo05 { public static void main(String[] args) { Demo05 demo05 = new Demo05(); int result = demo05.f(5); System.out.println(result); } public int f(int i){ if(i==1){ return 1; }else { return i*f(i-1); } } }
上述代码的执行过程