为什么要用方法?
任何一个java程序中,都有一个main方法,也叫作主方法。我们在运行程序时都只会执行main方法。而当我们把所有代码都写在main方法中,代码会很臃肿,且代码量巨大时难以阅读,出现bug也难以筛查,最关键的是代码不能重复利用。
这个时候自定义方法就派上了用场。我们把main函数中程序实现功能的代码拆分成一个个代码块,这一个个代码块分别能实现一个个小功能,再将这些代码块放在事先定义好的方法中,这样每一个方法就对应的能实现一个功能。以后我们需要这个功能就在main函数里去调用这个方法就行了,出现bug就去指定的方法中筛查错误。
方法的概念:
所谓方法就是将一个功能抽取出来,把代码单独放在一个大括号内,形成一个单独的功能。当我们需要这个功能的时候,就可以去调用这个方法。这样既实现了代码的复用性,也解决了代码冗余的现象。
方法的定义格式
修饰符 返回值类型 方法名称 (参数类型 参数名称1){
方法体;
return 返回值;
}
修饰符: 现阶段的固定写法,public static。
返回值类型: 也就是方法产出的数据是什么类型(Int、double…)。
方法名称: 给方法取的名字,命名规则和变量的命名规则一样,都是小驼峰命名法。
参数类型: 进入方法的数据是什么类型。
参数名称: 进入方法的数据对应的变量名称。
PS:参数如果有多个,是用逗号进行分隔。
方法体: 也就是写在方法中的代码,可以包含任意条语句。
return: 两个作用,第一停止当前方法;第二将后面的返回值返还给调用处。
返回值: 也就是这个方法执行后,最终产出的数据结果。返回值的数据类型必须和返回值类型保持对应。
方法的三种调用格式
- 单独调用。特点是没有打印输出返回值的功能,也没有赋值功能,只能让这个方法执行,方法产生了怎样的结果都无法进行使用。
语法:方法名称( 参数);
- 打印调用。
语法:System.out.println( 方法名称 ( 参数 ) );
- 赋值打印调用。字面意思,也就是比打印调用多了个赋值步骤。
语法:
int m = 方法名称 ( 参数 );
System.out.println( m );
注意事项:
- 对于有返回值的方法,可以使用单独调用,打印调用或者赋值调用。
- 对于无返回值的方法,只能使用单独调用。
下面来看看方法的执行过程:
案例:
定义一个方法,实现两个整数相加的功能。
可以看到,单独调用虽然让这个方法执行了,但是并没有打印输出两数相加的结果,也没有赋值功能。
进阶: 定义三个方法计算不同形状的面积,需要的数据手动和面积在自定义方法中输入和输出
public static void main(String[] args) {
triangle();
square();
rectangle();
}
public static void triangle() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入三角形的底:");
double bottom = sc.nextDouble();
System.out.println("请输入三角形的高");
double height = sc.nextDouble();
double area = bottom * height / 2;
System.out.println("三角形的面积为:" + area);
}
public static void square() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入正方形的边长:");
double bian = sc.nextDouble();
double area = bian * bian;
System.out.println("正方形的面积为:" + area);
}
public static void rectangle() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入长方形的长:");
double chang = sc.nextDouble();
System.out.println("请输入长方形的宽");
double kuan = sc.nextDouble();
double area =chang*kuan;
System.out.println("长方形的面积为:" + area);
}
对比方法有参数和无参数
有参方法: 方法名称后的小括号里有内容。当一个方法需要一些数据条件才能完成相应功能的时候,就是有参方法。
无参方法: 方法名称后的小括号里留空。当一个方法实现功能不需要任何数据条件,自己就能独立完成功能,就是无参方法。
对比方法有返回值和无返回值
案例1: 有返回值
定义一方法,用于求2个数中的较大数(不考虑2个数相等的情况),并将其返回,这2个数字在主方法中由用户输入,结果在主方法中输出
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个数:");
int num2 = sc.nextInt();
int result = max(num1,num2);
System.out.println("最大值是:"+result);
}
public static int max(int num1,int num2) {
int max=0;
if(num1>num2) {
max=num1;
}else {
max=num2;
}
return max;
}
案例2: 无返回值
编写方法计算圆的面积和周长,在主方法中接收用户输入的半径,在自定义方法中输出结果。
注意:每个方法都需要输入扫描器
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入圆的半径:");
double radius = sc.nextDouble() ;
round(radius);
}
public static void round(double m) {
System.out.println("该圆面积为"+3.14*m*m);
System.out.println("该圆周长为"+2*3.14*m);
}
总结
- 方法与方法是平行的关系,不能在方法当中再定义方法,不能有嵌套关系。
- 方法定义的前后顺序无所谓。
- 方法定义之后不会执行,如果希望执行,一定要调用(三种调用方式)。
- 对于空类型void方法,该方法没有返回值,因此不能加“return 返回值;”。
- 如果方法有返回值,那么必须加上“return 返回值;”,不能不写。
- 一个方法中可以出现多个return语句,但必须保证不同条件下同时只能有一个被执行到,两个return不能连写。
方法的实参和形参
实际参数: 定义在main方法中的变量,或者具体的某些值,就是实参。
形式参数: 定义在方法里,用来接收实际参数的变量,就是形参。
方法的分类
根据方法是否有参数和返回值,我们可以将方法分成四类:
- 有参数无返回值
- 有参数有返回值
- 无参数无返回值
- 无参数有返回值
方法没有最好只有更好,我们要灵活运营这四种方法,根据实际情况,哪种方法解决问题最方便,就用哪种方法。
public static void fun1(int n) {
System.out.println("这是一个有参数无返回值的方法!");
}
public static int fun2(int m) {
System.out.println("这是一个有参有返回值的方法!");
return 10;
}
public static void fun3() {
System.out.println("这是一个无参无返回值的方法!");
}
public static int fun4() {
System.out.println("这是一个无参有返回值的方法!");
return 10;
}