说到函数有些人就要问了,Java中函数的存在有什么意义呢?
下面就让我给大家总结一下函数在Java中存在的意义:
1.函数主要解决的是那些重复的且具有独立功能的代码段
2.将这些具有独立功能的代码可以进行再次封装 封装出来的东西就成为是函数
3.很明先的优势,降低了代码冗余复用函数即可,降低了主函数的代码量,将主函数进行适当的拆分,以便内存优化
4.就是将函数模块化
说完了它存在的意义接下来我们来总结一下函数的定义:
函数是定义在类中的具有特定功能的一段独立小程序,函数也称之为方法。
那设定函数的作用是什么呢?为了提高代码的复用性,对代码进行抽取。将这个部分定义成一个独立的功能,进行再次封装,以便再次或多次使用。 java中对功能的定义通过函数来实现的。
相比于其他方法,设定函数有什么优势?通过下图我们可以发现,函数可以将代码进行适当的拆分,这样就降低了主函数的代码量,并且复用函数可以大大降低代码冗余,以便内存优化。
补充:
/*
* 函数的构成:修饰词 返回值 函数名(参数列表){//函数体
* 执行的代码
* return 返回值;
*
* }
*
* 修饰词:确定当前函数的使用范围,现在使用的是public,暂时不考虑
* 返回值类型:告诉别人当前函数返回值的类型,返回值可以没有,但是不能什么都不写,如果有返回值鞋型对应的类型,如果没有用void
* 函数名:是当前函数的名字,不能不写,命名规则:遵守小驼峰规则(可以由多个单词组成,除第一个单词外,其他每个单词首字母大写)
* 要求:尽量做到见名知意
* 参数列表:执行函数式传入函数的数据,可以有零个或多个,多个参数之间以,隔开,如果没有参数函数名后面的小括号不能省略
* 函数体:函数真正实现功能的地方
* 执行语句:实现的功能
* return:是一个动词,向函数外抛出返回值的意思,类型与返回值类型一致
* 注意:1.如果没有返回值,不用写return,如果有return后面只能返回一个值
* 2.还有结束的意思,return后面的代码不会执行
*/
总结:我们在创建函数的时候,要求每一个函数只完成一个功能
下面我们就以一个简单的例题来让我们了解函数吧!
import java.util.Scanner;
// 求两个数的和?
//注意:
//1.函数的定义不能嵌套,函数的调用可以
//2.我们要想使用定义好的函数,必须通过调用实现
//3.函数调用的基本构成:函数名+()
//4.通常在面向过程语言中我们称为函数,在面向对象语言中我们称为方法
//函数的调用
class Test01{
public static void main(String[] args) {
int sum = qiuhe();
System.out.println(sum);
}
public static int qiuhe() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入a:");
int a = scanner.nextInt();// 输入a
System.out.println("请输入b:");
int b = scanner.nextInt();// 输入b
return a + b;
}
}
import java.util.Scanner;
/*
* 用函数求两个数的最大值
* 两个数最大值,使用三目运算符
*/
public class Test02{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入a:");
int a = scanner.nextInt();// 输入a
System.out.println("请输入b:");
int b = scanner.nextInt();// 输入b
int max = isMax(a, b);
System.out.println(max);
}
public static int isMax(int a, int b) {
int max = a > b ? a : b;
return max;
}
}
下面我来为大家介绍一下函数的分类:
- 有返回值有参数
- 有返回值无参数
- 无返回值有参数
- 无返回值无参数
注意:
有返回值的函数,参与运算、输出、赋值 ; 无返回值的函数,仅仅调用.
下面我们来了解一下函数的传参:
形参(形式参数):就是定义函数的时候,参数列表当中的数据,叫做形参
实参(实际参数):就是在调用函数的时候,给函数传递的数据(常量,变量)叫做实参
实参表面上是将一个数据常量传递给了形参,其实不是,而是将常量在常量池中的地址(常量的地址)传递给了形参,还有一种是将对象在堆内存中的地址传递给了形参.
既然是函数,那么肯定会有变量,在函数中创建的变量我们就叫做局部变量。局部变量只在当前函数中起作用。形式参数一定是局部变量,但是局部变量不一定都是形式参数.
下面我们用一段代码来简单了解一下传参的基本流程:
main(){
int a=4;
int b=4;
double c=pow(a,b);
}
pow(a,b){
...
return sum;
)
在函数调用其他函数时,等到其他函数运行完毕后主函数接着运行,这就是就引出了函数栈.
函数的运行是基于栈内存的
栈是Java语言中非常重要的一个知识点,那什么是栈呢?我们可以把栈比作是一个弹夹,子弹从弹夹上面依次装入,然后子弹要从弹夹的上面至下依次装入枪膛中.那么函数中的return自然就相当于将子弹发射出去,也就是我们说的函数运行完后返回函数值,然后此函数弹出栈内存——弹栈。
下面我们看一个弹栈的动态图解来了解弹栈:
最后让我们来了解一下函数的重载.
重载的概念:
在同一类中,允许存在一个以上的同名函数,只要他们的参数个数或参数类型不同即可.
重载的特点:
与返回值类型无关,只看参数列表.
重载的好处:
方便阅读,优化了程序设计.
重载的实例
//返回两个整数的和
int add(int x,int y){
return x+y;
}
//返回三个整数的和
int add(int x,int y,int z){
return x+y+z;
}
//返回两个小数的和
int add(double x,double y){
return x+y;
}