Logo
Section 1 / 5

简单用户自定义方法

学习如何在 Java 中将程序划分为方法或子程序。

导入

简单用户自定义方法

学习如何在 Java 中将程序划分为方法或子程序。

方法

在 Java 中,我们可以将程序划分为称为 方法 的过程性组件或模块。我们已经熟悉了 main() 方法。通过一种称为 模块化 或 过程式方法 的编程技术(也称为分而治之的方法),方法可以被复制和重用。我们应该始终尝试设计出可以在其他程序中重复使用的函数。

...

总体上,有两种类型的方法,我们将在接下来的部分中进行探讨。

方法的结构

以下幻灯片展示了 方法定义 的各个部分:

函数名只能包含字母(A–Z 和 a–z)以及下划线符号(_)。也可以包含数字(0–9),但函数名不能以数字开头。例如,Key_2 是一个有效的函数名,但 2_key 不是。函数名区分大小写,这意味着 name、Name 和 NAME 是三个不同的函数。

方法定义主要有两个部分:

  • 头部分:第一行,以右括号 ) 结尾。
  • 主体部分:方法头下方的语句块,以左花括号 { 开始,以右花括号 } 结束。

方法头包含关键字 static 和 void(void 表示该方法没有返回值)、方法名 sayHello 以及括号中的参数。方法体中的所有语句都以 { 和 } 包裹成一个代码块。我们不能在没有花括号的情况下编写方法体。

方法调用

下面的程序演示了方法的创建和方法调用。

1import java.util.Scanner; 2class Test 3{ 4 static void sayHello() // void 方法的头部分 5 { 6 System.out.print("Hello"); // 输出 Hello 7 } 8 9 public static void main(String[] args) 10 { 11 sayHello(); // 调用方法 12 } 13}

我们可以通过写出方法名,后跟 () 并以 ; 结尾来调用一个方法。在 第 11 行,我们告诉程序调用方法 sayHello()。这一行被称为 方法调用 或调用方法。

方法调用的执行流程表

在分析其执行流程表之前,请先查看以下代码:

1class Test 2{ 3 static void first() 4 { 5 System.out.println("现在进入方法 'first'。"); 6 } 7 static void second() 8 { 9 System.out.println("现在进入方法 'second'。"); 10 } 11 12 public static void main(String[] args) 13 { 14 System.out.println("主程序从这里开始。"); 15 first(); // 调用 first 方法 16 System.out.println("回到主程序。"); 17 second(); // 调用 second 方法 18 System.out.println("再次回到主程序。"); 19 } 20}

在该程序中:

  • 我们定义了两个简单的方法——first 和 second。
  • 我们借助 System.out.println() 语句展示了执行顺序。
...
方法调用的执行流程

理解执行顺序最重要的列是 PS# 列。上述程序的 PS# 顺序为 12,14,15,3,5,16,17,7,9,1812, 14, 15, 3, 5, 16, 17, 7, 9, 18。

下面还有一个代码示例,帮助我们理解方法调用的执行顺序。该程序的 PS# 顺序为 14,16,17,7,9,10,3,5,11,1814, 16, 17, 7, 9, 10, 3, 5, 11, 18。

1class Test 2{ 3 static void deeper() 4 { 5 System.out.println("现在进入方法 'deeper'。"); 6 } 7 static void deep() 8 { 9 System.out.println("现在进入方法 'deep'。"); 10 deeper(); // 调用 deeper 方法 11 System.out.println("现在回到 'deep'。"); 12 } 13 14 public static void main(String[] args) 15 { 16 System.out.println("主程序从这里开始。"); 17 deep(); // 调用 deep 方法 18 System.out.println("回到主程序。"); 19 } 20}

执行顺序也可以如下图所示:

...
执行顺序示意图

上图更清晰地展示了每个方法调用的 PS# 和调用深度。前两条语句来自主程序,接下来的三条来自 deep() 方法,再下一条来自 deeper() 方法,最后一条又回到主程序。主程序是 deep() 方法的调用者,而 deep() 方法是 deeper() 方法的调用者。

练习:创建和调用方法

以下是几个用于练习创建和调用方法的示例程序。点击“显示答案”按钮后,你会看到解决相应问题的程序。你可以将给出的解决方案复制粘贴到代码编辑器中,以确保你的输出与给定答案一致。编程中可能存在多种正确的实现方式。

创建乘法表的方法

编写一个方法 showTableOf4(),用于显示 4 的乘法表的前 20 项。从 main() 函数中调用该方法以显示结果。

示例输出

14 x 1 = 4 24 x 2 = 8 34 x 3 = 12 44 x 4 = 16 54 x 5 = 20 64 x 6 = 24 74 x 7 = 28 84 x 8 = 32 94 x 9 = 36 104 x 10 = 40 114 x 11 = 44 124 x 12 = 48 134 x 13 = 52 144 x 14 = 56 154 x 15 = 60 164 x 16 = 64 174 x 17 = 68 184 x 18 = 72 194 x 19 = 76 204 x 20 = 80
1class Test 2{ 3 // 请在此处编写你的代码 4 public static void main(String[] args) 5 { 6 7 } 8}

你可以在上方的代码编辑器中运行以下代码:

1class Test 2{ 3 static void showTableOf4() 4 { 5 for(int i = 1; i < 21; i++) 6 { 7 System.out.println("4 x " + i + " = " + 4 * i); 8 } 9 } 10 11 public static void main(String[] args) 12 { 13 showTableOf4(); 14 } 15}

在上述程序中:

  • 我们实现了一个函数 showTableOf4()。
  • 在函数体中,我们使用 for 循环,条件为 i < 21,用于显示 4 的乘法表。
  • 我们在 main() 中调用了该函数。

你可以在上方的代码编辑器中运行以下代码:

1class Test 2{ 3 static void showTableOf4() 4 { 5 for(int i = 1; i < 21; i++) 6 { 7 System.out.println("4 x " + i + " = " + 4 * i); 8 } 9 } 10public static void main(String[] args) 11{ 12 showTableOf4(); 13} 14 15}

在上述程序中:

  • 我们实现了一个函数 showTableOf4()。
  • 在函数体中,我们使用 for 循环,条件为 i < 21,用于显示 4 的乘法表。
  • 我们在 main() 中调用了该函数。

字符串和数组

方法参数和返回值