方法
在 Java 中,我们通常不使用“函数”这个词,而是使用 方法,方法是定义在类中的一段可重用的代码块。
一个方法由以下几个部分组成:
- 修饰符: 如
public,private,static等,定义了方法的访问权限和特性。 - 返回类型: 方法执行完毕后返回的数据类型,如果方法不返回任何值,则使用
void。 - 方法名: 给方法起的名字,用于调用。
- 参数列表: 传递给方法的输入值,用括号 括起来,多个参数用逗号 分隔。
- 方法体: 包含在大括号 中的实际代码。
最简单的例子:无参数、无返回值
这是最基本的情况,一个方法调用另一个方法,两者都不需要输入参数,也不返回任何值。
代码示例:
public class SimpleMethodCall {
// 这是主方法,是程序的入口点
public static void main(String[] args) {
System.out.println("main 方法开始执行。");
// 在 main 方法中调用 printWelcomeMessage 方法
printWelcomeMessage();
System.out.println("main 方法执行完毕。");
}
// 这是一个被调用的方法
// 它没有参数,也没有返回值 (void)
public static void printWelcomeMessage() {
System.out.println("你好,欢迎来到 Java 世界!");
System.out.println("这是一个被其他方法调用的示例。");
}
}
输出结果:
main 方法开始执行。
你好,欢迎来到 Java 世界!
这是一个被其他方法调用的示例。
main 方法执行完毕。
代码解释:
public static void main(String[] args)是程序的入口。- 当程序运行时,首先执行
main方法中的代码。 - 当执行到
printWelcomeMessage();这一行时,程序会暂停main方法的执行,跳转到printWelcomeMessage方法内部。 printWelcomeMessage方法执行完毕后,程序会返回到main方法中刚才调用的位置,继续执行下一行代码System.out.println("main 方法执行完毕。");。
带参数的方法调用
方法可以接收外部传入的数据,这些数据就是参数。
代码示例:
public class ParameterizedMethodCall {
public static void main(String[] args) {
String studentName = "张三";
int studentScore = 95;
// 调用方法时,传入实际的参数(实参)
printStudentInfo(studentName, studentScore);
String anotherName = "李四";
int anotherScore = 88;
printStudentInfo(anotherName, anotherScore);
}
// 这是一个带参数的方法
// 参数 name 和 score 是在调用时需要传入的值
public static void printStudentInfo(String name, int score) {
System.out.println("学生姓名: " + name);
System.out.println("学生成绩: " + score);
System.out.println("--------------------");
}
}
输出结果:
学生姓名: 张三
学生成绩: 95
--------------------
学生姓名: 李四
学生成绩: 88
--------------------
代码解释:
printStudentInfo(studentName, studentScore);这是在调用方法,括号里的studentName和studentScore是实参(实际参数)。public static void printStudentInfo(String name, int score)这是定义方法,括号里的name和score是形参(形式参数)。- 调用时,实参的值会传递给形参。
studentName的值 "张三" 传递给name,studentScore的值 95 传递给score。
带返回值的方法调用
方法执行完毕后,可以返回一个值给调用者。
代码示例:
public class ReturnValueMethodCall {
public static void main(String[] args) {
int a = 10;
int b = 20;
// 调用 getSum 方法,并将其返回值赋给 sum 变量
int sum = getSum(a, b);
System.out.println("计算结果是: " + sum);
// 也可以直接在表达式中使用返回值
System.out.println("直接打印结果: " + getSum(5, 7));
}
// 这是一个带返回值的方法
// 返回类型是 int,表示这个方法会返回一个整数
public static int getSum(int num1, int num2) {
int result = num1 + num2;
return result; // 使用 return 关键字返回结果
}
}
输出结果:
计算结果是: 30
直接打印结果: 12
代码解释:
getSum(a, b)调用方法,方法执行return result;后,将result的值(30)返回。- 这个返回的值被赋给了
main方法中的sum变量。 return语句会立即结束方法的执行。
综合示例:方法互相调用(调用链)
一个方法可以调用另一个方法,而被调用的方法又可以调用第三个方法,这形成了一个“调用链”。
代码示例:
public class MethodCallChain {
public static void main(String[] args) {
System.out.println("--- 开始准备晚餐 ---");
prepareDinner();
System.out.println("--- 晚餐准备完毕 ---");
}
// 准备晚餐的方法
public static void prepareDinner() {
System.out.println("1. 开始准备晚餐。");
cookRice(); // 调用 cookRice 方法
cookVegetable(); // 调用 cookVegetable 方法
System.out.println("4. 晚餐已准备好,可以上桌了。");
}
// 煮饭的方法
public static void cookRice() {
System.out.println(" 2. 正在煮饭...");
}
// 炒菜的方法
public static void cookVegetable() {
System.out.println(" 3. 正在炒菜...");
}
}
输出结果:
--- 开始准备晚餐 ---
1. 开始准备晚餐。
2. 正在煮饭...
3. 正在炒菜...
4. 晚餐已准备好,可以上桌了。
--- 晚餐准备完毕 ---
代码解释:
main方法调用prepareDinner()。prepareDinner()开始执行,打印第一行信息。prepareDinner()调用cookRice(),cookRice()执行完毕后返回。prepareDinner()继续执行,调用cookVegetable(),cookVegetable()执行完毕后返回。prepareDinner()继续执行,打印最后一行信息,然后执行完毕,返回main方法。main方法继续执行,打印结束信息。
static 的重要说明
在以上所有例子中,方法前都有 static 关键字,这意味着这些方法属于 类,而不是属于类的某个特定对象(实例),我们可以直接在 main 方法(也是 static 的)中调用它们。
如果方法没有 static 关键字,就必须先创建类的对象,然后通过对象来调用该方法。
示例(非静态方法调用):
public class NonStaticExample {
// 这是一个非静态方法
public void sayHello() {
System.out.println("你好,我是一个非静态方法!");
}
public static void main(String[] args) {
// 错误!不能直接调用非静态方法
// sayHello(); // 编译会报错
// 正确的做法:先创建类的对象
NonStaticExample myObject = new NonStaticExample();
// 然后通过对象来调用方法
myObject.sayHello();
}
}
| 场景 | 调用方式 | 示例 |
|---|---|---|
| 无参数,无返回值 | 直接使用方法名 + | printWelcomeMessage(); |
| 有参数,无返回值 | 方法名 + (实参列表); |
printStudentInfo("张三", 95); |
| 无参数,有返回值 | 变量 = 方法名(); 或直接在表达式中使用 |
int sum = getSum(10, 20); |
| 有参数,有返回值 | 变量 = 方法名(实参列表); |
int avg = calculateAverage(80, 90, 100); |
| 调用非静态方法 | 对象名.方法名(); |
myObject.sayHello(); |
掌握方法的调用是学习 Java 的核心基础,它使得代码模块化、可重用且易于维护。
