java基础 —— 方法执行内存分析+方法重载+方法递归

一、方法

  1. 方法调用: 类名.方法名(实参)
  2. .方法定义在类中,一个类中可以定义多种方法,但是方法体内不能够再定义方法。
  3. 方法只定义不调用是不会执行的,并且在JVM(java虚拟机)中也不会给该方法分配“运行所属”的内存空间,只有在调用这个方法的时候,才会动态的给这个方法分配所属的内存空间。
    4.一个方法有返回值的时候,调用此方法可以接收返回值也可以不接收返回值,但是一般情况下是接收返回值的。

二、JVM(java虚拟机)

Java虚拟机主要包括三块内存空间:方法区内存堆内存栈内存
(1)方法区内存:存储代码片段(方法代码片段属于.class字节码文件的一部分,在类加载的时候,JVM将它放在了方法区当中,所以JVM三块主要的内存空间中方法区内存最先有数据,存放了代码片段

(2)栈内存:分配方法运行的所属内存空间
在这里插入图片描述
①栈帧永远指向栈顶元素
②栈顶元素永远处于活跃状态,其它元素静止
③术语: 压栈/入栈/push —— 弹栈/出栈/pop

(3)画图表示虚拟机处理代码的过程

public class Test4 {
    public static void main(String[] args){
        int a=1;
        m(a);
        System.out.println(a);
    }

    private static int m(int b) {
        b++;
        return b;
    }
}

在这里插入图片描述

三、方法重载(Overload)

对待功能相似的方法名定义一样
(1) 方法重载条件①在一个类中②方法名相同③参数列表不同④类型不同
(2) 方法重载只和方法名参数类型有关

public class Test1 {
    public  static void main(String[] args){
        m(10);
        m('1');
        m(10.0);
    }
    private static int m(int a){
        System.out.println(a);
        return a;
    }
    private static double m(double a){
        System.out.println(a);
        return a;
    }
    private static  char m(char a){
        System.out.println(a);
        return a;
    }
}

四、方法递归(实际上就是入栈出栈的过程)

(1)递归就是方法自身调用自身
(2)递归十分占内存,能不用则不用
(3)Error:java.lang.StackOverflowError 栈内存溢出错误
错误无法返回,只有一个结果,就是JVM停止工作
(4)递归必须有结束条件,否则一定会发生栈内存溢出错误。递归即使有了争取的结束条件,也可能发生栈内存溢出错误,因为递归的太深了。

举例:计算1-N的乘积

普通方法

public class Test2 {
    public  static void main(String[] args) {
        System.out.println("请输入您要计算到的N:");
        Scanner s =new Scanner(System.in);
        int n=s.nextInt();

        int result = 1;
        for(int i=1;i<=n;i++){
            result *= i;
        }
        System.out.println("1-N的乘积为"+result);
    }
}

采用递归方法(面试题经常问到

public class Test3 {
    public  static void main(String[] args) {
        System.out.println("请输入您要计算到的N:");
        Scanner s =new Scanner(System.in);
        int n=s.nextInt();
        int result=m(n);
        System.out.println(result);
    }

    private static int m(int n) {
        if(n==1){
            return 1;
        }
        return n*m(n-1);
    }
}
  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值