方法的好处
用方法来编写程序代码有相当多的好处,它可简化程序代码、精简重复的程序流程,并把具有特定功能的程序代码独立出来,使程序的维护成本降低。
方法的声明
返回值类型 方法名称(类型 参数 1,类型 参数 2, …)
{
程序语句 ;
return 表达式;
}
大括号内为方法的主体部分
要特别注意的是,如果不需要传递参数到方法中,只要将括号写出,不必填入任何内容。此外,如果方法没有返回值,则 return 语句可以省略。
方法操作的简单范例
public class TestJava4_8 {
public static void main(String args[]) {
star(); // 调用 star() 方法
System.out.println("I Like Java !");
star(); // 调用 star() 方法
}
public static void star() // star() 方法
{
for (int i = 0; i < 19; i++)
System.out.print("/"); // 输出 19 个星号
System.out.print("\n"); // 换行
}
}
输出结果:
///
I Like Java !
///
TestJava4_8 中声明了两个方法,分别为 main()方法与 star()方法。因为 main()方法是程序进入的起点,所以把调用 star()的程序代码编写在 main()里。
方法的调用很简单,只需要写出方法名()即可,如果需要参数,传入对应类型的参数就行
方法的参数与返回值
如果方法有返回值,则在声明方法之前就必须指定返回值的数据类型。相同的,如果有参数要传递到方法内,则在方法的括号内必须填上该参数及其类型。
public class TestJava4_9 {
public static void main(String args[]) {
int num;
num = star(7); // 输入 7 给 star(),并以 num 接收返回的数值
System.out.println(num + " stars printed");
}
public static int star(int n) // star() method
{
for (int i = 1; i <= 2 * n; i++)
System.out.print("/"); // 输出 2*n 个星号
System.out.print("\n"); // 换行
return 2 * n; // 返回整数 2*n
}
}
输出结果:
14 stars printed
因 star()返回整数值,所以要在声明 star() 方法之前加上 int 关键字,此外,因要传入一个整数给 star(),所以 star()的括号内也要注明参数的名称与数据类型。并且这些数据类型包括基本数据类型和引用数据类型,比如数组
传递二维数组与返回二维数组
// 以下的程序说明了方法中返回一个二维数组的实现过程
public class TestJava4_14 {
public static void main(String args[]) {
int A[][] = { { 51, 38, 82, 12, 34 }, { 72, 64, 19, 31 } }; // 定义二维数组
int B[][] = new int[2][5];
B = add10(A); // 调用 add10(),并把返回的值设给数组 B
for (int i = 0; i < B.length; i++) // 输出数组的内容
{
for (int j = 0; j < B[i].length; j++)
System.out.print(B[i][j] + " ");
System.out.print("\n");
}
}
public static int[][] add10(int arr[][]) {
for (int i = 0; i < arr.length; i++)
for (int j = 0; j < arr[i].length; j++)
arr[i][j] += 10; // 将数组元素加 10
return arr; // 返回二维数组
}
}
输出结果:
61 48 92 22 44
82 74 29 41
方法中将传进去的数组的每个元素加10然后返回
方法的重载
我们知道了方法可以传递和返回不同类型的数。那么方法名可不可以相同呢,比如,我想要一个方法求两个数之和,叫add(),然后有需要一个求三个数之后的方法能不能也叫add()呢?
// 以下程序说明了方法的重载操作
public class TestJava4_11 {
public static void main(String[] args) {
int int_sum;
double double_sum;
int_sum = add(3, 5); // 调用有两个参数的 add 方法
System.out.println("int_sum = add(3,5)的值是: " + int_sum);
int_sum = add(3, 5, 6); // 调用有三个参数的 add 方法
System.out.println("int_sum = add(3,5,6)的值是: " + int_sum);
double_sum = add(3.2, 6.5); // 传入的数值为 doule 类型
System.out.println("double_sum = add(3.2,6.5)的值是: " + double_sum);
}
public static int add(int x, int y) {
return x + y;
}
public static int add(int x, int y, int z) {
return x + y + z;
}
public static double add(double x, double y)
{
return x + y;
}
}
输出结果:
int_sum = add(3,5)的值是: 8
int_sum = add(3,5,6)的值是: 14
double_sum = add(3.2,6.5)的值是: 9.7
方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或类型不同即可。在这种情况下,该方法就叫被重载了,这个过程称为方法的重载。这里对返回值没有要求