函数(方法)以及方法(函数)的重载
一.函数
1.函数的定义:
如果一个功能的代码被复用起来,那么这时候可以把这里的功能代码封装起来,当下次要执行这个功能时,直接调用封装起来的代码,在Java中把功能代码封装起来是以函数的形式体现的。函数也叫方法。
2.举例:
case1:在现实生活中,以前去银行取钱的时候,银行都会有专门的工作人员负责,但是银行发现取钱的步骤都是一致的,后来银行为了解决这个问题,就把取钱的功能封装到一个柜员机中,以后我们再取钱的时候,只需要调用柜员机的取钱功能即可。
case2:地铁自动售票机,接收纸币或硬币,返回车票,该售票机具有独立功能,可以理解为函数。有未知内容参与运算(要投币,纸币还是硬币,要投多少钱),也有返回值(返回车票)。
case3:手机具备打电话的功能,有未知的内容(电话号码),键盘是(形参),输入的号码是实际参数。
3.函数的作用:
提高功能代码的复用性。
4.函数的定义格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,……){
需要被封装的功能代码(执行语句);
return 结果(返回值);
}
(1)返回值类型:
返回值类型就是指函数运行完毕后,返回的结果的数据类型。
注意:某些函数是没有结果返回给调用者的,那么这时候返回值类型就是void。
(2)函数名:
函数名的作用:如果需要调用该函数就需要使用的函数名,函数名只要符合标识符的命名规则即可。
函数名的命名规范:首单词全部小写,其他单词的首字母大写,其他小写。
(3)形式参数:
如果一个函数在运行的时候,存在着数据是要调用者确定的,那么这时候就应该定义形式参数。
形式参数可以理解为一个局部变量,用于存储调用函数传递进来的实际参数。
(4)返回值return:
把一个结果返回给调用者。
5.如何定义一个函数:
(1)是否有未知参数参与运算(是否存在要由调用者确定的参数)——>形式参数。
(2)是否有返回值以及返回值的类型。
6.函数调用:
要想使用方法,就必须调用它。
7.函数的特点:
(1)函数的作用就是把一个功能代码给封装起来,以达到提高功能代码的复用性。
(2)函数定义好之后,是需要被调用才会执行的。
注意:main函数是由JVM调用的,不需要我们手动调用。
(3)如果一个函数没有返回值返回给调用者,那么返回值类型必须是使用void表示。
8.函数中需要注意的事项:
(1)函数中只能调用函数,不可以在函数内部定义函数。因为函数之间是平级的,相互之间是调用关系。
(2)定义函数时,函数的结果应该返回给调用者,交由调用者处理。
(3)当函数的返回值类型是void时,函数中的return语句可以省略不写。
(4)下图是函数的错误写法:
9.实例:
(1)实例一:
需求:定义一个函数比较两个int类型的数据大小,把最大值返回给调用者。
分析:要比较的这两个数并没有确定,要把这两个数写在形参列表上。也有返回值。
class Demo1{
public static void main(String[] args){
int max = getMax(3,4); //调用了函数,传递实际参数
System.out.println("最大值是:"+max);
}
public static int getMax(int a,int b){
int max = 0; //定义一个变量用于保存最大值
if(a > b){
max = a;
}else{
max = b;
}
return max; //把结果返回给调用者
}
}
运行结果如下图所示:
(2)实例二:
需求:定义一个函数比较两个int类型数据的大小,不需要把最大值返回给调用者,直接打印即可。
分析:此时仍然有两个未知的数据进行比较,但是没有返回值。
class Demo2{
public static void main(String[] args){
getMax(3,5); //调用了函数,传递实际参数
}
public static void getMax(int a,int b){
int max = 0; //定义一个变量用于保存最大值
if(a > b){
max = a;
}else{
max = b;
}
System.out.println("最大值是:"+max);
}
}
运行结果如下图所示:
(3)实例三:
需求:定义一个函数判断一个分数的等级,把分数的等级返回给调用者。
分析:未知的参数——>形式参数:分数; 返回值类型:String。
class Demo3{
public static void main(String[] args){
String result = getGrade(78);//方法有返回值可以定义一个变量接收返回值。变量类型和返 //回值类型要一致
System.out.println("您分数的等级是:"+result);
}
public static String getGrade(int score){
String grade = ""; //定义一个变量存储等级
if(score >= 90 && score <= 100){
grade = "A等级";
}else if(score >= 80 && score <= 89){
grade = "B等级";
}else if(score >= 70 && score <= 79){
grade = "C等级";
}else if(score >= 60 && score <= 69){
grade = "D等级";
}else{
grade = "补考";
}
return grade; //把等级返回给调用者
}
}
运行结果如下图所示:
注意:当执行完return语句时,或者执行到方法末尾的方括号时该方法结束。
二.return关键字
1.return关键字的作用:
(1)返回数据给函数的调用者。
(2)函数一旦执行到了return关键字,那么该函数马上结束(能结束一个函数)。
2.注意事项:
(1)一个函数的返回值类型是void,那么也可以出现return关键字,但是return关键字的后面不能有数据。
(2)如果一个函数的返回值类型是具体的数据类型,那么该函数就必须要保证在任意的情况下都有返回值(除了返回值类型是void以外)。比如下面中的分数,如果分数不在0-100的范围以内,应该也有一个返回值。返回值是您输入的分数有误。如果不加else会报错,因为并没有保证在任何情况下都有返回值。
class Demo3{
public static void main(String[] args){
String result = getGrade(78);
System.out.println("您分数的等级是:"+result);
}
public static String getGrade(int score){
String grade = ""; //定义一个变量存储等级
if(score >= 90 && score <= 100){
grade = "A等级";
}else if(score >= 80 && score <= 89){
grade = "B等级";
}else if(score >= 70 && score <= 79){
grade = "C等级";
}else if(score >= 60 && score <= 69){
grade = "D等级";
}else if(score >= 0 && score <= 59){
grade = "补考";
}else{ //如果不加else会报错,因为并没有保证在任何情况下都有返回值。
grade = "您输入的分数有误";
}
return grade; //把等级返回给调用者
}
}
3.break关键字与return关键字的区别:
(1)break关键字是结束一个循环。
(2)return关键字是结束一个函数。
class Demo4 {
public static void main(String[] args){
System.out.println("——————break结束一个循环——————");
print1();
System.out.println("——————return结束一个函数——————");
print2();
}
public static void print1(){
for(int i = 0;i < 5;i++){
System.out.println("Hello Java");
break;
}
System.out.println("我能执行吗?");//break结束循环后仍然可以执行
}
public static void print2(){
for(int i = 0;i < 5;i++){
System.out.println("Hello Java");
return;
}
System.out.println("我能执行吗?");//return结束函数后不会执行
}
}
运行结果如下图所示:
三.函数的重载
1.函数重载的定义:
函数的重载也叫方法的重载,在一个类中出现两个或者两个以上的同名函数,这个称作为函数的重载。
2.函数重载存在的原因:
为了增强方法的阅读性,优化了程序设计。
3.函数重载的作用:
同一个函数名可以出现不同的函数,以应对不同个数或者不同数据类型的参数。
4.函数重载的要求:
(1)函数名一致。
(2)形参列表不一致。(形式参数的个数或者是对应的数据类型不一致)
(3)与函数的返回值类型是无关的。
5.实例:
class Demo5{
public static void main(String[] args){
add(1,2);
add(1,2.0);
add(1,2,3);
add(1,2,3,4);
}
public static double add(int a,int b){
System.out.println("两个参数的总和:"+(a+b));
return 3.14;
}
public static int add(int a,double b){
System.out.println("double参数的总和:"+(a+b));
return 12;
}
public static void add(int a,int b,int c){
System.out.println("三个参数的总和:"+(a+b+c));
}
public static void add(int a,int b,int c,int d){
System.out.println("四个参数的总和:"+(a+b+c+d));
}
}
运行结果如下图所示:
上一篇: [转] JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)
下一篇: C与Python初探