函数有很多内容:
函数(function):
|-- 什么是函数
|-- java如何定函数
|-- 函数的调用
|-- 函数的分类
|-- 局部变量
|-- 函数在内存的调用的本质
|-- 函数重载(overload)
|-- 函数递归
什么是函数
编程语言中函数和数学中的函数不是一个东西,所以不用把Java中的函数与数学中的函数连接起来。
函数:为了解决某一特定问题,具有名称的的代码集合。
函数也就是现实中的一种行为动作!!!。
什么叫代码集合,什么为现实中的一种行为动作呢
解决问题某一问题而具有名称的代码的集合,比如我们要解决一个问题:比如我们想打印一些东西,我们要在主函数里声明,并输出,而如果利用函数,我们则可以调用函数,直接打印输出。Java如何定义函数
访问修饰符 函数返回值的类型|void 函数名称([参数列表]) {
// 函数体
// return 返回值;
}
样例:
java中函数是属于类的!!必须定义在类中!!!所以说函数是类成员
先把函数都定义静态函数,等学习了面向对象,再定义常规函数!!
java中:静态方法没有办法直接调用非静态方法!!!只能调用静态方法
函数调用:
函数是无法自己执行的!!!必须通过调用才可以执行!!!函数名称([参数列表]);
比如:Java1(5),形如这样的格式,括号内可以是列表
函数调用:
函数的分类
|-- 有没有参数:
|-- 有参函数
|-- 无参函数
|-- 有没有返回值
|-- 有返回值的函数
|-- 无返回值的参数
|–定义者
|-- 系统函数
|-- 第三者
|-- 自定义函数
为了便于区分函数的运用类型,我们可以把函数分为三大类七小类,这样可以更清晰的让我们懂得运用函数的方式方式方法,当遇到实际情况时能够灵活的运用。
我们现在运用很多的自定义函数和系统函数解决问题,比如Math()函数,又比如自定义一个函数,把他名叫function1()。局部变量:
局部变量(本地变量):定义在函数中的变量叫做局部变量
因为Java于c不同,他没有全局变量,只有局部变量。
比如这样,都是a,但是值不同。函数在内存的调用的本质:
首先我们编译代码的时候,会先开辟一个栈,用来暂时储存我们要运行的代码,运行完之后再释放栈

形如这样的方法
函数重载
|-- 什么是函数重载
函数名称相同,函数的参数的个数或者类型不同,调用的时候,自动匹配对应的函数
例如:
我们可以看到图中两个函数的名称都是一样的,但是函数内的形参不一样,从而导致输出结果不一样,而函数重载是强数据类型语言所特有的现象,而弱数据语言不具备函数重载。递归
递归:函数自身调用自身
递归时的内存模型:
优点:分治理念的体现,可以把非常复杂的问题,简单解决
缺点:非常耗费内存,所以说,当栈被全部占用后,触发StackOverflowError异常!!!
注意,可以使用java -X -Xss 大小, 来调整JVM的栈大小空间
-Xms<大小> 设置初始 Java 堆大小
-Xmx<大小> 设置最大 Java 堆大小
大家来看一个题就大概明白是递归的概念了:
比如算一个斐波拉契序列:
用代码来演示用循环和递归方法的区别:
很明显用递归方法来解决斐波拉契序列是很简单的事情,但是缺点也很明显,如果斐波拉契序列计算的数过大,就很难执行下去,因为递归实在是很耗费内存,所以我们在写代码的过程中要注意到内存的占用情况:
例如:
大家可以看到,利用循环可以得到想要的结果,但是利用递归的方法程序就会报错,虽然我们可以改变栈的内存来使程序得以运行,但是为了成本考虑,我们还是不建议使用递归来解决问题,在某些问题可以,某些问题则不好,所以我们在写代码解决问题时要多考虑利弊。