目录

 

方法的定义

方法的格式

定义新方法的明确点

方法的重载

方法的形参与实参

方法的注意事项

方法调用四步骤

方法形参是基本和引用数据类型例子

基本数据类型

引用数据类型

方法的递归调用


方法的定义

简单的说:方法就是完成特定功能的代码块

方法的格式

权限修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {

                   方法体;

                   return 返回值;

}

return的两个作用:

  1. 停止当前方法
  2. 将后面的返回值还给调用处,返回值跟返回值类型对应

定义新方法的明确点

写一个方法首先有两点需要明确

返回值类型 明确功能结果的数据类型,如果没有返回值,则写void

参数列表 明确有几个参数,以及参数的类型

 

有参数:小括号当中有内容,当一个方法需要一些数据条件,才能完成任务的时候,就是有参数。

例如两个数字相加,必须知道两个数字是各自多少,才能相加。

无参数:小括号当中留空。一个方法不需要任何数据条件,自己就能独立完成任务,就是无参数。

例如定义一个方法,打印固定10次HelloWorld。

方法的重载

比如说,但我们去定义两个数的和,三个数的和,四个数的和,这三个方法分别叫做sumTwo,sumThree,sumFor,对于这些功能类似的方法来说,因为参数列表不同,却需要记住那么多不同的方法名称,显得很麻烦,我们可以定义一个统一的名称getSum,所以出现了方法的重载。

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。这就是方法的重载

方法重载特点:

  1. 参数个数不同
  2. 参数类型不同
  3. 参数的多类型顺序不同
  4. 与返回值类型无关,只看方法名(相同)和参数列表(不同)

总体原则:在调用方法时,在编译阶段,虚拟机通过实参列表来调用最匹配的那个方法

好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能

方法的形参与实参

形式参数:用于接收实际数据的变量

实际参数:实际参与运算的变量

方法的注意事项

1.方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用。

   例如定义了一个两个int类型数字相加的方法:

   public static int sum(int a, int b) {

     int result = a + b;

     return result;

   }

  单独调用:方法名称(参数);  sum(10, 20);

  打印调用:System.out.println(方法名称(参数));  System.out.println(sum(10, 20));

  赋值调用:数据类型 变量名称 = 方法名称(参数);  int number = sum(15, 25);

  如果返回值类型是void的方法,这种方法只能够单独调用,不能进行打印调用或者赋值调用

2.如果方法有返回值,那么必须写上“return 返回值;”,不能没有。

3.return后面的返回值数据,必须和方法的返回值类型,对应起来。

4.对于一个void没有返回值的方法,不能写return后面的返回值,只能写return,相当于

结束方法。

5.对于void方法当中最后一行的return可以省略不写

6一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写。例如if和else里面都有一个return,但是只会有一个return会被执行到

方法调用四步骤

第一步:找到方法

第二步:参数传递

第三步:执行方法体

第四步:带着返回值回到方法的调用处

javajoin函数 java里面的函数_引用数据类型

 有返回值和无返回值的对比:

javajoin函数 java里面的函数_方法名_02

方法形参是基本和引用数据类型例子

基本数据类型

javajoin函数 java里面的函数_引用数据类型_03

遇到此类型可以画图解释,由上图可知,代码片段都先被加载进方法区,首先调用main方法,main方法进栈,此时输出a=10,b=20,之后调用change方法,change方法进栈,a和b分别被当做实际参数传进change方法的形参中,在change方法中,a=20,b=40,change方法结束后直接从内存消失,弹栈,此时访问a,b变量会直接从main方法中取,所以是10,20

结论:如果方法的参数是基本数据类型,形式参数的改变不影响实际参数

引用数据类型

javajoin函数 java里面的函数_引用数据类型_04

结论:如果参数是引用数据类型,形式参数的改变直接影响实际参数,因为传递是实参的地址

方法的递归调用

方法递归调用就是在方法体中又调用了它自身.

方法递归调用主要确定两点:

1.找到规律

2.确定结束条件

例如求n的阶乘

/*

定义方法,返回n的阶乘, 通过参数来接收一个整数n,返回它的阶乘

6! = 1*2*3*4*5*6

5! = 1*2*3*4*5

4! = 1*2*3*4

3! = 1*2*3

2! = 1*2

1! = 1

规律:

n! = (n-1)! * n

结束条件:

1! = 1

 */

public static long factor( int n ){ if ( n == 1 ){ return 1; } return  factor(n-1) * n;     //返回n-1的阶乘 * n,  调用它自身返回n-1的阶乘 }