1.1.1 方法的定义

方法就是一段可重复调用代码段,例如,有某段长度约100行的代码,要在多个地方使用此段代码,如果在各个地方都重复编写此部分代码,则肯定会比较麻烦,而且此部分代码如果进行修改,也比较困难,所以此时可以将此部分代码定义成一个方法,以供程序反复调用。

方法的定义在Java中可以使用多种方式,如下面格式中定义的方法可以直接使用主方法main()调用,是因为在方法声明处加上了public static 关键字(擦,没解释。。。。),方法的定义格式:

public static 返回值类型 方法名称(类型 参数1,类型 参数2){

方法的主体

 
程序语句;                     

[return 表达式];                   

注意:如果不需要传递参数到方法中,只要将括号写出,不必填入任何内容。此外,如果方法没有返回值,则在返回值类型处要明确的写出void,此时,在方法中return语句可以省略。方法执行完后无论是否村子返回值都将返回到方法调用处并向下继续执行。

定义一个方法,在主方法中进行调用:

class MethodDemo01{

      public static void main(String[] args) {

         printInfo();

         printInfo();

         printInfo();

         System.out.println("Hello World");

      }

      public static void printInfo(){

         char c[] = {'H','e','l','l','o',',','L','X','H'};

         for (int i = 0; i < c.length; i++) {

            System.out.print(c[i]);

         }

         System.out.print("循环打印:");

         System.out.print("直接打印:");

         System.out.println(c);

      }

}

程序中可以发现,因为printInfo()方法本身不需要任何的返回值声明,所以使用了void关键字进行声明,表示此方法不需要任何的返回值,所以不需要编写return语句。执行流程图如下:

当调用printInfo()方法时,程序会跳转到printInfo()方法中执行,当printInfo()方法全部执行完之后就会返回调用处向下继续执行。

方法命名规范要求:

在定义类时,全部单词的首字母必须大写,那么在定义方法时也有命名规范要求,即第一个单词的首字母小写,之后每个单词的首字母大写,如printInfo()

有返回值的方法:

class MethodDemo02{

      public static void main(String[] args) {

         int one = addOne(10, 20);

         float two = addTwo(10.3f, 13.3f);

        

         System.out.println("addOne的结果:" + one);

         System.out.println("addTwo的结果:" + two);

      }

     

      public static int addOne(int x, int y){

         int temp = 0;

         temp = x + y;

         return temp;

      }

      public static float addTwo(float x, float y){

         float temp = 0;

         temp = x + y;

         return temp;

      }

}

运行结果:

addOne的结果:30

addTwo的结果:23.6

在方法中可以定义多个变量,这些变量只在方法的内部起作用,所以把这些变量成为局部变量。

1.1.2 方法的重载

方法的重载就是方法名称相同,但参数的类型和参数的个数不同。通过传递参数个数及类型的不同可以完成不同功能的方法调用。如下面代码:

class MethodDemo03{

      public static void main(String[] args) {

         int one = add(10, 20);

         int two = add(10, 20, 30);

         float three = add(10.3f, 13.3f);

        

         System.out.println("add(int x,int y)的结果:" + one);

         System.out.println("add(int x,int y,int z)的结果:" + two);

         System.out.println("add(float x, float y)的结果:" + three);

      }

     

      public static int add(int x, int y){

         int temp = 0;

         temp = x + y;

         return temp;

      }

      public static int add(int x, int y, int z){

         int temp = 0;

         temp = x + y + z;

         return temp;

      }

      public static float add(float x, float y){

         float temp = 0;

         temp = x + y;

         return temp;

      }

}

运行结果:

add(int x,int y)的结果:30

add(int x,int y,int z)的结果:60

add(float x, float y)的结果:23.6

在程序中可以发现add()方法被重载了3次,而且每次重载时的参数类型或个数都有不同,所以在调用时,会根据参数的类型和个数自动进行分区,如图所示:

System.out.println()方法也属于重载方法,它可以打印各种类型的数据。

方法的重载:

方法的重载一定只是在参数上的类型或个数不同,和返回值无关。

1.1.3 使用return结束一个方法

Java的方法定义中,可以使用return语句直接结束方法。

使用return结束方法:

class MethodDemo04{

      public static void main(String[] args) {

         System.out.println("1、调用fun()方法之前。");

         fun(10);

         System.out.println("2、调用fun()方法之后。");

      }

     

      public static void fun(int x) {

         System.out.println("3、进入fun()方法。");

         if (x == 10) {

            return;

         }

         System.out.println("4、正常执行完fun()方法。");

      }

}

运行结果:

1、调用fun()方法之前。

3、进入fun()方法。

2、调用fun()方法之后。

从结果中可以发现,虽然在return中没有返回任何内容,但是一旦执行到了return语句之后,方法将不再执行,而返回到被调用处继续向下执行。

1.1.4 方法的递归调用

递归调用是一种特殊的调用形式,是方法自己调用自己,如图所示:

例如,要完成一个数字的累加操作,除了可以使用循环外,还可以使用递归调用。

class MethodDemo06{

      public static void main(String[] args) {

         System.out.println("计算结果:" + sum(100));

      }

     

      public static int sum(int num){

         if(num == 1){

            return 1;

         }else {

            return num + sum(num - 1);

         }

      }

}

运行结果:

计算结果:5050