Java方法
Java方法是我们对Java代码中的数据(变量)进行操作的地方。换句话说,我们将Java操作(代码)分组在Java方法中。 Java方法必须位于Java类内部。
Java方法类似于其他编程语言(例如Pascal或者JavaScript)中所谓的函数或者过程。方法是一组Java语句,它们对某些数据执行某些操作,并且可能会或者可能不会返回结果。
这是一个简单的Java方法示例:
public MyClass{ public void writeText(String text) { System.out.print(text); //prints the text parameter to System.out. } }
上面的示例在名为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); // read value of text1 parameter. System.out.print(text2); // read value of text2 parameter. text1 = "new value 1"; // change value of text1 text2 = "new value 2"; // change value of text2 } }
注意事项:尽管可以更改参数的值,但我们应谨慎操作,因为这可能导致代码混乱。如果我们认为可以解决,请继续。如果不是,请创建一个局部变量来保存该值,并保持参数值不变。
调用writeText()方法如下所示:
MyClass myClassObj = new MyClass(); myClassObj.writeText("Hello", "World");
注意,方法的参数是如何在方法名称后面的括号内编写的。执行上述Java代码后,将执行writeText()
方法,并且参数将包含值" Hello"和" World"。
final参数
可以将Java方法参数声明为" final",就像变量一样。最终参数的值不能更改。也就是说,如果参数是对对象的引用,则不能更改引用,但仍可以更改对象内部的值。这是一个例子:
public void writeText(final String text1, final String text2) { System.out.print(text1); // read value of text1 parameter. System.out.print(text2); // read value of text2 parameter. }
在此方法示例中,除了调用该方法时作为参数传递的参数外,不能将参数text1和text2重新分配给任何其他String。
局部变量
我们可以在方法内部声明局部变量。可以像使用其他任何变量一样使用局部变量,但是只能在方法范围内访问。这是一个例子:
public void writeText() { int localVariable1 = 1; int localVariable2 = 2; System.out.println( localVariable1 + localVariable2 ); }
局部变量也可以声明为" final"。如果声明局部变量" final",则其值不能更改。如果变量是对对象的引用,则不能更改对对象的引用,但是仍可以更改所引用对象内部的值。
方法返回类型
Java方法可以返回一个值。这是一个例子:
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语句的方法的示例:
public String concat(String string1, String string2, boolean reverseOrder){ if(reverseOrder) { return string2 + string1; } return string1 + string2; }
注意方法中的if
语句。这个if语句测试布尔参数reverseOrder是true还是false。
如果" reverseOrder"参数的值为" true",则该方法返回作为参数传递的两个字符串,它们以相反的顺序连接(第一个" string2",然后" string1")。
如果" reverseOrder"参数的值为" false",则该方法将跳过" if"语句的主体。然后继续执行第二个" return"语句。这个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(){}
子句中恢复执行,该子句针对该异常。
我对Java异常处理有完整的了解,因此在此不再详细介绍。
调用方法
在本文中,我一直在谈论调用方法。现在,我将向我们展示如何执行此操作。看一下这两种方法:
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)返回的值。之后,它将打印出该值。
方法可用于将代码分解为更小,更易理解和可重用的代码段,而不是将程序编写为一种大方法。