Java函数基础

函数

一、函数

  1. 函数:执行特定功能的一段程序代码,同时每个功能被命名,通过名字被重复的使用

  2. 函数的使用流程:

    函数的声明:确定函数的功能,确定函数名
    函数的调用:通过函数名直接使用对应功能
    
  3. 函数定义的位置:定义在类以内,与main函数并列的位置(类以内,其他函数以外的地方)

  4. 注意:Java虚拟机运行时,程序的入口永远是main函数

二、函数的定义【开发应用重点】

  1. 语法:

    public static 返回值类型 函数名(形式参数列表){
        //函数的实现(函数体)
    }
    函数的三要素:返回值类型、函数名、形参列表
    函数的定义:函数的声明和函数实现
        声明:public static 返回值类型 函数名(形参列表)
        实现:{}--->代表函数具体实现功能的代码
    
  2. 函数名

    (1)望文生义、驼峰命名法(第一个单词首字母小写,其余单词首字母大写)
    (2)在目前类中避开重名的函数名
    
  3. 形式参数:

    1)语法:在函数定义的()中
    	public static void 函数名(数据类型 参数名){}2)应用:形参相当于函数内部的局部变量,可以直接通过参数名在函数内部直接调用
    (3)形参的作用:函数和调用者之间的约定,同时用于接受实参传递的数据
    (4)形式参数列表的长度:0~n
        没有参数的函数称为:无参函数,无需调用者传递任何数据
        有参数的函数称为:有参数函数,需要调用者根据参数约定传递实参
    
  4. 返回值

    (1)返回值类型为:void,代表函数没有返回值,函数无需给调用者返回任何结果
    				代表没有 return xxxxx;
    				但是可利用return ;结束当前函数
    (2)返回值类型为:8种基本数据类型或是对象类型,代表函数值有返回值,函数必须给调用者返回对应的结果;函数必须有return   				 xxx;语句;
    (3)return的细节:
    		a.如果return语句用于分支/循环语句中,必须保证每一个分支都有return语句;
    		b.一个函数执行时,只能执行一个return语句,只能执行到return语句
    (4)return的作用:
    		a.将函数的返回值返回给调用者
    		b.结束当前函数
    

三、函数的调用【开发应用重点】

  1. 函数调用:通过函数名调用函数,执行对应功能

    语法:函数名();
    注意:一个函数通过函数名被多次重复使用
    
  2. 带有参数的函数调用;

    (1)注意:函数调用时传递的参数被称为实际参数,简称实参
    (2)函数名(实际参数)
    (3)实际参数作用:给形式参数赋值
    (4)注意:形参给实参赋值时,数据类型、顺序、个数必须和形参形式一致
    
  3. 带有返回值的函数调用

    (1)语法:
    		数据类型 变量名 = 函数名(实参);
    		注意:接收返回值的变量数据类型取决于函数的返回值类型
    (2)返回值处理的几种情况:
    		a.用对应类型的变量接收函数的返回值结果,可以通过变量直接使用返回值结果---->返回值被多次使用时采用此处理方式
    		b.如果对函数的返回值结果只使用一次,可以直接在使用的地方调用函数
    		System.out.println(add(3,7));
    		c.函数有返回值,但是调用者对返回值不做任何处理,后期具体应用场景
    
    //定义一个函数,接收两个数据,并返回两个数据的和,情况a
    public class Test{
        public static void main(String[] args){
            int s = add(3,7);
            System.out.println(s);
            if(s%2==0){
                System.out.println("3和7的加和是10");
            }
            public static int add(int a,int b){
                int sum = a+b;
                return sum;
            }
        }
    }
    
    //情况b(只使用一次)
    public class Test{
        public static void main(String[] args){
            System.out.println(add(3,7));
            public static int add(int a,int b){
                int sum = a+b;
                return sum;
            }
        }
    }
    
    //情况c,不调用
    public class Test{
        public static void main(String[] args){
       		add(3,7);
            }
            public static int add(int a,int b){
                int sum = a+b;
                return sum;
            }
        }
    }
    
    //例:定义一个函数,select接收两个整数,判断两个整数的和是否大于20小于50,是 返回true,否 返回false
    public class Test{
        public static void main(String[] args){
            boolean r = select(23,20);
            System.out,ptintln(r);
        }
        public static boolean select(int a, int b){
            int sum = a+b;
            if(sum>20 && sum<50){
                return true;
            }else{
                return false;
            }
        }
    }
    
    //例2:定义一个函数test,接收三个整数,将最大值返回
    public class Test{
        public static void main(String[] args){
            System.out.println(test(3,7,3));
        }
        public static int test(int a,int b,int c){
            int max=a;
            if(max<b){
                max=b;
            }
            if(max<c){
                max= c;
            }
            return max;
        }
    }
    

四、函数的作用【了解】

  1. 减少代码的冗余

  2. 提高代码的复用性

  3. 提高代码的可读性

  4. 提高代码的维护性

  5. 便于分工,协同开发

    public class Test{
        public static void main(String[] args){
            System.out.println("123546");
            m1;									//一旦发生函数的调用,需要先执行被调函数内部的代码;执行结束或是遇到	
            System.out.println("1234567");		  //return语句时,则返回到调用位置
        }
        public static void m1(){
            System.out.println("012");
            System.out.println("456");
        }
    }
    

五、函数的嵌套调用

  1. 概念:在被调用函数内部调用了其他函数,这种调用现象被称为函数的嵌套调用

  2. 执行原理:程序在执行过程中,遇到函数调用,则优先执行被调函数内部的代码,被调函数执行结束或是遇到return,则返回到调用位置(有返回带着返回值回到调用位置),继续执行函数调用后续程序代码。

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5ntzmZLH-1641285288251)(C:\Users\31999\Desktop\预热资料\1.jpg)]
  3. 内存:

    (1)栈空间:描述函数/方法的调用模型,一个函数被调用会在栈空间分配对应的栈帧(stact fram)空间,每个函数的栈帧空间记录在此函数中,局部变量表、操作数栈、函数出口等信息,函数调用一旦结束,则对应栈帧空间也一并被收回
    
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M0oh6lLV-1641285288253)(C:\Users\31999\Desktop\预热资料\2.jpg)]

七、递归

  1. 递归:在一个函数中自己调用自己的函数,这种调用机制叫做递归

  2. 如果递归调用时,没有为调用设置一个出口,则会出现无穷递归的现象

    无穷递归一旦出现,则栈空间会被占满,则栈溢出,则Java虚拟机(jvm)会停止工作,报错

  3. 递归思想

    (1)递进:每一次的递进都比上一次要简单,直到简单的不能再简单为止,找到对应的出口
    (2)回归:基于出口,逐层往回返,直到递进的最顶层
    
    //计算5的阶乘
    public class Test{
        public static void main(String[] args){
            //计算5的阶乘
            System.out.println(jieCheng_5(5));
        }
        // 计算5的阶乘
        public static int jieCheng_5(int n){
            return n*jieCheng_4(n-1);
        }
        //计算4的阶乘
        public static int jieCheng_4(int n){
            return n*jieCheng_3(n-1);
        }
        //计算3的阶乘
        public static int jieCheng_3(int n){
            return n*jieCheng_2(n-1)}
        //计算2的阶乘
        public static int jieCheng_2(int n){
            return m*jieCheng_1(n-1)}
        //计算1的阶乘
        public static int jieCheng_1(int n){
            return 1;
        }
    }
    
    
    //将上述代码可以简化成如下代码:
    public class Test{
        public static void main(String[] args){
            System.out.println(jieCheng(5));
        }
        public static int jieCheng(int n){
            if(n==1) return 1;
            return n*jieCheng(n-1);
        }
    }
    
  4. 递归案例:递归解决阶乘问题

    public class Test{
        public static void main(String[] args){
            System.out.println(fact());
        }
        public static int fact(int n){
            if(n==1) return 1;
            int result = n*fact(n-1);
            return result;
        }
    }
    
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值