java--函数部分总结

函数有很多内容:
函数(function):
|-- 什么是函数
|-- java如何定函数
|-- 函数的调用
|-- 函数的分类
|-- 局部变量
|-- 函数在内存的调用的本质
|-- 函数重载(overload)
|-- 函数递归

  1. 什么是函数
    编程语言中函数和数学中的函数不是一个东西,所以不用把Java中的函数与数学中的函数连接起来。
    函数:为了解决某一特定问题,具有名称的的代码集合。
    函数也就是现实中的一种行为动作!!!。
    什么叫代码集合,什么为现实中的一种行为动作呢
    解决问题某一问题而具有名称的代码的集合,比如我们要解决一个问题:比如我们想打印一些东西,我们要在主函数里声明,并输出,而如果利用函数,我们则可以调用函数,直接打印输出。

  2. Java如何定义函数
    访问修饰符 函数返回值的类型|void 函数名称([参数列表]) {
    // 函数体
    // return 返回值;
    }
    样例:在这里插入图片描述

    java中函数是属于类的!!必须定义在类中!!!所以说函数是类成员

    先把函数都定义静态函数,等学习了面向对象,再定义常规函数!!

    java中:静态方法没有办法直接调用非静态方法!!!只能调用静态方法

  3. 函数调用:
    函数是无法自己执行的!!!必须通过调用才可以执行!!!

    函数名称([参数列表]);
    比如:Java1(5),形如这样的格式,括号内可以是列表
    函数调用:
    在这里插入图片描述

  4. 函数的分类
    |-- 有没有参数:
    |-- 有参函数
    |-- 无参函数
    |-- 有没有返回值
    |-- 有返回值的函数
    |-- 无返回值的参数
    |–定义者
    |-- 系统函数
    |-- 第三者
    |-- 自定义函数
    为了便于区分函数的运用类型,我们可以把函数分为三大类七小类,这样可以更清晰的让我们懂得运用函数的方式方式方法,当遇到实际情况时能够灵活的运用。
    我们现在运用很多的自定义函数和系统函数解决问题,比如Math()函数,又比如自定义一个函数,把他名叫function1()。

  5. 局部变量:
    局部变量(本地变量):定义在函数中的变量叫做局部变量
    因为Java于c不同,他没有全局变量,只有局部变量。
    在这里插入图片描述
    比如这样,都是a,但是值不同。

  6. 函数在内存的调用的本质:

首先我们编译代码的时候,会先开辟一个栈,用来暂时储存我们要运行的代码,运行完之后再释放栈
在这里插入图片描述
在这里插入图片描述
形如这样的方法

  1. 函数重载
    |-- 什么是函数重载
    函数名称相同,函数的参数的个数或者类型不同,调用的时候,自动匹配对应的函数
    例如:在这里插入图片描述
    我们可以看到图中两个函数的名称都是一样的,但是函数内的形参不一样,从而导致输出结果不一样,而函数重载是强数据类型语言所特有的现象,而弱数据语言不具备函数重载。

  2. 递归
    递归:函数自身调用自身
    递归时的内存模型:
    优点:分治理念的体现,可以把非常复杂的问题,简单解决
    缺点:非常耗费内存,所以说,当栈被全部占用后,触发StackOverflowError异常!!!
    注意,可以使用java -X -Xss 大小, 来调整JVM的栈大小空间
    -Xms<大小> 设置初始 Java 堆大小
    -Xmx<大小> 设置最大 Java 堆大小

大家来看一个题就大概明白是递归的概念了:
比如算一个斐波拉契序列:
用代码来演示用循环和递归方法的区别:
在这里插入图片描述
很明显用递归方法来解决斐波拉契序列是很简单的事情,但是缺点也很明显,如果斐波拉契序列计算的数过大,就很难执行下去,因为递归实在是很耗费内存,所以我们在写代码的过程中要注意到内存的占用情况:
例如:在这里插入图片描述
大家可以看到,利用循环可以得到想要的结果,但是利用递归的方法程序就会报错,虽然我们可以改变栈的内存来使程序得以运行,但是为了成本考虑,我们还是不建议使用递归来解决问题,在某些问题可以,某些问题则不好,所以我们在写代码解决问题时要多考虑利弊。


版权声明:本文为Body63681原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。