方法
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。如果你声明一个局部变量final,它的值不能被改变。如果变量是对某个对象的引用,则该对象的引用不能被改变,但被引用的对象内部的值仍然可以被改变。
方法返回类型
方法可以返回一个值。示例如下:
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)方法调用返回的值。之后打印其值。
方法可以用来将代码分解成更小、更易于理解和可重用的代码段,而不是将程序编写成一个大的方法。
下一篇:构造方法(构造器)