Java方法的定义和调用
问题引出
计算5的阶乘、7的阶乘、10的阶乘:
int s=1; for(int i=1;i<5;i++) { s *=i; } System.out.println(s); s=1; for(int i=1;i<7;i++) { s *=i; } System.out.println(s); s=1; for(int i=1;i<10;i++) { s *=i; } System.out.println(s);
可以看到5的阶乘、7的阶乘、10的阶乘的过程 代码重复,
相似的代码被写了很多遍,每次求解问题的时候都要再写一遍。
那么我们能不能把这段经常使用的代码封装起来,一次写好之后之后被反复使用呢 ?
能,解决方案就是Java的方法。
什么是方法
Java方法是语句的集合,它们在一起执行一个功能。
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
例如:
public static int factorial(int n) { int s=1; for(int i=1;i<n;i++) { s *=i; } return s; }
在前面几个章节中我们经常使用到 System.out.println(),其实也是方法
println() 是一个方法。 System 是系统类。 out 是标准输出对象。
这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println()。
方法的优点
1. 使程序变得更简短而清晰。
2. 有利于程序维护。
3. 可以提高程序开发的效率。
4. 提高了代码的重用性。
方法的定义
语法格式
<修饰符><返回值类型> 方法名 (参数类型 参数名) { //方法体代码 }
- 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
- 返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
- 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
- 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法既可以不包含任何参数,也可以包含多个参数。
public static int max(int num1, int num2)
public static void printGrade(double score)
- 方法体:方法体包含具体的语句,定义该方法的功能。
- 当方法使用static修饰时,无需定义对象,可以直接使用。
命名规则
1.方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。
2.下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是:test<MethodUnderTest>_<state>,例如 testPop_emptyStack。
方法的调用
Java 支持两种调用方法的方式,根据方法是否返回值来选择。
当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。
当方法返回一个值的时候,方法调用通常被当做一个值。例如:
int larger = max(30, 40);
如果方法返回值是void,方法调用一定是一条语句。例如,方法println返回void。下面的调用是个语句:
System.out.println("欢迎访问菜鸟教程!");
带返回值的方法
例题:返回两个整数变量较大的值
这个方法它的方法体中有返回值,因此需要
- 方法定义时方法名前写一下返回值类型,如int
- 方法调用时将方法的计算结果赋值给一个变量,
package task5; public class TestMax { /** 返回两个整数变量较大的值 */ public static int max(int num1, int num2) { int result; if (num1 > num2) result = num1; else result = num2; return result; } /** 主方法 */ public static void main(String[] args) { int i = 5; int j = 2; int k = max(i, j); System.out.println( i + " 和 " + j + " 比较,最大值是:" + k); } }
当方法返回一个值的时候,方法调用通常被当做一个值。例如:int k = max(i, j);
练习:编写汇率计算器的函数,输入人民币数量,根据当天外汇牌价,计算可兑换美元数量
练习:将手机计费程序改写为函数。
不带返回值的方法
例题: 学生成绩判定
这个方法体中就不带任何返回值,因此:
- 方法定义时方法名前返回值类型写void即可
- 方法调用时不需要将方法的计算结果赋值给一个变量。
public class TestVoidMethod { public static void main(String[] args) { printGrade(78.5); } public static void printGrade(double score) { if (score >= 90.0) { System.out.println('A'); } else if (score >= 80.0) { System.out.println('B'); } else if (score >= 70.0) { System.out.println('C'); } else if (score >= 60.0) { System.out.println('D'); } else { System.out.println('F'); } } }
如果方法返回值是void,方法调用一定是一条语句。例如,方法println返回void。下面的调用是个语句:
printGrade(78.5);
练习:编写汇率计算器的函数,直接在函数内部打印结果,不返回值
练习:将手机计费程序改写为函数,直接在函数内部打印结果,不返回值