java基础 学习笔记13

本文探讨了Java中的方法重载机制,包括其优点(代码美观,方便调用)、重载条件(方法名相同,形参列表不同),以及何时使用方法重载。还提到了递归调用的概念,强调了递归中栈内存溢出的风险,并提倡在实际开发中谨慎使用递归,优先考虑循环替代。
摘要由CSDN通过智能技术生成

方法重载


首先看以下代码并分析缺点

不使用方法重载机制时

package chapter2;
/*
    当前代码先不使用方法重载,分析一下这样代码的缺点
    缺点一 : 代码不美观
    缺点二 : 不方便调用,程序员需要记忆更多的方法名
 */

public class overLoad01 {
    public static void main(String[] args) {
        sumInt(10, 20);
        sumDouble(3.0, 2.0);
        sumLong(10L, 20L);
    }

    public static  void sumLong(long a, long b){
        long c = a + b;
        System.out.println(a + " + " + b + " = " + c);
    }

    public static  void sumDouble(double a, double b){
        double c = a + b;
        System.out.println(a + " + " + b + " = " + c);
    }

    public static  void sumInt(int a, int b){
        int c = a + b;
        System.out.println(a + " + " + b + " = " + c);
    }

}

使用方法重载机制时

package chapter2;
/*
   使用java语言中的方法重载机制。并分析程序的优点
   在java语言中允许在一个类中定义多个方法,这些方法的名字可以一致
   
   优点:
        1. 代码美观
        2.方便调用,程序员需要记忆的方法多了
 */

public class overLoad02 {
    public static void main(String[] args) {
        sum(10, 20);
        sum(3.0, 2.0);
        sum(10L, 20L);
    }

    public static  void sum(long a, long b){
        long c = a + b;
        System.out.println(a + " + " + b + " = " + c);
    }

    public static  void sum(double a, double b){
        double c = a + b;
        System.out.println(a + " + " + b + " = " + c);
    }

    public static  void sum(int a, int b){
        int c = a + b;
        System.out.println(a + " + " + b + " = " + c);
    }

}

重载的条件

当一个程序满足怎样的条件时,代码就构成了方法重载呢?

条件:
1. 在同一个类中
2. 方法名一致
3. 形参列表不同:
1. 类型不同算不同
2. 顺序不同算不同
3. 个数不同算不同

方法重载机制时编译阶段的机制,在编译阶段就已经完成了方法的绑定


什么时候使用方法重载呢?

在以后的开发中,在一个类中,如果两个方法功能相似,建议将方法定义为同一个名字。
从而减轻开发压力


方法的递归

  1. Q:什么是方法的递归调用 A:方法自己调用自己
  2. 递归如果没有结束条件的话,会出现栈内存溢出的错误: StackOverFlowError
  3. 所有的递归调用必须有结束条件
  4. 在实际开发中,使用递归调用时,即使有时候结束条件是存在的,而且结束条件也是合法的但仍然会发生栈内存溢出的情况。这可能是因为栈递归太深,栈内存不够了导致。
  5. 递归谨慎使用,能用循环用循环,循环不涉及压栈等消耗内存的处理
package chapter2;

public class recursion {
    public static void main(String[] args) {
        recursion();

    }

    public static void recursion() {
        System.out.println("recurson begin");
        //方法的递归调用
        recursion();
        System.out.println("recursion begin");
    }


}

在这里插入图片描述

由于没有执行return语句,一直压进栈中,即使内存再大,也会有爆内存的一天
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值