1、函数的格式定义
格式:
函数的修饰符 函数的返回值类型 函数的名( 接收的参数类型 参数名 , 接收的参数类型 参数名 ....)
{
函数体代码;//具体完成相应功能的代码。
return 返回值; //返回值的类型必须是之前定义函数时所声明的函数的返回值类型
}
定义函数的细节:
1)函数的修饰符:用来修饰函数的一些符号(关键字)。目前针对函数的修饰符,我们先照抄main方法。
2)函数的返回值类型: 当我们在程序封装了一段独立的代码之后,如果这段代码运行完,需要把一个具体的结果返回给调用者,这时当前这个函数的返回值类型就需要和返回的那个数据保持一致。如果这个函数调用完之后,不需要给调用者返回任何数据,这时函数的返回值类型必须写void。
注意:如果需要返回,则用return关键字。
3)函数的名:它就是前面学习的标识符。我们给独立代码命名需要遵守标识符的规则。就是封装的功能名字。(开发人员自己起名称)。
4)参数列表:当定义一个功能(函数、方法)的时候,需要接受调用者传递进来的数据时,就需要在定义函数的时候,书写对应的参数。
参数:参加运算的数据。
参数的类型:就是前面学习的变量的类型。
参数名:其实就是变量名。
如果不需要接受参数,这时小括号中的参数可以省略,但是小括号不能省略。
5)函数体:就是在函数的大括号中书写代码,这里的代码和以前学习时在main方法中写的代码没有区别,以前在main方法中可以写的任何代码,都可以在自己定义的函数体中书写。
原则:在书写代码的时候,每段代码如果是一个独立的功能,这时需要把这些代码单独的抽离到一个函数中,不要把所有代码全部书写在main方法中。
函数定义实例:
2、函数执行过程
注意:1)当jvm在执行任意一个函数时,遇到return关键字,这时不管该函数的代码是否执行完成,当前这个函数都会结束;
2)在函数执行中遇到return需要返回,具体的返回位置就是在调用这个函数的地方。
3、函数的内存加载
函数执行是JVM的内存加载问题:
使用javac 启动编译器,检查源代码中是否有语法错误,没有错误会编译之后生成class文件。
使用java 命令启动JVM,然后JVM会分配内存,把class文件加载内存中。class文件加载完成之后,开始在class文件中找main方法运行。
函数在内存中加载图解如下所示:
注意:所有的函数都必须在栈内存中运行。
而jvm只会运行处于栈内存顶部的函数。
函数被加载到栈内存的动作,称为函数的压栈(入栈、进栈)。
函数执行完之后就会从栈中消失(函数的弹栈,或者叫做出栈)
4、函数的使用细节
1、函数的返回值问题:
一般在我们定义函数的时候,肯定是先有需求,然后需要根据这个需求进行分析,在分析的过程中,如果需要把函数运行之后的结果告诉调用者,这时函数必须有返回值,并且在函数体中必须书写return语句,把具体的值返回。
如果函数运行完之后,不需要把结果告诉调用者,这时函数不需要返回任何数据,那么在函数体中可以不写return数据。
问题一:在一个函数中能不能返回多个值?
不能。在一个函数中,一个return语句,只能返回一个值。
问题二:当一个函数没有返回值的时候,可以书写return语句吗?
可以。一个函数没有返回值,返回值类型一定是void ,但在函数中可以书写return语句,这时的return后面直接写分号,不要写任何数据。
例如: return ; (分号)
这样的return,只是为快速的结束函数。
2、参数问题:
定义功能的时候,需要接收参数,这时在功能上一定要定义变量,然后接收具体的参数,这时参数的类型必须和传递的数据一定要保持一致。如果不需要接受数据,就可以省略参数。
5、函数的重载
重载:函数的重载,要求必须在同一个类(程序)中,有多个同名的函数,它们的参数列表不同,这时我们称为函数的重载。
注意:
- 要求必须在同一个类中(程序)。
- 要求函数的名称必须相同
- 要求函数的参数列表必须不同。
参数列表不同,主要针对的参数的个数,类型,顺序不同。
由于函数可以在同一个类出现重载的现象,因此在调用的时候,具体应该执行哪个函数,需要根据调用者传递的实际参数决定。
结论:重载就是在一个类中具有相同名称的函数,但是这些相同函数的参数列表不能相同。
实例:
为了完成计算多个int数据的和值,那么我们在同一个程序(类)中书写了多个同名的函数。而这些函数我们称为函数在本程序中被重复定义,即就是函数的重复载入。
6、函数命名规范
函数名的规范:
类名:多个单词每个单词首字母大写。
变量名:多个单词,从第二个单词开始,首字母大写。
函数名:它的书写规则和变量名一致。