一、方法的入门
1.1概述及定义
具有某种特定功能的代码段。
某段代码经常使用,所以使用大括号,将这段代码包起来,起个名字。以后就使用这个名字来代替这段代码。
好处
1、提高了代码的复用性
2、提高了代码的封装性,大括号中的内容,其他调用者看不到也无法直接访问
3、简化了软件设计的思维难度
格式
java 修饰符 返回值类型 方法名称 (参数列表) { 方法体语句; return语句; }
说明
1、修饰符:现在全都写成public static
2、返回值类型:方法具有功能,有可能会有一些产出,就需要将数据返回给调用者。调用者需要知道生产出来的数据的数据类型。
3、方法名称:给这段代码起的名字。只要是一个合法的标识符即可。第一个单词的首字母小写,从第二个单词开始首字母大写。
4、参数列表:这段代码要完成功能,可能会需要一些资源。在参数列表中,需要定义一些变量,在调用本方法的时候,会由外界传入数据。
5、方法体语句:真正要完成该方法功能的执行逻辑。
6、return语句:最终生产出来的结果,要返回给调用者,使用return语句返回。如果没有任何生产内容,就可以写一个return;用于表示方法结束。
1.2方法的调用
格式
直接书写方法名称即可
方法名称(实际参数)
三种形式
1、直接调用:表示某些内容的执行,而没有生产结果的情况
2、输出调用:方法的返回值,需要打印。如果这个结果只打印一次,不做其他的操作。
3、赋值调用:方法的返回值,使用某个变量来接收。如果这个结果需要反复使用。
方法调用总体特点
方法不调用,就不执行。
注意事项
方法定义:
1、方法不能嵌套定义
2、方法的先后没有区别
3、方法的定义是平级关系
4、方法可以嵌套调用,甚至可以自己调用自己
参数列表:
1、形式参数:在定义方法时使用,需要加上数据类型的参数,也就是对于变量进行声明。各个变量之间,使用逗号分隔。
2、实际参数:在方法调用时使用,不能加上数据类型的参数,也就是对于变量进行赋值。各个实际参数之间,也使用逗号分隔。顺序必须和定义的方法的形式参数的顺序一致。
return语句:
1、语句表达方法结束了;表示方法的产出内容。
2、如果方法没有具体的返回内容,可以写成return; 此时的return语句可以省略。返回值类型必须写成void。
3、如果方法有具体的返回内容,那么return后面就需要加上返回的那个数据。返回值类型必须和return语句后面的数据的数据类型一致。
4、return语句返回数据,返回给调用者。谁来调用当前方法,当前方法就将数据返回给谁。
1.3方法的练习
无参无返回值的方法
定义一个方法,打印99乘法表
```java
public static void main(String[] args) { print99(); // 方法调用 } // 该方法用来在控制台输出99乘法表 // 当一个方法不需要返回任何数据时,使用void占位 public static void print99(){ for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(j+""+i+"="+(ij)+"\t"); } System.out.println(); } }
```
有参无返回值的方法
定义一个方法,输出指定行数和列数的矩形 ,通过参数决定输出多少行,每行有多少个*
```java public static void main(String[] args) { printRect(5,6); // 5,6 实际参数(实参) ----->在方法运行时,是把实参赋给形参 }
public static void printRect(int row,int col){ // row 和 col 叫做形式参数(形参) for(int i=1;i<=row;i++){ for(int j=1;j<=col;j++){ System.out.print("*"); } System.out.println(); } } ```
无参数有返回值方法
定义一个方法用于获取int类型的最大值是多少
```java // 用来获取int类型的最大值 public static int getMaxInt(){ //只要是有返回值的方法就必须有return语句 return Integer.MAX_VALUE; }
public static void main(String[] args) { int num = getMaxInt(); // 那 getMaxInt()方法的返回值赋给num System.out.println(num); } ```
有参有返回值的方法
定义一个方法,用于计算两个int类型变量的和并返回
java public static void main(String[] args) { System.out.println(add(1,2)); int result = add(100,200); System.out.println(result); } //定义一个方法,完成两个整数的和计算 public static int add(int a,int b){ /* int result = a+b; return result; */ return a+b; }
注意:*框框里工具产生的,不是代码的
二、方法的重载 overload
1.1引入
我们假设要在程序中实现一个对数字求和的方法,由于参与求和数字的个数和类型都不确定,因此要针对不同的情况去设计不同的方法。接下来通过一个案例来实现对两个整数相加、对三个整数相加以及对两个小数相加的功能
示例代码
java public static void main(String[] args) { // 下面是针对求和方法的调用 int sum1 = add01(1, 2); int sum2 = add02(1, 2, 3); double sum3 = add03(1.2, 2.3); // 下面的代码是打印求和的结果 System.out.println("sum1=" + sum1); System.out.println("sum2=" + sum2); System.out.println("sum3=" + sum3); } // 下面的方法实现了两个整数相加 public static int add01(int x, int y) { return x + y; } // 下面的方法实现了三个整数相加 public static int add02(int x, int y, int z) { return x + y + z; } // 下面的方法实现了两个小数相加 public static double add03(double x, double y) { return x + y; }
问题分析
上面的代码确实是完成功能了,但是同样是完成加法的功能,方法名却不一样,能不能把方法名变的一样呢?
答案是:可以!
那这种同一个类中的同名方法,就叫做方法重载overload
1.2重载的概念以及使用
方法重载overload:
指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
参数列表不同:个数不同/数据类型不同/顺序不同。
重载方法调用:JVM通过方法的参数列表,调用不同的方法。
使用重载改进上面需求
```java public static void main(String[] args) { // 下面是针对求和方法的调用 int sum1 = add(1, 2); int sum2 = add(1, 2, 3); double sum3 = add(1.2, 2.3); // 下面的代码是打印求和的结果 System.out.println("sum1=" + sum1); System.out.println("sum2=" + sum2); System.out.println("sum3=" + sum3); }
// 下面的方法实现了两个整数相加
public static int add(int x, int y) {
return x + y;
}
// 下面的方法实现了三个整数相加
public static int add(int x, int y, int z) {
return x + y + z;
}
// 下面的方法实现了两个小数相加
public static double add(double x, double y) {
return x + y;
}
总结
重载方法参数列表不同:
参数个数不同,如method(int x)与method(int x,int y)不同
参数类型不同,如method(int x)与method(double x)不同
参数顺序不同,如method(int x,double y)与method(double x,int y)不同
注意:
add(int x, int y) 和add(int y, int x)实际一样的
重载只与方法名有关和参数类型相关与返回值无关
如void method(int x)与int method(int y)不是方法重载,不能同时存在
方法重载只与方法名和参数列表有关,和返回值/修饰符均无关(方法重载指的是在同一个类中)