方法
方法其实就是一段普通的代码片段,并且这段代码可以完成某个特定的功能,而且可以被重复的调用/使用。java 中的方法又叫做 method,在 C 语言中叫做函数。
方法定义
方法定义时:返回值类型、形参列表可以按照需求进行填写。
格式
修饰符 返回值类型 方法名( 形参列表 ){ 方法体代码(需要执行的功能代码) return 返回值; }
修饰符,此项是可选项,不是必须的。
返回值类型,此项可以是 java 语言当中任何一种数据类型,包括基本数据类型,也包括所有的引用数据类型,当然,如果一个方法执行结束之后不准备返回任何数据,则返回值类型必须写 void。返回值类型例如:byte,short,int,long,float,double,boolean,char,String,void 等。
方法名,此项需要是合法的标识符,开发规范中要求方法名首字母小写,后面每个单词首字母大写,遵循驼峰命名方式,见名知意,例如:login、getUsername、findAllUser 等。
形式参数列表(int a, int b),此项又被称为形参,其实每一个形参都是“局部变量”,形参的个数为 0~N 个,如果是多个参数,则采用半角“,”进行分隔,形参中起决定性作用的是参数的数据类型,参数名就是变量名,变量名是可以修改的,也就是说(int a , int b)也可以写成(int x , int y)。
方法体,由一对儿大括号括起来,在形参的后面,这个大括号当中的是实现功能的核心代码,方法体由 java 语句构成,方法体当中的代码只能遵循自上而下的顺序依次逐行执行,不能跳行执行,核心代码在执行过程中如果需要外部提供数据,则通过形参进行获取。
示例:使用方法对2个整数求和并返回。
方法的修饰符 返回值类型 方法名 形参列表 public static int add ( int a , int b ){ int c = a + b; 执行代码 return c; 返回值 }
return; 可以立即跳出并结束当前方法的执行。
注意事项:
方法没有申明返回值类型,内部不能使用return返回数据。
方法申明了具体的返回值类型,内部必须使用return返回对应类型的数据。
形参列表可以有多个,甚至可以没有; 如果有多个形参,多个形参必须用“,”隔开,且不能给初始化值。
如果方法不需要返回结果,返回值类型必须申明成void(无返回值), 此时方法内部不可以使用return返回数据。
方法如果没有参数,或者返回值类型申明为void可以称为无参数、无返回值的方法,依次类推。
方法的调用
方法必须调用才可以跑起来,调用格式:格式
方法名(…);
int sum = add(10, 20); System.out.println(sum);
常见问题:
- 方法的编写顺序无所谓。
方法与方法之间是平级关系,不能嵌套定义。
方法的返回值类型为void(无返回值),方法内则不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据。
return语句下面,不能编写代码,因为永远执行不到,属于无效的代码。
方法不调用就不执行, 调用时必须严格匹配方法的参数情况。
有返回值的方法调用时可以选择定义变量接收结果,或者直接输出调用,甚至直接调用;无返回值方法的调用只能直接调用。
案例:
找出数组的最大值。
要求:使用方法,返回任意整型数组的最大值数据。
分析:
根据格式编写方法
要返回最大值,需要申明返回值类型。
需要接收数组, 需要申明形参列表。
方法内部找出数组的最大值并返回。
public static void main(String[] args) { // 需求:使用方法,支持找出任意整型数组的最大值返回。 int[] ages = {23, 19, 25, 78, 34}; int max = getArrayMaxData(ages); System.out.println("最大值数据是:" + max); System.out.println("-------------------"); int[] ages1 = {31, 21, 99, 78, 34}; int max1 = getArrayMaxData(ages1); System.out.println("最大值数据是:" + max1); } public static int getArrayMaxData(int[] arr){ // 找出数组的最大值返回 int max = arr[0]; // 遍历数组的每个元素与最大值的数据进行比较,若较大则替换 for (int i = 1; i < arr.length; i++) { if(arr[i] > max){ max = arr[i]; } } return max; }
方法重载
- 同一个类中,出现多个方法名称相同,但是形参列表是不同的,那么这些方法就是重载方法。
方法重载(overload)是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。调用重载方法时,Java 编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数不同的方法。调用方法时通过传递给它们的不同个数和类型的实参来决定具体使用哪个方法。
代码满足以下三个条件的时候可以构成方法重载。
在同一个类当中。
方法名相同。
参数列表不同:个数不同算不同,顺序不同算不同,类型不同也算不同
public static void main(String[] args) { int x1=10; int x2=20; int retValue1 =sum(x1,x2); System.out.println(x1+"+"+x2+"="+retValue1); long y1 = 10L; long y2 = 20L; long retValue2 = sum(y1 , y2); System.out.println(y1 + "+" + y2 + "=" + retValue2); double z1 = 10.0; double z2 = 20.0; double retValue3 = sum(z1, z2); System.out.println(z1 + "+" + z2 + "=" + retValue3); } public static int sum(int a,int b){ return a+b; } public static long sum(long a,long b){ return a+b; } public static double sum(double a,double b){ return a+b; }
注:
- 方法的重载和方法的返回值类型没有关系
- 方法重载和修饰符无关
方法重载的识别技巧
- 只要是同一个类中,方法名称相同、形参列表不同,那么他们就是重载的方法,其他都不管!(如:修饰符,返回值类型都无所谓)
- 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称。
题目1(训练)
定义一个方法,该方法能够找出两个小数中的较小值并返回。在主方法中调用方法进行测试。
训练提示
- 根据方法的功能描述,方法的参数应该是两个小数。
- 要返回两个小数的较小值,所以返回值类型也是小数类型。
解题方案
操作步骤
- 定义方法getMin(),方法的参数是double a ,double b。
- 在方法中对两个数字进行判断,返回较小值。
- 在主方法中调用getMin()方法并接受返回值。
- 在主方法中打印结果。
参考代码
public class Demo1 { public static void main(String[] args) { //调用方法 double min = getMin(3.14, 4.13); //打印结果 System.out.println("较小值是" + min); } //定义求较小值的方法 public static double getMin(double a ,double b){ //对两个小数进行判断 if(a < b){ return a; }else{ return b; } } }
题目2(训练)
定义一个方法,该方法能够找出三个整数中的最大值并返回。在主方法中调用方法测试执行。
训练提示
- 根据题意,方法中需要使用三个整数,所以方法参数应该是三个整数类型。
- 方法需要有返回值,返回值的类型也是整数类型
解题方案
操作步骤
- 定义方法getMax(),方法的参数是三个int类型变量a,b,c,方法的返回值是int类型。
- 在方法中使用多分支if…else…判断出最大值并返回。
- 在主方法中调用getMax()方法并接受返回值。
- 在主方法中打印结果。
参考代码
public class Demo2 { public static void main(String[] args) { //调用方法传入参数 int max = getMax(33, 44, 11); //打印最大值 System.out.println("最大值是" + max); } //定义获取最大值的方法 public static int getMax(int a ,int b ,int c){ //判断出最大值并返回 if(a > b && a > c){ return a; }else if(b > a && b > c){ return b; }else{ return c; } } }