方法的由来
我们在学习运算符的时候,都为每个运算符单独的创建一个新的类和main方法,我们会发现这样编写代码非常的繁琐,而且重复的代码过多。能否避免这些重复的代码呢,就需要使用方法来实现。当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。
方法的概念
- 方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。
方法的定义
格式:
定义格式解释:
- 修饰符:控制方法的访问权限,一般情况下都是根据需求来决定的。目前固定写法 public static。
- 返回值类型: 一般情况下都是根据需求来决定的,表示方法运行的结果的数据类型,方法执行后将结果返回到调用者
- 方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。
- 参数列表:方法在运算过程中的未知数据,调用者调用方法时传递
- return:将方法执行后的结果带给调用者,方法执行到 return ,整体方法运行结束。返回值类型是void,方法大括号内的return可以不写。return 结果; 这里的"结果"在开发中,我们正确的叫法成为方法的返回值
tips:
- 参数:就是进入方法的数据。
- 返回值:就是从方法中出来的数据。
- 参数列表:包括参数类型(进入方法的数据是什么类型)和参数名称(进入方法的数据对应的变量名称)。参数如果有多个,使用逗号进行分隔
代码演示
//定义了一个方法 public static void methodName() { //方法的功能是输出字符串 System.out.println("这是一个方法"); }
方法的调用
方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法。
方法的三种调用格式。
- 单独调用:方法名称(参数);
- 打印调用:System.out.println(方法名称(参数));
- 赋值调用:数据类型 变量名称 = 方法名称(参数);
注意:
- 返回值类型固定写为void,这种方法只能够单独调用,不能进行打印调用或者赋值调用。
代码演示
package demo01; //定义一个求2个int数之和的方法 public class Demo01Method { /* 分析: 1: 2个int数之和的返回值类型:int 2:方法名称最好见名知意,可以是getSum 3: 参数列表需要定义2个,可以是 int a ,int b */ public static void main(String[] args) { // 单独调用 getSum(10, 20); System.out.println("==========="); // 打印调用 System.out.println(getSum(10, 20)); System.out.println("==========="); // 赋值调用 int number = getSum(15, 25); number += 100; System.out.println("变量的值:" + number); } private static int getSum(int a, int b) { // 参数如果有多个,使用逗号进行分隔 int result = a + b; //return两个作用,第一停止当前方法,第二将后面的返回值还给调用处 return result; } }
代码执行后的结果
方法的调用流程图解
方法执行步骤如下图所示
定义方法的三个明确
例如:上面的案例中的getSum方法就是有返回值,有参数列表的方法。
- 明确方法名称:满足标识符的规范,最好见名知意
- 明确返回值类型:根据需求确定是否需要定义返回值类型,如果需要定义返回值类型,那么必须保证返回值类型必须和要和方法执行后的结果类型一致
- 明确参数列表:根据需求确定是否需要定义参数列表,如果需要定义参数列表,那么必须明确参数类型和参数个数
对比有返回值和没有返回值的方法
如下图所示
定义方法的注意事项
- 方法应该定义在类当中,但是不能在方法当中再定义方法。不能嵌套。
- 方法定义的前后顺序无所谓。
- 方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用。
- 如果方法有返回值,那么必须写上“return 返回值;”,不能没有。
- return后面的返回值数据,必须和方法的返回值类型,对应起来。
- 对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。
- 对于void方法当中最后一行的return可以省略不写。
- 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写。
代码演示
public class Demo04MethodNotice { public static void main(String[] args) { //直接调用方法 getMax(3, 4); } public static int getMax(int a, int b) { //必须保证任何情况下有且只有一个return被执行 if (a > b) { return a; } else { return b; } } }
方法重载
- 方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
- 参数列表不同是指:个数不同,数据类型不同,顺序不同。
- 重载方法调用:JVM通过方法的参数列表,调用不同的方法
题目要求:
- 比较两个数据是否相等。参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型,并在main方法中进行测试。
代码实现
package demo04; /* 对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦。 方法的重载(Overload):多个方法的名称一样,但是参数列表不一样。 好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。 方法重载与下列因素相关: 1. 参数个数不同 2. 参数类型不同 3. 参数的多类型顺序不同 方法重载与下列因素无关: 1. 与参数的名称无关 2. 与方法的返回值类型无关 */ public class Demo02MethodOverloadSame { public static void main(String[] args) { byte a = 10; byte b = 20; System.out.println(isSame(a, b)); System.out.println(isSame((short) 20, (short) 20)); System.out.println(isSame(11, 12)); System.out.println(isSame(10L, 10L)); } public static boolean isSame(byte a, byte b) { System.out.println("两个byte参数的方法执行!"); boolean same; if (a == b) { same = true; } else { same = false; } return same; } public static boolean isSame(short a, short b) { System.out.println("两个short参数的方法执行!"); boolean same = a == b ? true : false; return same; } public static boolean isSame(int a, int b) { System.out.println("两个int参数的方法执行!"); return a == b; } public static boolean isSame(long a, long b) { System.out.println("两个long参数的方法执行!"); if (a == b) { return true; } else { return false; } } }
代码执行后的结果