函数

本章, 我来给大家介绍一下什么是函数。首先,让我们来认识函数: 

函数存在的意义?

       函数主要解决的是那些重复的且具有独立功能的代码段。将这些具有独立功能的代码段可以进行再次封装,得到的就是函数。定义函数降低了代码冗余,将主函数进行适当的拆分,降低了主函数代码量,以便内存的优化。

 函数是如何定义的?

函数格式:

   访问限权  函数类型  返回值类型  函数名(参数列表){

                 函数体;

                 return  ;

}

解释:访问限权:指的就是函数的适用范围(内部和外部),如:public 、 protected 、 private;

           函数类型:指的就是函数类型分类,如:静态函数(static)、抽象函数(abstract)、本地函数(native)、等;

           返回值类型:指的是返回值的数据类型(可兼容),如:void 、int 、double等

           函数名:就是程序员给这一段代码自定义的名称(标识符)。

           参数列表:参数列表由若干个  (参数类型,参数名)  组成,主要用于接受外界给函数传递的参数。

           函数体:就是那些具有独立功能的代码块。

           return:仅仅表示结束当前函数,如果有返回值,则函数结束前将返回值传递给使用者。

 下面举一个例子来说明:

class Text{
      /*
      主函数的格式分析
        public   主函数是公开权限      
        static   主函数是静态函数
        void     该函数没有返回值
        main     主函数的名称
        String[] 表示的是一个字符串数组(数据类型)
        args     就是这个数据类型的变量名称
      */

      public static void main(String[] args){
               函数体;
               return;   //若没有返回值,ruturn可以不写。
                          //return也表示结束当前函数
      }
}

!!函数应在类中定义,不能在函数体内再定义另外一个函数。在C/C++/Python必须在函数调用之前,在Java中在函数调用之前之后都可以。

函数的传参:

实参:在调用函数的时候,给函数传递的数据(常量,变量)

形参:就是定义函数的时候,参数列表里的数据。

接下来我将用图解的方式来解释函数是如何传递参数的:

class text{
    public static void main(String[] args){
        int A=1;
        int B=2;
        int C=add(A,B);
        System.out.println(C);
    }
    public static int add(int a,int b){
        int c=a+b;
        return c;
    }
}

首先,这段代码定义了两个函数,一个是主函数,一个是add函数。刚开始是这样子:

 

 

当代码执行到  int C=add(A,B)  时,main()函数中A与B变量将内存空间中所存的地址分别复制给了add()函数中a,b变量的内存空间。add()函数中c变量经过计算,从常量池中得到3的地址,然后又将常量3的地址(或者说c变量所存的地址)返回给了主函数中C的内存空间。如图:

 

函数栈帧:

        每一次函数的调用都是一个过程,这个过程我们称之为函数的调用过程。这个过程需要为函数开辟栈空间,用于函数调用中临时变量的保存,保护。这块栈空间我们称之为函数栈帧。

 开始解释函数栈帧之前,我们必须知道栈是什么,栈可以比喻为弹夹,当我们装子弹的时候,第一个装的子弹一定是最后一个打出去的,最后装的子弹一定是第一个打出去的,即栈的特点是先进后出,后进先出。

接下来我还是用图解的方式来解释什么是函数栈帧:

 

class text{
    public static void main(String[] args){
        int A=1;
        int B=2;
        int C=add(A,B);
        System.out.println(C);
    }
    public static int add(int a,int b){
        int c=a+b;
        return c;
    }
}

    程序在没有执行之前,是这样子的:

      接下来执行程序,main()函数先进来,按照编码顺序往下执行,当执行到  int C=add(A,B); 时,add()函数进栈,开始执行add()函数。

         当add()函数执行完以后(即执行完return语句后),add()函数将c变量返回给main()函数中的C变量,然后出栈。接下来main()函数继续执行它自己的代码块,当语句执行完后,出栈。

       感谢各位大佬的观看!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值