1、本次的预计讲解的知识
1、方法的作用以及定义格式;
2、方法的重载;
3、方法的递归调用。
2、具体内容
2.1、方法的基本概念
所谓的方法是一段重复调用的代码段,利用此操作可以封装执行的代码。
方法的格式定义格式比较复杂,所以本次给出的方法有一个要求:指的是定义在主类之中,并且求主方法直接调用的方法。
public static 返回值类型 方法名称 (参数类型 参数变量...){ 方法体(本次方法要执行的若干操作) ; [return [返回值] ;] } |
在本定义格式之中,发现方法有一个返回值类型,指的是这个方法返回结果,对于此类型由两种:
·直接设置Java中的数据类型(基本数据类型、引用数据类型),如果方法设置了返回值,那么必须使用return语句返回与之数据类型对应的数据;
·方法没有返回值:void,可以不使用return返回内容,但是可以使用return结束方法调用;
在定义方法名称的时候也是有自己的命名要求的:第一个单词的首字母小写,而每个单词的首字母大写。
范例:定义一个没有参数没有返回值的方法
public class TextDemo { public static void main(String[] args) { printInfo(); //直接调用调用方法 printInfo(); //直接调用调用方法 printInfo(); //直接调用调用方法 } //定义没有参数,没有返回值得方法 public static void printInfo () { System.out.println("*************"); System.out.println("*HELLO WORLD@!!*"); System.out.println("*************"); } } |
可以发现将若干代码封装在一个方法之中,那么就可以根据需要重复执行这些方法所定义代码。实际上是否要形成方法,并没有一个绝对的条件。但是有一点可以参考:如果在代码之中发现你总是在对一些操作进行“复制、粘贴”的时候,就可以考虑将此代码定定为方法以供重复调用使用。
范例:定义一个有参数无返回值
public class TextDemo { public static void main(String[] args) { get(10.0); get(-5.0); } //定义有参数,没有返回值得方法 public static void get (double money) { //购买商品 if (money > 0.0) { System.out.println("可以进行支付"); } else { System.out.println("没钱"); } } } |
有了参数之后,那么方法就可以根据不同的参数的内容进行数据处理。
范例:定义有参数有返回值的方法
public class TextDemo { public static void main(String[] args) { //方法的返回值可以记性接收 int result = add(10,20) ; System.out.println(result); //也可以直接将方法的返回值进行输出 System.out.println(add(50,60)); } //定义有参数,没有返回值得方法 public static int add (int x,int y) { //购买商品 return x + y ; } } |
在以后编写代码的时候为了节约代码,可以就直接利用方法的返回结果进行输出了。
如果说现在一个方法上使用了void定义为它的返回值,那么使用return结束一个方法的调用。
范例:利用return结束方法调用
public class TextDemo { public static void main(String[] args) { set (100) ; set (3) ; set (10) ; } //定义有参数,没有返回值得方法 public static void set (int x) { if (x == 3) { return ; //方法后面的内容不执行了 } System.out.println("x = " + x); } } |
只有在方法返回值类型为void的前提下才可以使用。
2.2、方法的重载
如果现在有一个方法的名称有可能执行多项操作,例如:一个add()方法,它有可能执行两个整数的相加,也有可能执行三个整数的相加,或者有可能执行两个小数的相加,那么在这样的情况,很明显,一个方法体跟定无法满足于要求需要为add()方法定义多个不同的功能实现,所以此类功能称为方法重载,但是在进行方法重载的时候要求方法的名称相同,参数的类型即个数不同。
范例:观察方法重载
public class TextDemo { public static void main(String[] args) { //方法重载之后执行时会根据传入参数的类型或个数不同调用不同的方法体 System.out.println("两个整型参数" + add(10, 20)); System.out.println("三个整型参数" + add(10,20,30)); System.out.println("两个浮点型参数" + add(10.2, 10.3)); } //add()方法一共被重载三次 public static int add (int x,int y) { return x + y ; } //此时与之前的add()方法的参数个数不一样 public static int add (int x,int y,int z) { return x + y + z; } //此时与之前的add()方法的参数类型不一样 public static double add (double x,double y) { return x + y ; } } |
范例:输出信息
public class TextDemo { public static void main(String[] args) { System.out.println("hello");//输出String System.out.println(1); //输出int System.out.println(10.2); //输出double System.out.println('A'); //输出char System.out.println(false); //输出boolean }
} |
可以发现“System.out.println()”所有的内容都可以输出,所以此方法就是被重载后的方法
方法的重载的概念很容易理解,但是对于方法的重载有两点说明:
·在进行方法重载的时候一定要考虑到参数类型的统一,虽然可以实现重载方法返回不同类型的操作,但是从标准开发来讲,建议所有的重载后的方法使用同一种返回值类型;
·方法重载的时候重点是根据参数类型即个数来区分不同的方法,而不是依靠返回值得不同来确定的。
2.3、方法的递归调用(了解)
递归调用时我们迈向数据结构开发的第一步,但是如果你要真的想把递归操作掌握熟练,那么需要大量的代码几类才有可能写出递归,换个角度,如果现在标准的项目开发里面,你么们是很难去写上递归操作的。
所谓的递归指的就是一个方法自己调用自己的情况,但是如果要想实现自己调用自己,一定需要一个结束的条件。冰洁每次调用的时候都需要修改这个结束条件。
之所以开发之中递归操作会尽量减少调用,是因为如果处理不当,就有 出现内存的溢出问题。
范例:实现1~100的累加操作
public class TextDemo { public static void main(String[] args) { int sum = 0 ; int current = 1 ; while (current <= 100) { sum += current ; current++ ; } System.out.println(sum) ; } } |
那么如果说此时将以上的代码变为递归的操作呢?
范例:递归调用
public class TextDemo { public static void main(String[] args) { System.out.println(sum(100)); //1 —— 100 的累加 System.out.println(sum(200)); //1 —— 200 的累加 } public static int sum (int num) { //最大的内容 if (num == 1) { //结束调用 return 1; //最终的结果但会了一个1 } return num + sum(num - 1); } } |
下面使用方法调用的方式分析以上代码的操作步骤:
·return 100 + 99 + 98 + sum(97)+...+ 2 + 1;
1、主方法调用sum(100),return 100 + sum(99);
2、递归调用 sum(99),return 99 + sum(98);
3、递归调用 sum(98),return 98 + sum(97);
……
4、倒数第2次递归调用sum(2),return 2 + sum (1);
5、倒数第1次递归调用sum(1),return 1,不在递归,符合结束调价。
3、总结
1、可以将一些重复执行的代码定义在方法里面,方法(method)有些书上也称为函数(function);
2、本次所讲解的方法是有它的局限性:定义主类,并且有主方法直接调用;
3、方法的返回值一旦定义了,就需要使用return返回相应数据;
4、方法重载(overloading)指的是方法名称相同,参数的类型及个数不同,同时尽量返回值类型相同;
5、递归调用需要明确的设置一个结束的条件,否则会出现死循环,如果处理的数据量一大,就有可能出现内存溢出。