Day05_方法

Day05_方法

方法是一种语法结构,把一段代码封装成一个功能方便重复调用。

使用方法的好处是可以提高代码的复用性,让程序逻辑更清晰。

今天的任务:

  • 怎么定义方法
    • 方法有多种定义方法,需要结合应用场景确定定义方式
  • 怎么调用方法
    • 只有调用方法才能让方法跑起来
  • 方法的内存图
    • 方法在内存中如何工作
  • 方法的参数传递机制
    • 方法的参数传递原理,需要注意的内容
  • 方法其他形式、技术
    • 方法重载、方法递归

1、方法定义、调用

1.1、方法完整的定义形式、调用

//方法定义
修饰符 返回值类型 方法(形参列表){
    方法体代码;
    return 返回值;
}

eg:
public static int sum(int a,int b){
        int c = a+b;
        return c;
    }

//方法调用
方法名(实参);

方法需要注意内容

  • 修饰符:暂时都用 public static
  • 返回值:如果确定的返回值类型就必须要有返回值,且返回值类型需要与声明返回值类型相同
  • 形参列表:多个可以用","分隔

1.2、方法的其他定义形式、调用

  • 方法不需要返回结果,则申明返回值类型为void;方法不需要参数,则形参列表可以不写
  • 方法没有申明返回值类型,内部不能使用return返回数据。
  • 方法如果没有形参列表,调用的时候则不能传入参数值,否则报错。

2、方法使用的常见问题

  • 方法编写的时候顺序无所谓

    //不论声明方法的顺序都可以正常使用
    public static int add(int a, int b){
            return a+b;
        }
        public static void main(String[] args) {
            int number = sum(1,2);
            int number2 = add(1,2);
            System.out.println(number);
            System.out.println(number2);
        }
        public static int sum(int a,int b){
            int c = a+b;
            return c;
        }
    
  • 方法与方法之间是平级关系不能嵌套定义

    public static void main(String[] args) {
            int number = sum(1,2);
            int number2 = add(1,2);
            System.out.println(number);
            System.out.println(number2);
            public static int add(int a, int b){
                return a+b;
            }
        }
    //抛出异常 expected ;
    
  • 方法的返回值类型为void,方法不能返回数据,如果方法的返回值类型写了具体的类型,方法内部必须返回对应类型的数据。

  • return语句下面为无效代码。

  • 方法不调用就不执行,调用时必须要匹配方法的参数情况。

  • 有返回值的方法调用时可以选择变量接收结果,或者直接输出调用结果。

3 、方法案例

//需求:定义一个方法,计算出1-n的值,并返回结果
    public static void main(String[] args) {

        System.out.println(calculate(5));
    }
    public static int calculate(int n){
        int sum = 0;
        for (int i = 1; i < n+1; i++) {
            sum+=1-i;
        }
        return sum;
    };


//找出数组的最大值
    public static int findMax(int []array){
        int max = array[0];
        for (int i = 0; i < array.length; i++) {
            if (max < array[i]){
                max = array[i];
            }
        }
        return max;
    }

    public static void main(String[] args) {
        int[] array = {4,55,35434,64564};
        int max = findMax(array);
        System.out.println(max);
    }
//判断奇偶数
    public static void main(String[] args) {
        judge(5);
    }
    public static  void judge(int a){
        if(a%2 == 0){
            System.out.println("是偶数!!");
        }else{
            System.out.println("是奇数!!!");
        }
    }

4、方法调用的内存图

  • 方法 没有被调用时,在 方法区中的字节码文件中存放
  • 方法 被调用时,需要进入 栈内存

图示

image-20220213103612778

image-20220213103633035

5、值传递机制

5.1、基本类型的参数传递

​ 在传输实参给方法形参的时候,并不是传输实参变量本身而是在传输实参变量中的值,这就是值传递,方法会在栈内存中创建一个新变量用于存储值传递的值。

注意:实参:方法内部定义的变量;形参:定义方法时,“()”中声明的参数

image-20220213104040461

5.2、引用类型的参数传递

​ 引用类型在值传递的过程中传递的为堆内存中的地址。

image-20220213104218978

6、参数传递案例

//设计一个方法遍历输出数组内容
    public static void forArray(int[] array){
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
    }

    public static void main(String[] args) {
        int[] array = {11,22,33,44,55};
        forArray(array);
    }
//从数组中查询元素的索引返回
    public static int findIndex(int[] array,int n){
        for (int i = 0; i < array.length; i++) {
            if(array[i] == n){
                return i;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] array = {11,22,33,44,55};
        int n = 33;
        int index = findIndex(array,n);
        if (index!=-1){
            System.out.println(index);
        }else{
            System.out.println("不在数组中!!");
        }
    }
//判断两个数组是否一样
    public static boolean equalArray(int[] a,int[] b){
        if(a.length!=b.length){
            return false;
        }
        for (int i = 0; i < a.length; i++) {
            if(a[i]!= b[i]){
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        int[] arrs1 = {1,2,3,4};
        int[] arrs2 = {1,2,3,4};
        int[] arrs3 = {1,2,3};
        int[] arrs4 = {2,3,4,5};
        System.out.println(equalArray(arrs1,arrs2));
        System.out.println(equalArray(arrs1,arrs3));
        System.out.println(equalArray(arrs1,arrs4));
    }

7、方法重载

​ 在同一个类中,出现多个方法名称相同,但是形参列表不同,那么这些方法就是重载方法

重载方法的作用:

​ 可读性号,方法名称相同提示是同一类型的功能,通过形参不同实现功能差异化选择。

​ 在调用方法的过程中会通过传参来判断使用哪个方法

//开发武器系统,要求如下
    //① 可以默认发一枚武器。
    //② 可以指定地区发射一枚武器。
    //③ 可以指定地区发射多枚武器。

    //默认发射一枚武器
    public static  void fire(){
        System.out.println("给米国来一发大宝贝");
    }

    //向指定地区发射一枚武器
    public static void fire(String location){
        System.out.println("给"+location+"来一发大宝贝");
    }

    //向指定地区发射多枚武器
    public static void fire(String location,int number){
        System.out.println("给"+location+"来"+number+"发大宝贝");
    }

    public static void main(String[] args) {
        fire();
        fire("漂亮国");
        fire("宇宙国",10);
    }

方法重载的识别技术

  • 只要是同一个类中,方法名相同、形参列表不同,那么他们就是重载的方法。
  • 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称

8、单独使用return关键字

  • return; 可以体积跳出并结束当前方法的执行;return关键字单独使用可以放在任何方法中。
 public static void main(String[] args) {
        System.out.println("开始");
        chu(10, 0);
        System.out.println("结束");
    }

    public static void chu(int a, int b) {
        if (b == 0) {
            System.err.println("您的数据有误!!不执行!!");
            return; // 直接结束当前方法chu
        }
        int c = a / b;
        System.out.println("除法结果是:" + c);
    }

开始");
chu(10, 0);
System.out.println(“结束”);
}

public static void chu(int a, int b) {
    if (b == 0) {
        System.err.println("您的数据有误!!不执行!!");
        return; // 直接结束当前方法chu
    }
    int c = a / b;
    System.out.println("除法结果是:" + c);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值