Java中的函数(方法)
今天我们来学习一下Java当中的函数,那么在学习之前我们首先要知道为什么我们要在Java中学习函数呢?
在知道为什么要学习函数之前,我们首先要知道的是Java中函数这个概念。
函数(方法):定义在类中的具有特定功能的一段独立小程序。函数也称之为方法。
在实际当中,我们总是会遇到一些重复性的问题,这个时候去重复的写这些代码,那么势必会造成代码冗余占用内存空间这个问题,而且写出来的代码也不美观简洁,所以这个时候我们就要引入函数来解决这个问题。这个时候有人可能就会问了,循环不是也可以解决代码重复这个问题吗?与循环不同的是,函数是一个独立的代码块,而它本身具备有一些独立的功能。
函数的基本格式为:
函数类型(权限) 返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2,)
{ 执行语句;
return 返回值;
}
函数类型:比如public,private等。
返回值类型:函数运行后结果的数据类型。
函数名:使用者给函数自定义的名称,也就是标识符。
参数类型:形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:是具体的数据(常量、变量),在调用函数时,发送给函数体中的形式参数。
注意:在这里我们就可以说发送具体数值的一方就是实际参数,而接收数值的一方就是形式参数。
return:用于结束当前函数。
- 返回值:就是指这段具有独立功能的代码快的计算结果,该值返回调用者。
注意:
函数中有无返回值需要通过void关键字来定义。
函数运算后,如果没有具体的返回值时,这时返回值类型用一个特殊的关键字来标识。
该关键字为void。void代表的是函数没有具体的返回值类型。
当函数的返回值类型为void时,函数中的return语句可以省略不写。
- 函数的参数传递
在调用函数的时候,实际参数传递给了形式参数。
这里需要注意的是:参数传递的并不是具体的数值,本质上传送的是常量在常量池中的地址或者对象在堆内存中的地址。
- 函数运行时的本质
函数运行的本质其实是基于栈内存的
栈是一个先进后出的容器结构。
我们可以将一个栈理解为一个弹夹,子弹按照123456的顺序进入弹夹,而按照654321的顺序被打出。
而在函数运行时,我们就可以将一个函数理解为一个子弹(函数帧/栈帧),位于栈顶的主函数肯定时第一个进栈的。
代码实现如下:
class Demo{
public static void main(String[] args){
int a=4;
int b=4;
double c=pow(a,b);
System.out.println(c);
}
public static double pow(double a,int b){
if(b==0){
return 1;
}
double sum=1;
//2^4
for(int i=1;i<=Math.abs(b);i++){
sum*=a;
}
return b>0?sum:1/sum;
}
}
我们可以通过一个动图来观察一下整个代码的运行流程:
最后,一个小小的注意点 :
目前为止,定义函数的时候 ,只需要考虑返回值类型、函数名、参数列表、函数体、返回值 。
切记:千万不要在函数的内部创建函数,函数必须在类里面,函数们之间是平级关系。
在C/C++/Python当中 函数的定义必须在函数调用之前;而在Java当中 随便,之前、之后都可以。