Java自定义方法、返回值、及方法重载
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("优秀");