方法

Java方法是代码中在数据(变量)上做操作的地方。换句话说,你可以将Java操作(代码)分组到Java方法中。 Java方法必须位于Java类中。

Java方法类似于其他编程语言(如Pascal或JavaScript)中所谓的函数或过程。方法是一组Java语句,它们对某些数据执行一些操作,可能会返回结果,也可能不会返回结果。

下面是一个简单的Java方法:

public MyClass{

    public void writeText(String text) {
        System.out.print(text);   //向System.out输入字符串text
    }
}

上面的例子在名为MyClass的类中定义了一个名为writeText的方法。该方法接收单个参数 text。该参数可用于方法内部的Java语句中。该方法不返回任何值。

在下面的内容中,我将解释上述方法定义中每个元素的含义。

方法参数

方法参数使得我们可以给一些值传给方法以方便其操作。方法参数在方法名称后的括号内声明。

public void writeText(String text1, String text2) {
    System.out.print(text1);
    System.out.print(text2);
}

上例中的writeText方法使用了两个参数:text1和text2。这些参数都是String类型。

你可以使用任何基本数据类型或内置的Java类作为参数的数据类型,也可以使用自己的类作为参数类型。

参数与变量

方法的参数类似于变量。你可以读取他的值,也可以改变它的值。示例如下:

public MyClass{

    public void writeText(String text1, String text2) {
        System.out.print(text1);    // 读取参数text1传递的值
        System.out.print(text2);    // 读取参数text2传递的值

        text1 = "new value 1";      // 改变text1的值
        text2 = "new value 2";      // 改变text2的值
    }
}

请注意:虽然可以更改参数的值,但是如果尝试这样做的时候,请小心,因为这可能会导致混淆。当然如果你认为你能够清晰的认识到你在做什么,可以继续。如果不能的话,可以尝试创建一个局部变量来保存该值,同时保持参数值不变。

你可以像下面这样来调用 writeText()方法:

MyClass myClassObj = new MyClass();

myClassObj.writeText("Hello", "World");

请注意方法参数是如何写在方法名称后面的括号内。当执行上面的Java代码时,writeText()方法将被执行,参数将传递值“Hello”和“World”。

final参数

Java方法参数可以像变量一样声明为final。final参数的值不能改变。也就是说,如果参数是一个对象的引用,那么引用不能被改变,但是对象内部的值仍然可以被改变。示例如下:

public void writeText(final String text1, final String text2) {
    System.out.print(text1);    // 读取参数text1的值
    System.out.print(text2);    // 读取参数text2的值
}

在此方法示例中,不能将参数text1和text2重新分配任何其他字符串。

局部变量

你可以在方法中声明局部变量。局部变量可以像任何其他变量一样使用,但只能在方法的范围内访问。下面是一个例子:

public void writeText() {
    int localVariable1 = 1;
    int localVariable2 = 2;

    System.out.println( localVariable1 + localVariable2 );
}

局部变量也可以声明为final。如果你声明一个局部变量fi​​nal,它的值不能被改变。如果变量是对某个对象的引用,则该对象的引用不能被改变,但被引用的对象内部的值仍然可以被改变。

方法返回类型

方法可以返回一个值。示例如下:

public int sum(int value1, int value2) {
    return value1 + value2;
}

此方法将传递给它的两个参数相加,并返回结果。

首先,注意返回类型int,它在方法名称(sum)之前用粗体标记。这个返回类型表明这个方法返回一个int。

其次,注意return声明。 return语句确定方法返回的值。

你可以从Java方法返回任何原始类型或任何对象。你也可以返回一个String,如下所示:

public String concat(String string1, String string2) {
    return string1 + string2;
}

这个方法将两个字符串参数进行拼接,并返回得到的结果。

多个return语句

在一个方法中可能有多个return语句。但是,它们不能同时执行。只有一个return语句可以被执行。一旦执行了return语句,就不会执行该方法中的其他代码。该程序只是跳回到调用方法的代码。

下面是一个有多个return语句的方法的例子:

public String concat(String string1, String string2, boolean reverseOrder){

    if(reverseOrder) {
        return string2 + string1;
    }
    return string1 + string2;
}

注意方法内部的if语句。这个if语句测试布尔参数reverseOrder是true还是false。

如果reverseOrder参数的值为true,则该方法返回作为参数传递的两个字符串,并以相反顺序(第一个字符串2,然后是第一个字符串)进行连接。

如果reverseOrder参数的值为false,则该方法将跳过if语句的主体。然后继续到第二个返回语句。这个return语句返回按正常顺序拼接的两个参数(string1,string2)。

方法访问修饰符

在本文中,你可能已经注意到了所有方法声明示例之前的public字样。这个词是该方法的访问修饰符。访问修饰符确定允许哪些代码可以调用此方法。更多关于Java访问修饰符的内容请参考相关章节。

异常声明

如果在方法内部发生错误,该方法可能会引发异常。异常必须在方法声明中声明,如下所示:

public String concat(String string1, String string2) throws MyException {

    if(string1 == null) {
        throw new MyException("string1 was null");
    }
    if(string2 == null) {
        throw new MyException("string2 was null");
    }

    return string1 + string2;
}

该方法首先检查参数string1和string2是否为null。如果是,就会抛出一个异常。

当引发异常时,该方法也会停止执行。但是,不是返回到方法被调用的地方,而是,以该异常为目标在围绕该方法的第一个catch(){}子句内恢复执行。

调用方法

在本文中我在几个地方一直谈论调用方法。现在我将告诉你如何去做。看看这两种方法:

public void callSum() {
    int theSum = add(1, 3);
    System.out.print(theSum);
}

public int add(int value1, int value2) {
    return value1 + value2;
}

注意callSum()方法创建一个名为theSum的变量,并为其分配由add(1,3)方法调用返回的值。之后打印其值。

方法可以用来将代码分解成更小、更易于理解和可重用的代码段,而不是将程序编写成一个大的方法。

下一篇:构造方法(构造器)

results matching ""

    No results matching ""