自学Java随时放弃(十三 方法 ②)

本文介绍了Java中方法的定义、调用、注意事项及方法重载的概念和应用。通过实例解析了如何定义void类型方法,展示了方法重载在处理不同类型参数时的灵活性。同时提供了多个练习题,帮助读者巩固对方法的理解。
摘要由CSDN通过智能技术生成

在这里插入图片描述

一、答案

首先公布一下上期作业答案哈:

1、键盘录入两个数据,返回两个数里面的最大值;

做题之前需要先搞清楚两点:
① 返回值类型:int
② 参数列表:int a和 int b

import java. util. Scanner;
public class demon {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);

            System.out.println("请输入第一个数据:");
            int a=sc.nextInt();

            System.out.println("请输入第二个数据:");
            int b=sc.nextInt();

            int result = max(a,b);
            System.out.println("较大数为:"+result);
        }
        public static int max(int a,int b){
            if(a>b){
                return a;
            }else{
                return b;
            }
	}
}

请输入第一个数据:
80
请输入第二个数据:
55
较大数为:80

Process finished with exit code 0

也可以写成:

import java. util. Scanner;
public class demon {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);

            System.out.println("请输入第一个数据:");
            int a=sc.nextInt();

            System.out.println("请输入第二个数据:");
            int b=sc.nextInt();

            int result = max(a,b);
            System.out.println("较大数为:"+result);
        }
        public static int max(int a,int b){
            int max=((a>b)?a:b);
            return max;
        }
}

顺便提一句,在这段代码中,由于int max 等于((a>b)?a:b),所以最后一行也可以写为:return ((a>b)?a:b);

2、键盘录入两个数据,比较两个数据是否相等

做题之前需要先搞清楚两点:
① 返回值类型:Boolean
② 参数列表:int a和 int b

import java. util. Scanner;
public class demon {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);

            System.out.println("请输入第一个数据:");
            int a=sc.nextInt();

            System.out.println("请输入第二个数据:");
            int b=sc.nextInt();

            boolean result = than(a,b);
            System.out.println("结果为:"+result);
        }
        public static boolean than(int a,int b){
            if(a==b){
                return true;
            }else{
                return false;
            }

        }
}

请输入第一个数据:
55
请输入第二个数据:
33
结果为:false

Process finished with exit code 0

也可以写成:

import java. util. Scanner;
public class demon {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);

            System.out.println("请输入第一个数据:");
            int a=sc.nextInt();

            System.out.println("请输入第二个数据:");
            int b=sc.nextInt();

            boolean result = than(a,b);
            System.out.println("结果为:"+result);
        }
        public static boolean than(int a,int b){
            boolean than=((a==b)?true:false);
            return than;

        }
}
请输入第一个数据:
40
请输入第二个数据:
40
结果为:true

Process finished with exit code 0

当然在这道题中,你也可以像前一题那样,return ((a==b)?true:false)

甚至是return (a==b)?

3、键盘录入三个数据,返回三个数中的最大值

可以写成:

import java. util. Scanner;
public class demon {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);

            System.out.println("请输入第一个数据:");
            int a=sc.nextInt();

            System.out.println("请输入第二个数据:");
            int b=sc.nextInt();

            System.out.println("请输入第三个数据:");
            int c=sc.nextInt();

            int result = max(a,b,c);
            System.out.println("最大值为:"+result);
        }
        public static int max(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;
                }
            }
            }
}


请输入第一个数据:
40
请输入第二个数据:
55
请输入第三个数据:
69
最大值为:69

Process finished with exit code 0

也可以写成:

import java. util. Scanner;
public class demon {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);

            System.out.println("请输入第一个数据:");
            int a=sc.nextInt();

            System.out.println("请输入第二个数据:");
            int b=sc.nextInt();

            System.out.println("请输入第三个数据:");
            int c=sc.nextInt();

            int result = max(a,b,c);
            System.out.println("最大值为:"+result);
        }
        public static int max(int a,int b,int c) {
            if(a>b){
                return (a>c)?a:c;
            }else{
                return (b>c)?b:c;
            }

        }
}

甚至还可以写成:

import java. util. Scanner;
public class demon {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);

            System.out.println("请输入第一个数据:");
            int a=sc.nextInt();

            System.out.println("请输入第二个数据:");
            int b=sc.nextInt();

            System.out.println("请输入第三个数据:");
            int c=sc.nextInt();

            int result = max(a,b,c);
            System.out.println("最大值为:"+result);
        }
        public static int max(int a,int b,int c) {
            return (a>b)?(a>c?a:c):(b>c?b:c);

        }
}

二、方法注意事项

关于方法的知识点,我们之前讲了很多,现在归总一下使用方法时的注意事项。

1、方法不调用不执行
2、方法与方法时平级关系,不能嵌套定义
3、方法定义的时候,参数之间用逗号隔开
4、方法调用的时候不用再传递数据类型
5、如果方法有明确的返回值,一定要有return带回一个值

具体的例子,就不一一枚举了,大家可以从之前的内容里找。

三、void类型方法的定义和调用

void在Java里翻译为,

空的方法是什么意思,具体有咩用处呢?

1、定义

顾名思义,就是没有,也就是说,void类型的方法在调用的时候,不需要向调用者返回函数值。

举个例子大家就明白了……

🌰 请在控制台输出一个4行5列的星星图案

public class demon {
        public static void main(String[] args) {
            for(int x=0;x<4;x++){
                for(int y=0;y<5;y++) {
                    System.out.print("*");
                }
                System.out.println();
            }
        }
}

通过前几篇的学习,这段代码大家应该不陌生(说陌生的小伙伴请去自行面壁🎃)。

现在请思考一个问题,如果这段代码在一个大型程序里面,且需要经常出现而且每次行列数的要求还都不一样,怎么办?

答案是:需要用到方法,编写一个m行n列的代码就可以实现。

public class demon {
    public static void main(String[] args) {
        
    }

    public static void star(int m,int n){
        for (int x = 0; x < m; x++) {
            for (int y = 0; y < n; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

代码里没有明确的返回值(return),这种方法就是void方法类型,参数列表为int m,int n

2、调用

方法写完了,现在的问题是怎么调用。

还记得前一篇我们说过,方法调用的三种方式吧:

① 单独调用,没有意义;
② 输出调用,有意义,但不够完美,因为程序员不一定非要把结果输出;
③ 赋值调用,推荐方式。

逐个使用一下,答案就有了。

① 赋值调用

public class demon {
    public static void main(String[] args) {
       //赋值调用
       void v=star(4,5);
    }

    public static void star(int m,int n){
        for (int x = 0; x < m; x++) {
            for (int y = 0; y < n; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

输出结果为:

java: 非法的表达式开始

可见,void方法不能使用赋值调用

② 输出调用

public class demon {
    public static void main(String[] args) {
        //输出调用
        System.out.println(star(4,5));
    }

    public static void star(int m,int n){
        for (int x = 0; x < m; x++) {
            for (int y = 0; y < n; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

输出结果为:

java: 此处不允许使用 '空' 类型

可见,void方法不能使用输出调用

③ 单独调用

public class demon {
    public static void main(String[] args) {
        //单独调用
        star(4,5);
    }

    public static void star(int m,int n){
        for (int x = 0; x < m; x++) {
            for (int y = 0; y < n; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

输出结果为:

*****
*****
*****
*****

Process finished with exit code 0

可见,void方法可以使用输出调用

四、练习题

1、键盘录入行数、列数,输出对应星形;

首先明确两点:
①:返回值类型——void
②:参数列表——int m,int n

import java.util.Scanner;

public class demon {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);

        System.out.println("请输入行数:");
        int m=sc.nextInt();

        System.out.println("请输入列数:");
        int n=sc.nextInt();

        //void 类型的方法调用
        daxingxing(m,n);
    }

    public static void daxingxing(int m,int n){
        for (int x = 0; x < m; x++) {
            for (int y = 0; y < n; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

请输入行数:
6
请输入列数:
9
*********
*********
*********
*********
*********
*********

Process finished with exit code 0

2、键盘录入一个数据n(1<=n<=9),输出对应的nn乘法表

首先明确两点:
①:返回值类型——void
②:参数列表——int n

import java.util.Scanner;

public class demon {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);

        System.out.println("请输入n的值(1~9):");
        int n=sc.nextInt();


        //void 类型的方法调用
        printN(n);
    }

    public static void printN(int n){
        for (int x = 1; x <=n; x++) {
            for (int y = 1; y <=x; y++) {
                System.out.print(y+"*"+x+"="+y*x+"\t");
            }
            System.out.println();
        }
    }
}
请输入n的值(1~9):
4
1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	

Process finished with exit code 0

五、方法重载概述和基本使用

1、定义

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数,或者参数类型不同即可。

啥意思?

(个_个)

比如说,我现在有这样一个需求:求两个数的和;
那么根据之前讲过的,代码可以写成(不调用):

public class demon {
    public static void main(String[] args) {
        
    }

    public static void sum(int a,int b){
        
         return a+b;   
            
        }
    }

}

在这里,我们给这个方法取名为sum

现在改变一下需求,我想求三个数的和,那么这个方法名可以改为sum1

public class demon {
    public static void main(String[] args) {
        
    }

    	public static void sum1(int a,int b,int c){
        
         return a+b+c;   
            
        }
    }

以此类推,求四个数之和,方法名为sum2

public class demon {
    public static void main(String[] args) {
        
    }

    public static void sum2(int a,int b,int c,int d){
        
         return a+b+c+d;   
            
        }
    }

不知道大家是否还记得最开始我们说过,Java是强类型语言,对方法的命名要做到,见名知意

比如main,虚拟机见到后就明白这是一个main方法,sum,是求和。但sum1sum2这两个名字,很显然就有点差强人意。

针对不断发生改变的需求,所产生的多个求和方法名称,在Java里就规定:在方法的功能相同,参数列表不同的情况下,为了见名知意,允许起一样的名字,即方法重载

由此,上面几个例子可以改为:

public class demon {
    public static void main(String[] args) {
        System.out.println(sum(50,34));
        System.out.println(sum(12,34,78));
        System.out.println(sum(2,56,90,33));

    }

    public static  int sum(int a,int b){
        return a+b;
    }
     public static  int sum(int a,int b,int c){
        return a+b+c;
     }
     public static int sum(int a,int b,int c,int d){
        return a+b+c+d;
     }
    }
84
124
181

Process finished with exit code 0

JVM能根据不同的参数,调用不同的功能。

是不是很聪明 (* ̄︶ ̄)

2、方法重载的特点

根据上面的例子,不难看出方法重载的特点:

①、与返回值类型无关,只看方法名和参数列表;
②、在调用时,虚拟机通过参数列表的不同(参数个数不同/参数类型不同)来区分同名方法。

前面举的例子是参数个数不同,现在再举一个参数类型不同的例子。

public class demon {
    public static void main(String[] args) {
        System.out.println(sum(50,34));
        System.out.println(sum(12,34,78));
        System.out.println(sum(10.5f,6f));

    }

    public static  int sum(int a,int b){
        return a+b;
    }
     public static  int sum(int a,int b,int c){
        return a+b+c;
     }
     public static float sum(float a,float b){
        return a+b;
     }
    }
84
124
16.5

Process finished with exit code 0

这里要注意一下Java的自动类型转换:
①、小类型自动转换为大类型;比如short、byte、char转int
②、整数类型自动转换为浮点类型,可能会产生误差;
③、字符型自动转换为整数类型

在这里插入图片描述

六、方法重载练习

比较两个数据是否相等,参数类型分别为两个byte,两个short,两个int,两个long,并在main方法中进行测试。

首先明确两点:
①、返回值类型:Boolean
②、参数列表:byte(short/int/long)a,byte(short/int/long)b

public class demon {
    public static void main(String[] args) {
        //测试
        byte c1 = 3;
        byte c2 = 7;
        System.out.println("byte" +":"+ compare(c1, c2));

    }

    //byte类型
    public static boolean compare(byte a, byte b) {
        return a > b;
    }

    //int类型
    public static boolean compare(int a, int b) {
        return a > b;
    }

    //short类型
    public static boolean compare(short a, short b) {
        return a > b;
    }

    //long类型
    public static boolean compare(long a, long b) {
        return a > b;
    }
}
byte:false

Process finished with exit code 0

例题里面只测试byte类型,剩下的请自行测试。

Thanks♪(・ω・)ノ for read……
部分图片来自网络,侵权立删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值