Menu

Java 方法:如何定义和调用方法

Java 方法是什么,如何声明和调用方法,返回值与 void 的区别,静态的 main 方法,以及方法如何让代码更有条理、更易复用。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

为什么需要方法

方法是一段有名字的代码,每当你调用它的名字,它就会运行。你不必一遍遍写相同的几行代码,而是把它们写进一个方法里,需要几次就调用几次。这样程序更短、更好读,也更容易修改:只要在一个地方修改逻辑,所有调用者都会同步更新。

其实你一直都在调用方法:System.out.println(...) 是一次方法调用,list.size() 也是。现在你要自己写方法了。

声明和调用方法

方法声明由四部分组成:返回类型、名字、一对括号(用来放参数),以及花括号里的方法体。下面是最小的实用示例,一个只做事、不返回任何东西的方法:

拆开来看 static void printGreeting() 的各个部分:

  • static:让 main 不用创建对象就能直接调用它(下文会详细说明)。
  • void:这个方法不返回值。
  • printGreeting:调用它时用的名字。
  • ():空括号表示它不接收任何输入。

调用方法的方式是写出它的名字,后面跟上括号。main 中的两次调用让方法体运行了两次,所以问候语被打印了两遍。

返回值

大多数方法会计算出某个结果,再用 return 交回去。名字前面的返回类型说明了返回值是哪种类型,这里是 int:

square(5) 的值是 25,你可以把它存进一个变量、打印出来,或者用在更大的表达式里:方法调用本身就代表它返回的值。return 一执行,方法就结束,控制权回到调用者。同一条执行路径上 return 之后的代码永远不会执行。

返回类型和返回的值必须一致:你声明的数据类型就是方法承诺交回的值的类型。声明为 int 却试图 return "text"; 会导致编译错误,编译器会强制执行这份约定。

void 与返回类型

区分很简单:调用者需要拿回一个值时,用真正的返回类型;方法只是做某件事(打印、保存、更新状态)时,用 void。

void logMessage(String msg)   // does work, hands nothing back
int  add(int a, int b)        // computes a value the caller uses

一个常见的初学者错误是试图使用 void 方法的“结果”:

int x = printGreeting();   // compile error: printGreeting() returns void

这里没有可以赋值的值,所以无法通过编译。如果你发现自己想要一个 void 方法的结果,说明它其实应该返回点什么。

带分支和提前返回的方法

你可以在多个地方 return。一旦知道答案就提前返回,通常比把所有东西都嵌套在 else 里更清晰:

因为每个 return 都会立即退出,所以第一个满足的条件胜出。只要确保有返回值的方法的每条执行路径都以 return 结束:如果某个分支可能不返回就走到末尾,编译器会报“missing return statement”(缺少返回语句)。这里最后的 return "F"; 处理了这种情况。

这里的 static 是什么意思

你可能已经注意到,上面的每个方法都是 static 的。static 方法属于类本身,而不属于任何对象,所以 main(它也是 static 的)可以直接通过名字调用它。没有 static 的话,方法就属于某个实例,你需要先有一个对象才能调用它。

目前你写的都是逻辑和 main 放在一起的小程序,所以把辅助方法标记为 static,这样就能用同样的方式调用它们。等你开始构建自己的类和对象时,也会编写非静态(实例)方法,这部分会在类的章节中讲到。

局部变量只存在于方法内部

在方法内部声明的变量只存在于方法里。它们在方法运行时创建,在方法返回时消失,调用者永远看不到它们:

total 和 i 完全存在于 sumTo 内部。唯一能离开这个方法的,是你 return 的那个值。这种隔离是一项优点:每个方法都是一个独立的单元,你可以单独理解它,不必担心它的临时变量泄漏出去,或者和别处的名字冲突。

下一页:方法参数

这里的每个方法要么不接收输入,要么只接收一个值。真正的威力来自把数据传进去,而 Java 对实参如何传递、对象和基本类型有什么不同、如何给参数设置类似默认值的备选方案都有专门的规则。这就是下一页的内容。

常见问题

Java 中的方法是什么?

方法是一段有名字的代码,你可以随时通过调用它的名字来运行它。它把一项工作集中在一个地方,让你可以重复使用,而不必一遍遍写相同的代码。方法可以接收输入(参数)并交回一个结果(返回值),也可以只做事情而不返回任何东西(void)。

Java 中如何创建和调用方法?

用返回类型、名字和一对括号来声明它:static int square(int n) { return n * n; }。然后用名字加上括号里的实参来调用它:int result = square(5);。不返回任何东西的方法使用 void,作为一条独立的语句调用,比如 printGreeting();。

Java 方法中的 void 是什么意思?

void 表示方法不返回值:它只完成自己的工作(比如打印),不向调用者交回任何东西。你不能把 void 方法的结果赋给变量。如果方法应该产生一个供调用者使用的值,就给它一个真正的返回类型,比如 int 或 String,并使用 return。

Coddy 编程语言插图

和 Coddy 一起学编程

开始