来自一枚菜鸟的Java学习总结——Java方法(下)

Java方法

3、关于方法在计算机中的实现(续)

下面通过一段Java递归代码和概念图说明Java方法在JVM虚拟机上运行时在内存空间上的实现原理

简单的递归函数

import java.util.Scanner;

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

        System.out.println("main方法");
//        Scanner sc = new Scanner(System.in);
//        int x = sc.nextInt();
//        int z = sc.nextInt();
          int x = 3;
          int y = 1;
          int z = 2;
          System.out.println(getRes(x,y,z));
    }

    public static int getRes(int x,int y,int z){
        System.out.println("getRes方法");

        if(x != z){
            x = x - y;
            return getRes(x,y,z);
        }

        return 666;
    }
}
//整个代码执行后的结果
//main方法
//getRes方法
//getRes方法
//666
//
//下面是println()方法在JVM上实现的模拟图

在这里插入图片描述

从上图我们可以知道JVM上运行的方法必定是位于栈内存空间即JVM只执行位于栈顶的“活跃”方法
对于不执行的方法,我们可以认为它不活跃
接上图我们继续模拟整个代码的执行概念图(省略println()方法,仅展示传参后getAns()方法在栈内存空间执行的概念图)

第一个部分的mian()栈帧内出现了标注错误,应该是第三部分那样的,可能会有一点点影响但是结合代码还是影响不大的,嘿嘿

当然在方法出栈后该方法占用的内存空间也将被释放
这也能解释为什么不同的方法中可以定义相同的变量名
在上述的递归程序走我们传递的参数和返回的值是int型的
我们在处理实际问题时并不可能一直处理一种类型的数据
而应该是对于多种类型数据并存的一类问题的解决方法
下面就是解决这一问题的方案

4、方法的重载

方法的重载( Overloading )

In my opinions, 应该是在①同一个类中,②方法名相同,③参数列表不同的多个方法被称为方法重载,其中参数列表不同又有 a:参数类型不同;b:参数的个数不同;c:参数传递的顺序不同;

具体的代码展示

public class OverLoad {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        int c = 300;
        double a1 = 100.00;
        double b1 = 200.00;
        double c1 = 300.00;
        float a2 = 100.00f;
        float b2 = 200.00f;
        System.out.println(getAns.getAns(a,b));
        System.out.println(getAns.getAns(a2,b2));
        System.out.println(getAns.getAns(a1,b1,c1));
        System.out.println(getAns.getAns(a,a1));
        System.out.println(getAns.getAns(b1,a));
    }

}
class getAns {
    public static int getAns(int a,int b){
        return a + b;
    }

    public static double getAns(double a,double b,double c){
        return a + b + c;
    }

    public static float getAns(float a,float b){
        return a + b;
    }

    public static double getAns(int a,double b){
        return a + b;
    }

    public static double getAns(double a,int b){
        return a + b;
    }
}
/*输出结果
300
300.0
600.0
200.0
300.0
*/

以上就是我在学习Java方法中的收获,当然可能还有一些收获自己也还没收获住,嘿嘿

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值