函数
- 定义: 具备特定功能的一段独立的代码段。什么时候用到这个功能,什么时候调用。
- 作用: 解决重复性代码。
- 命名规范: 驼峰命名法(第一个单词首字母小写,从第二个单词开始首字母大写)。
- 调用者:主函数
- 自定义函数需要明确两点:
- 确定有没有参数
函数在实现功能的过程中是否用到了不确定的数据,用到了则有参数,没用到则没有参数 - 确定有没有返回值
函数功能的结果是不是一个数据,如果是一个数据则需要返回值,否则不需要
- 确定有没有参数
import java.util.Scanner; class Demo7 { //求两个整数的和 public static void add() { Scanner sc=new Scanner(System.in); int num1,num2,sum=0; System.out.print("请输入第一个整数:"); num1=sc.nextInt(); System.out.print("请输入第二个整数:"); num2=sc.nextInt(); sum=num1+num2; System.out.print("sum="+sum); } //主函数 public static void main(String[] args) { add();//函数调用 } }
调用过程
函数是需要被调用的,当调用函数时,会去执行函数内部的代码,内部的代码全部执行完,会再回到调用该函数的位置,继续向下执行。
语法
- 函数的重点是是实现功能,功能中用到的数据不是函数考虑的重点。
- 大括号中的内容是函数体
返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,... ) {
执行语句;
return 返回值;
}
void 函数名(参数类型 形式参数1,参数类型 形式参数2,... ) {
执行语句;
return;
}
参数
- 形参:形式参数,用来接收数据,函数调用完,形参和形参所在的函数出栈,内存释放
- 实参: 实际参数,要和形参的数据类型、个数、顺序都要保持一致,所以通过参数的方式来接收用到的数据(实参和形参的个数,顺序,类型都要一致)
import java.util.Scanner;
class Demo8
{
//求两个整数的和
public static void add(int a,int b)//形式参数
{
int sum=a+b;
System.out.print("sum="+sum);
}
public static void main(String[] args) //主函数:调用者
{
Scanner sc=new Scanner(System.in);
int num1,num2;
System.out.print("请输入第一个整数:");
num1=sc.nextInt();
System.out.print("请输入第二个整数:");
num2=sc.nextInt();
add(num1,num2);//实际参数
}
}
求打印结果 (数组内存、形参实参、函数内存)
class Demo2
{
public static void main(String[] args)
{
int[] arr=new int[2];
fun(arr);
System.out.println(arr[0]);//0
}
public static void fun(int[] arr)
{
arr=new int[5];
arr[0]=66;
}
}
- main函数中,引用数据类型引用变量arr并为其赋值一个数组地址;
- fun方法将接收到的实参arr引用的地址值赋给形参arr;
- 形参arr被赋值一个新的地址,形参引用的数组中的第一个数据被赋值,实参arr并无影响,依旧指向原地址;
- 函数调用结束,形参和其所在的函数一起出栈,内存立即释放;
- 形参指向的数组地址成为垃圾,等待垃圾处理线程回收;
- 打印实参所引用数组的第一个数据,为默认值0。
返回值
- 函数的运算结果,使用return来返回给调用者。
- 一个函数没有返回值也可以使用return,作用是结束函数
import java.util.Scanner;
class Demo9
{
//求两个整数的和
public static int add(int a,int b)//形式参数:用来接收数据
{
int sum=a+b;
return sum;
//System.out.print("sum="+sum);//无法访问的语句
}
public static void main(String[] args) //主函数:调用者
{
Scanner sc=new Scanner(System.in);
int num1,num2;
System.out.print("请输入第一个整数:");
num1=sc.nextInt();
System.out.print("请输入第二个整数:");
num2=sc.nextInt();
he=add(num1,num2);//返回到he
System.out.print("he="+he);
}
}
函数执行完,在栈中开辟的内存会立刻释放