Java自定义方法、返回值、及方法重载

1 自定义方法
1.1 方法的概念

问题:为什么要有方法?

原因:当某个功能被多次(重复)使用的时候,为了简化代码,方便操作,通常会将该功能封装起来,直接使用,用户可以不用考虑功能的实现细节,只需要知道该功能如何使用即可

问题:方法定义好之后一定要使用嘛(如果不用,为啥要写)?

原因:功能的定义并非是一定需要去使用的,定义方法的目的是在后续的使用过程中有可能会用到该功能

问题:定义好的功能,如果要使用一定要通过main函数嘛?

原因:如果是需要直接运行的功能那么必须通过主函数,如果不是直接运行的而是通过其他方法间接运行的,那么考虑的是其所在的方法是否需要直接在主函数中运行

方法与方法之间的关系:并列的、平级的关系,所有的方法都在类中,方法中不能包含另一个方法,但是可以调用另一个方法

1.2 方法的语法

修饰符 返回值类型 方法名(参数类型 参数名,...){执行代码;}

例如:public static void main(String[] args){}

需求:定义功能实现比较两个数的大小(求较大值)

public static void main(String[] args){
//调用方法
max();
a();
reaper();
}

public static void max(){
int x = 3;
int y = 4;
if(x>y){
    System.out.println(x);
}else{
    System.out.println(y);
}
}

public static void reaper(){
System.out.println("加满油,点火,开始收割");
System.out.println("10分钟之后....");
System.out.println("收麦子了,一斤1.12");
}

//做联谊 需要有班主任的协助
public static void a(){
b();
System.out.println("联谊成功");
}

//代表班主任的协助功能
public static void b(){
System.out.println("协助联谊");
}
1.3 方法的参数

方法中的参数可以是无限个,根据情况来定,注意点同一个类中方法名不允许一样,如果想要一样就需要符合方法重载的规则,在调用方法传值时,参数的类型和位置要和方法中定义的参数类型和位置一致

public static void main(String[] args){
   max();
   boom("banana");
}
//求两个数的较大值
public static void max(int x,int y){
if(x>y){
       System.out.println(x);
  }else{
       System.out.println(y);
  }
}

//榨汁机
public static void boom(String fruit){
   switch(fruit){
       case "apple":
           System.out.println("先生您的"+fruit+"好了");
           break;
       case "banana":
           System.out.println("先生您的"+fruit+"好了");
           break;
       case "orange":
           System.out.println("先生您的"+fruit+"好了");
           break;
       case "pear":
           System.out.println("先生您的"+fruit+"好了");
           break;

  }
}

//求三个数的较大值
public static void max2(int x,int y,int z){
   if(x>y){
  if(x>z){
           System.out.println(x);
      }else{
           System.out.println(z);
      }
  }else{
       if(y>z){
           System.out.println(y);
      }else{
           System.out.println(z);
      }
  }
}

形参和实参

形参:形式参数,指的就是方法中定义的参数,是没有具体值的,存在的意义是告诉调用者想要使用该功能就必须给到相应类型的值

实参:实际参数,指的是调用者在调用某个方法时,传递的实际的具体的值

public static void main(String[] args){
   int x = 5;
   int y = 6;
   max(x,y);//实参
}

public static void max(int x,int y){ //形参
   if(x>y){
       System.out.println(x);
  }else{
       System.out.println(y);
  }
}

参数类型转换 :小类型的转大类型的可以,大类型转小类型需要强制类型转换,否则编译失败

public static void main(String[] args){
byte a = 7;
int b = 6;
//max(a,b);
max3(a,b);
}

public static void max(int x,int y){
if(x>y){
System.out.println(x);
}else{
System.out.println(y);
}
}

//byte类型为参数,传递int类型会报错(从int转换到byte可能会有损失)
int a = 7;
int b = 6;
public static void max2(byte x,int y){
if(x>y){
System.out.println(x);
}else{
System.out.println(y);
}
}

//小类型传递给大类型是正常的
public static void max3(int x,int y){
if(x>y){
System.out.println(x);
}else{
System.out.println(y);
}
}
1.4 方法的返回值

问题:为什么方法需要返回值?

原因:当需要对方法中返回的结果进行二次处理的时候,就需要返回值

问题:什么时候需要给具体的返回值?

原因:看需求(需要对结果再次进行处理的时候,那就给返回值,相反则不给[无返回类型--void])

关键词:return(返回) void(无返回值类型)

return作用:1、返回结果 2、结束方法(函数)

需求:求某学生的语数英三门成绩的最大值,然后给出该成绩对应的科目评级

//所有的数据都需要有特定的数据类型,因此要返回的数据也需要指定数据类型
public static int maxScore(int a,int b,int c){
   if(a>b){
       if(a>c){
           return a;
      }else{
           return c;
      }
  }else{
       if(b>c){
           return b;
      }else{
           return c;
      }
  }
}
//方案一:得到返回值在主函数中处理业务 --不推荐,不建议在主函数中写业务逻辑
public static void main(String[] args){
int x = 8;
int y = 65;
int z = 55;
int score = maxScore(x,y,z);
if(score>90){
System.out.println("优秀");
}else if(score>70){
System.out.println("良好");
}else if(score>59){
System.out.println("及格");
}else{
System.out.println("不及格");
}

}

//所有的数据都需要有特定的数据类型,因此要返回的数据也需要指定数据类型
public static int maxScore(int a,int b,int c){
   if(a>b){
       if(a>c){
           return a;
      }else{
           return c;
      }
  }else{
       if(b>c){
           return b;
      }else{
           return c;
      }
  }
}
//方案二:不需要返回值,直接在方法中处理业务逻辑
public static void main(String[] args){
   maxScore1(55,78,66);
}

public static void maxScore1(int a,int b,int c){
   if(a>b){
       if(a>c){
           print(a);
      }else{
           print(c);
      }
  }else{
       if(b>c){
           print(b);
      }else{
           print(c);
      }
  }
}

//根据给成绩判断出该成绩的等级
public static void print(int score){
   if(score>90){
       System.out.println("优秀");
  }else if(score>70){
       System.out.println("良好");
  }else if(score>59){
       System.out.println("及格");
  }else{
       System.out.println("不及格");
  }
}
//方案三:对方案二进行优化 减少方法的调用次数
public static void main(String[] args){
   print(maxScore(55,78,66));
}

//所有的数据都需要有特定的数据类型,因此要返回的数据也需要指定数据类型
public static int maxScore(int a,int b,int c){
   if(a>b){
       if(a>c){
           return a;
      }else{
           return c;
      }
  }else{
       if(b>c){
           return b;
      }else{
           return c;
      }
  }
}

public static void maxScore1(int a,int b,int c){

   int max = 0;
   if(a>b){
       if(a>c){
           max = a;
      }else{
           max = c;
      }
  }else{
       if(b>c){
           max = b;
      }else{
           max = c;
      }
  }
   print(max);
}

//根据给成绩判断出该成绩的等级
public static void print(int score){
   if(score>90){
       System.out.println("优秀");
  }else if(score>70){
       System.out.println("良好");
  }else if(score>59){
       System.out.println("及格");
  }else{
       System.out.println("不及格");
  }
}
2 方法的重载

概念:在同一个类中,方法名相同,方法的参数列表不同(参数个数、参数位置、参数的类型),与返回值类型无关

问题:为什么需要所谓的方法的重载?

原因:多个方法具有相同的功能特性,但是呢,每个功能的实现方式可能不同

//需求:求较大值(两个数)
public static int max(int x,int y){
   if(x>y){
       System.out.println(x);
  }else{
      System.out.println(y);
  }
}
//求较大值(三个数)
public static int max(int x,int y,int z){
   if(x>y){
  if(x>z){
           System.out.println(x);
      }else{
           System.out.println(z);
      }
  }else{
       if(y>z){
           System.out.println(y);
      }else{
           System.out.println(z);
      }
  }
}
//案例
public static void main(String[] args){
   int x = 5;
   int y = 6;
   int z = 7;
   max(x,y,z);
}

//需求:求较大值(两个数)
public static void max(int x,int y){
   System.out.println("-----------");
   if(x>y){
       System.out.println(x);
  }else{
       System.out.println(y);
  }
}
//类型不同
public static void max(byte a,int b){
   if(a>b){
       System.out.println(a);
  }else{
       System.out.println(b);
  }
}

/*public static int max(int a,byte b){
if(a>b){
System.out.println(a);
}else{
System.out.println(b);
}
return 0;
}*/
//位置不同
public static void max(int a,byte b){
   if(a>b){
       System.out.println(a);
  }else{
       System.out.println(b);
  }
}
//个数不同
//求较大值(三个数)
public static void max(int x,int y,int z){
   if(x>y){
       if(x>z){
           System.out.println(x);
      }else{
           System.out.println(z);
      }
  }else{
       if(y>z){
           System.out.println(y);
      }else{
           System.out.println(z);
      }
  }
}

 

posted @ 2020-06-02 18:33  梦想0高度  阅读(981)  评论(0编辑  收藏  举报