方法入门

mac2026-01-15  3

1.概述

       具有某种特定功能的代码段。

       某段代码经常使用,所以使用大括号,将这段代码包起来,起个名字。以后就使用这个名字来代替这段代码。

       好处:

       1、提高了代码的复用性。

       2、提高了代码的封装性,大括号中的内容,其他调用者看不到也无法直接访问。

       3、简化了软件设计的思维难度。

2.定义

       格式:

       修饰符 返回值类型 方法名称 (参数列表) {

            方法体语句;

            return语句;

       }

       修饰符:现在全都写成public static。

       返回值类型:方法具有功能,有可能会有一些产出,就需要将数据返回给调用者。调用者需要知道生产出来的数据的数据类型。

       方法名称:给这段代码起的名字。只要是一个合法的标识符即可。第一个单词的首字母小写,从第二个单词开始首字母大写。动词、动宾结构。

       参数列表:这段代码要完成功能,可能会需要一些资源。在参数列表中,需要定义一些变量,内存中表示为容器,在调用本方法的时候,会由外界传入数据,存储到这些变量容器中。使用变量符号,表示那些将来可能传入的数据。

       方法体语句:真正要完成该方法功能的执行逻辑。

       return语句:最终生产出来的结果,要返回给调用者,使用return语句返回。如果没有任何生产内容,就可以写一个return;用于表示方法结束。

       

3.方法的调用

       格式: 方法名称(实际参数);

       方法调用的三种形式:

       1、直接调用:表示某些内容的执行,而没有生产结果的情况

       2、输出调用:方法的返回值,需要打印。如果这个结果只打印一次,不做其他的操作。

       3、赋值调用:方法的返回值,使用某个变量来接收。如果这个结果需要反复使用。

       方法调用总体特点: 方法不调用,就不执行。

4.注意事项

       方法定义:

       1、方法不能嵌套定义,方法都是定义在主方法的下面。

       2、方法的先后没有区别

       3、方法的定义是平级关系

       4、方法可以嵌套调用,甚至可以自己调用自己

       参数列表:

       1、形式参数:在定义方法时使用,需要加上数据类型的参数,也就是对于变量进行声明。各个变量之间,使用逗号分隔。

       2、实际参数:在方法调用时使用,不能加上数据类型的参数,也就是对于变量进行赋值。各个实际参数之间,也使用逗号分隔。顺序必须和定义的方法的形式参数的顺序一致。

       return语句:

       1、语句表达方法结束了;表示方法的产出内容。

       2、如果方法没有具体的返回内容,可以写成return; 此时的return语句可以省略。返回值类型必须写成void

       3、如果方法有具体的返回内容,那么return后面就需要加上返回的那个数据。返回值类型必须和return语句后面的数据的数据类型一致。

       4、return语句返回数据,返回给调用者。谁来调用当前方法,当前方法就将数据返回给谁。

5.分类

       无参无返回

       有参无返回

       无参有返回

       有参有返回

6.方法的重载

       方法重载overload:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。

       重载方法参数列表不同:

       参数个数不同,如method(int x)与method(int x,int y)不同。

       参数类型不同,如method(int x)与method(double x)不同。

       参数顺序不同,如method(int x,double y)与method(double x,int y)不同。

       注意:

 1.重载只与方法名有关和参数类型相关与返回值无关。

       如void method(int x)与int method(int y)不是方法重载,不能同时存在。

2.重载与具体的变量标识符无关。

       如method(int x)与method(int y)不是方法重载,不能同时存在。

       总结:方法重载只与方法名和参数列表有关,和返回值/修饰符均无关(方法重载指的是在同一个类中)

7.主方法解释-扩展

8.递归-扩展

1.递归含义

       递归就是一个方法直接或间接的调用自身。

       递归是解决复杂问题的重要思想

       递归的思想就是数学上递推的思想。

       把大任务降解为与之类似的规模更小的任务。

2.递归的思考方法 

for(int i=0; i<10; i++){ System.out.println(i); }

       递归的思想:如果有人替我打印出0-8,我自己打印一个9,不就完成了吗?

       示例代码

public class Test { public static void main(String[] args) { print0to9(9); } //自己打印9,0-8交给别人 public static void print0to9(int n) { if(n>0) { print0to9(n-1); } System.out.println(n);//0 1 2 3 4 5 6 7 8 9 } }

       

       在使用递归算法时,必须找到递归的出口(也就是不再递归的条件)。

       递归方法中必须有选择语句。

       递归的层次太深了,造成调用桟的溢出。

3.方法调用栈

       栈是一种先进后出的数据结构。在调用方法时,就是一个进栈和出栈的过程。

       方法调用好比我们做一件事的郭晨中,暂时中断,去做更紧急的事,然后还要回到原处继续。

       栈顶的元素,就是我们当前正在处理的元素。

       被压在下面的元素,是一会还要继续处理的元素。

4.递归案例

       (1)输出 int a 到 int b

public class Test { public static void main(String[] args) { printAtoB(1,5); } public static void printAtoB(int a,int b){ if(a<b) { printAtoB(a,b-1); } System.out.println(b); } }

       (2)递归求阶乘

public class Test { public static void main(String[] args) { int result = jiecheng(3); System.out.println(result);//6 } public static int jiecheng(int n) { if(n==1) { return 1; } return n*jiecheng(n-1); } }

       (3)斐波那契数列 1,1,2,3,5,8,13,21,34........ 求第n个值。

public class Test { public static void main(String[] args) { int result = fb(5);//5 System.out.println(result); } public static int fb(int n) { if(n==1 || n==2) { return 1; } return fb(n-2)+fb(n-1); } }

       

      递归必须要有出口

      递归内存消耗大,容易发生内存溢出

      层次调用越多,越危险。

     例如:递归求阶乘,100的结果为0。

   

 

最新回复(0)