文档

Java™ 教程-Java Tutorials 中文版
定义方法
Trail: Learning the Java Language
Lesson: Classes and Objects
Section: Classes

定义方法

这是一个典型的方法声明的例子:

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

方法声明的唯一必需元素是方法的返回类型,名称,一对括号 (), 以及在大括号 {} 之间的方法主体。

更一般地说,方法声明有六个组件,依次为:

  1. 修饰符(如 publicprivate)以及稍后将会学到的其他修饰符。
  2. 返回类型 — 方法返回的值的数据类型,如果该方法没有返回值,则返回 void
  3. 方法名称 — 字段名称的规则也适用于方法名称,但规范有点不同。
  4. 括号中的参数列表 — 输入参数的逗号分隔列表,以它们的数据类型开头,由括号括起来 ()。如果没有参数,则必须使用空括号。
  5. 一个异常列表 — 将在稍后讨论。
  6. 方法体,包含在括号之间的方法的代码,包括局部变量的声明,都在这里。

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


定义: 定义: 方法声明的两个组件构成 method signature (方法签名) — 方法名称和参数类型。

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

calculateAnswer(double, int, double, double)

命名方法

虽然方法名称可以是任何合法的标识符,但代码规范会限制方法名称。按照规范,方法名应该是小写的动词或多个词的名称,多个词以小写的动词开头,后面跟形容词,名词等。在多词的名称中,第二个单词和后面的单词的首字母应该大写。这里有些例子:

run
runFast
getBackground
getFinalData
compareTo
setX
isEmpty

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

重载方法

Java 编程语言支持 overloading (重载) 方法,Java 可以区分具有不同 method signatures (方法签名) 的方法。这意味着如果一个类中的方法具有不同的参数列表,那么类中的方法可以具有相同的名称(这有一些限制,将在标题为 "接口和继承" 的课程中讨论)。

假设你有一个可以使用书法绘制各种类型的数据(字符串,整数等)并包含绘制每种数据类型方法的类。使用每个方法的新名称很麻烦,例如 drawStringdrawIntegerdrawFloat 等等。在 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) 是截然不同且唯一的方法,因为它们需要不同的参数类型。

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

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


注意: 应该谨慎使用重载的方法,因为它们会使代码更不易读。

Previous page: Declaring Member Variables
Next page: Providing Constructors for Your Classes