方法

方法

一、方法的意义

方法是实现某个特定功能的代码块,可以通过灵活改变参数和返回值实现需求

之前学习方法时我们使用的固定的main方法,一旦需求的参数改变时,就得改代码。

 

没使用方法前

public class AddSubMulDiv {
    public static void main(String[] args) {
        System.out.println(10+5);
        System.out.println(10-5);
        System.out.println(10*5);
        System.out.println(10/5);
        System.out.println(12+5);
        System.out.println(12-5);
        System.out.println(12*5);
        System.out.println(12/5);
        System.out.println(14+5);
        System.out.println(14-5);
        System.out.println(14*5);
        System.out.println(14/5);
        System.out.println(17+5);
        System.out.println(17-5);
        System.out.println(17*5);
        System.out.println(17/5);
​
    }
​
}

 

使用了方法

public class AddSubMulDiv {
    public static void main(String[] args) {
        add(10,5);
        add(12,5);
        add(14,5);
        add(17,5);
​
    }
    public static void add(int a,int b){
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println(a/b);
    }
​
}

 

二、方法的基本语法

语法:

修饰符列表 返回值类型 方法名 (参数类型 变量名){方法体}

public static void main(String[] args){}

其中返回值类型和参数类型可以是基本数据类型和引用数据类型

根据参数和返回值,我们把方法分为四种

  • 有返回值有参数

    • public static int fun1(int a){}

  • 有返回值无参数

    • public static int fun2(){}

  • 无返回值有参数

    • public static void fun3(int a){}

  • 无返回值无参数

    • public static void fun4(){}

三、函数的返回值和参数的意义

自定义函数和main函数都处于类体中,main不能包含自定义函数

大多数时候建议写返回值,因为更灵活,可以选择返回也可以选择不返回

返回值可以直接输出也可以被同类型函数接收

四、方法之间的调用问题

直接调用

  • 避免两个方法相互调用

  • 避免递归产生(自己调用自己)

五、递归

package com.szwollf.Day04;
​
public class DemoSelf {
    public static void main(String[] args) {
        calc(10);
    }
    public static int calc(int n){
        n = n/2;
        System.out.println(n);//5 2 1 0压栈
        if (n > 0) {
            calc(n);//调用自己
        }
        System.out.println(n);//0 1 2 5出栈
        return n;
    }
}

如上图所示,函数在每进入下一层的时候,当前层的函数并未结束,它必须等它调用的下一层函数执行结束返回后才能继续往下走。 所以最下面的那句print(n)会等最里层的函数执行时才会执行,然后不断往外退层,所以会出现0、1、2、5的效果

递归特性:

  1. 必须有一个明确的结束条件

  2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

  3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

递归通常用于多级菜单

六、栈内存结构

先压后弹

 String s1="abc";
 String s2="abc1";
// System.out.println(s1==s2);//是否相等,不能这么用
 boolean b = s1.equals(s2); //比较s1和s2是否相等
 System.out.println(b);
posted @ 2019-09-14 22:59  Wollf  阅读(182)  评论(0)    收藏  举报