# 定义方法

> 原文： [https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html](https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html)

以下是典型方法声明的示例：

```
public double calculateAnswer(double wingSpan, int numberOfEngines,
                              double length, double grossTons) {
    //do the calculation here
}

```

方法声明中唯一必需的元素是方法的返回类型，名称，一对圆括号，`()`和大括号之间的主体`{}`。

更一般地，方法声明有六个组件，按顺序：

1.  修改器 - 例如`public`，`private`等，您将在稍后了解。
2.  返回类型 - 方法返回的值的数据类型，如果方法未返回值，则为`void`。
3.  方法名称 - 字段名称的规则也适用于方法名称，但约定略有不同。
4.  括号中的参数列表 - 以逗号分隔的输入参数列表，以其数据类型开头，括在括号中，`()`。如果没有参数，则必须使用空括号。
5.  一个例外列表 - 稍后讨论。
6.  括号之间的方法体 - 方法的代码，包括局部变量的声明，在这里。

修饰符，返回类型和参数将在本课程的后面部分讨论。稍后的课程将讨论例外情况。

* * *

**Definition:** Two of the components of a method declaration comprise the _method signature_—the method's name and the parameter types.

* * *

上面声明的方法的签名是：

```
calculateAnswer(double, int, double, double)

```

## 命名方法

虽然方法名称可以是任何合法标识符，但代码约定限制方法名称。按照惯例，方法名称应该是小写的动词或以小写的动词开头的多字名称，后跟形容词，名词等。在多字名称中，每个第二个和后一个单词的第一个字母应该大写。这里有些例子：

```
run
runFast
getBackground
getFinalData
compareTo
setX
isEmpty

```

通常，方法在其类中具有唯一名称。但是，由于 _ 方法重载 _，方法可能与其他方法具有相同的名称。

## 重载方法

Java 编程语言支持 _ 重载 _ 方法，Java 可以区分具有不同 _ 方法签名的方法 _。这意味着如果类中的方法具有不同的参数列表，则它们可以具有相同的名称（有一些资格，将在标题为“接口和继承”的课程中讨论）。

假设您有一个类可以使用书法来绘制各种类型的数据（字符串，整数等），并且包含绘制每种数据类型的方法。为每种方法使用新名称很麻烦 - 例如，`drawString`，`drawInteger`，`drawFloat`等。在 Java 编程语言中，您可以对所有绘图方法使用相同的名称，但将不同的参数列表传递给每个方法。因此，数据绘图类可能会声明四个名为`draw`的方法，每个方法都有不同的参数列表。

```
public class DataArtist {
    ...
    public void draw(String s) {
        ...
    }
    public void draw(int i) {
        ...
    }
    public void draw(double f) {
        ...
    }
    public void draw(int i, double f) {
        ...
    }
}

```

重载方法由传递给方法的参数的数量和类型区分。在代码示例中，`draw(String s)`和`draw(int i)`是不同且唯一的方法，因为它们需要不同的参数类型。

您不能声明多个具有相同名称和相同数量和类型的参数的方法，因为编译器无法区分它们。

在区分方法时，编译器不考虑返回类型，因此即使它们具有不同的返回类型，也不能使用相同的签名声明两个方法。

* * *

**Note:** Overloaded methods should be used sparingly, as they can make code much less readable.

* * *