函数的详解

上一篇文章,我大概带大家了解了一下函数,这次,我来详细的介绍下函数

函数的分类

我就先来说一下函数的分类,函数根据返回值和参数大致可以分为以下几位:

  • 有返回值有参数
  • 有返回值无参数
  • 无返回值有参数
  • 无返回值无参数

这里我们要注意几点:
有返回值的函数,主要用于参与运算、输出、赋值,等地方。
但是如果是无返回值的函数,那就仅仅调用而已,不能参与运算。

函数传参

函数的传参也分为几类

  • 实际参数-实参
    实际参数就是在调用函数的时候,给函数传递的数据(常量,变量),我们把这种叫做实参
  • 形式参数-形参
    形式参数就是定义函数的时候,参数列表当中的数据,我们把他叫做叫做形参

那我们就有一些小问题了:实参是将什么东西传递给了形参?
通常被传过去的就是:常量在常量池中的地址和对象在堆内存中的地址

局部变量
局部变量是什么呢?大体来说但凡是在函数中创建的变量,我们就称之为是局部变量,局部变量有一个作用域,局部变量的作用域仅仅在当前的函数当中。
那局部变量在函数里是什么呢?
一般来说,形式参数一定是局部变量。

函数栈

我们都知道,函数的运行是基于栈内存的,栈是一个先进后出的一个容器结构。
在这里插入图片描述
这是我自己画的一个图,我们可以把栈看成是子弹,玩过fps游戏的都知道,子弹是按顺序123456进栈,也是按顺序出栈654321,栈也是这个顺序。
我们可以将每一个函数理解为是子弹(函数帧/栈帧),位于栈顶的函数帧优先运行的
那么在我们的程序中,主函数绝对是第一个进栈的.
return结束当前函数 ,这就表示的是当前函数弹栈,从这个栈出去。

函数的重载

什么是函数的重载?
函数的重载指的就是同一个类中出现的同名函数,这个函数与权限没关系,与返回值类型没关系,与参数名没关系,只有和参数类型的排列组合有关系(注意一下参数类型的向下兼容问题)
我用一串代码可以给你说一下:

class Test01{
    public static void main(String[] args){
        int a=3;
        int b=4;
        System.out.println(add(a,b));
        double d=3.14;
        double e=5.44;
        System.out.println(add(d,e));
        System.out.println(add(3,3.14));
        System.out.println(add(3.13,9));
    }
    //对两个小数进行加法运算
    public static double add(double c,double d){
        return c+d;
    }
    public static String add(String a,String b){
        System.out.println("String+String");
        return a+b;
    }
    public static double add(int a,double b){
        System.out.println("int+double");
         return a+b;
    }
   public static double add(double a,int b){
       System.out.println("double+int");
       return a+b;
  }
   public static double add(double a,double b){
        System.out.println("double+double");
        return a+b;
    }
   //对两个整数进行加法运算
   public static int add(int a,int b){
         System.out.println("int+int");
       return a+b;
  }
}

这串代码就是函数的重载:重载的好处就在于我们可以扩展函数的功能(函数重名,但是参数类型不一样,执行内容也可以不一样)
但是函数重载总有个先后顺序,这就是程序寻找适当函数的流程:
1.看是否有确切的参数定义 int+int 查看是否有(int,int)
2.看是否有可兼容的参数定义 int+int 查看是否有(double,double)
3.如果可兼容的参数定义有多个int+int,(double,int)或(int,double) 此时报错 引用不明确
这都是要注意的使用方法,扫不注意,就有可能报错,不能有引用不明确的参数,这就是函数重载。

今天的分享到此结束,感谢您的阅读,点个赞行不行。

发布了38 篇原创文章 · 获赞 51 · 访问量 1204

猜你喜欢

转载自blog.csdn.net/xweiwxh/article/details/104329458
今日推荐