首页 Java学习📘

Java基础篇——(10)方法

一、概述

我们在学习运算符的时候,都为每个运算符单独的创建一个新的类和main方法,我们会发现这样编写代码非常的繁琐,而且重复的代码过多。能否避免这些重复的代码呢,就需要使用方法来实现。

  • 方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。

当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。

二、方法的定义

定义格式:

修饰符 返回类型 方法名称(参数类型 参数名称, ...) {
    方法体
    return 返回值;
}

定义格式解释:

  • 修饰符:现阶段固定写法:public static
  • 返回类型:也就是方法最终产生的数据是什么类型
  • 方法名称:方法的名字,命名规则和变量一样,小驼峰
  • 参数类型:进入方法的数据是什么类型
  • 参数名称:进入方法的数据对应的变量名称

    • 参数如果有多个,使用逗号进行分隔
  • 方法体:方法需要做的事情,由若干行代码组成
  • return:两个作用,第一停止当前党发,第二将后面的返回值还给调用处
  • 返回值:也就是方法执行后最终产生的数据结果

    • return后面的返回值,必须和方法名称前面的返回类型,保持一致

注意事项:
1.方法定义的先后顺序无所谓。
2.方法定义必须是挨着的,不能在一个方法的内容定义另一个方法。
3.方法定义之后,自己不会主动执行,如果希望执行,一定要进行方法的调用。

三、方法的调用

方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法。在主方法中,直接写要调用的方法名字就可以调用了。

如下程序就是一个简单的方法调用:

public class Demo01Method {

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

    public static void printMethod() {
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 20; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

}

调用方法的三种形式

Java的方法调用主要有三种形式,分别为:

  1. 单独调用:方法名称(参数)
  2. 打印调用:System.out.println(方法名称(参数))
  3. 赋值调用:调用方法,在方法前面定义变量,接收方法返回值

具体实现如下程序所示:

public class Demo02MethodDefine {

    public static void main(String[] args) {
        //单独调用
        sum(10,20);
        System.out.println("===========");

        //打印执行
        System.out.println(sum(10,20)); //30
        System.out.println("===========");

        //赋值调用
        int number = sum(15,25);
        System.out.println("变量的值" + number);
    }


    public static int sum(int a,int b) {
        System.out.println("方法执行啦!");
        int result = a + b;
        return result;
    }

}

四、方法重载

方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。

换句话说,对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同方法名称,太麻烦。

方法的重载(Overload):多个方法的名称一样,但是参数的列表不一样。
优点:只需要记住唯一一个方法名称,就可以实现类似的多个功能。

方法重载与下列因素相关:

  1. 参数个数不同
  2. 参数类型不同
  3. 参数的多类型顺序不同

方法重载与下列因素无关:

  1. 与参数名称无关
  2. 与方法的返回值类型无关

详细理解可参考下面程序:

public class Demo01MethodOverload {

    public static void main(String[] args) {
        /*System.out.println(sumTwo(10,20));//30
        System.out.println(sumThree(10,20,30));//60
        System.out.println(sumFour(10,20,30,40));//100*/

        System.out.println(sum(10,20));//调用两个参数的方法
        System.out.println(sum(10,20,30));//调用三个参数的方法
        System.out.println(sum(10,20,30,40));//调用四个参数的方法
//        System.out.println(sum(10,20,30,40,50));//找不到任何方法来匹配,所以错误
    }

    /*public static int sumTwo(int a, int b){
        return a + b;
    }

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

    public static int sumFour(int a, int b, int c, int d){
        return a + b + c + d;
    }*/


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

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

    public static int sum(int a, int b){
        System.out.println("有两个参数的方法执行!");
        return a + b;
    }

    //与方法的返回值类型无关——错误写法!
//    public static double sum(int a, int b){
//        return a + b + 0.0;
//    }

    //与参数名称无关——错误写法!
//    public static int sum(int x, int y){
//        return x + y;
//    }

    public static int sum(int a, int b, int c){
        System.out.println("有三个参数的方法执行!");
        return a + b + c;
    }

    public static int sum(int a, int b, int c, int d){
        System.out.println("有四个参数的方法执行!");
        return a + b + c + d;
    }

}

练习一

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

public class Demo02MethodOverloadSame {

    public static void main(String[] args) {
        byte a = 10;
        byte b = 20;
        System.out.println(isSame(a,b));

        System.out.println(isSame((short) a,(short) b));

        System.out.println(isSame(11,12));

        System.out.println(isSame(10L,10L));
    }

    public static boolean isSame(byte a, byte b) {
        System.out.println("两个参数类型为byte的方法执行!");
        boolean same;
        if (a == b) {
            same = true;
        } else {
            same = false;
        }
        return same;
    }

    public static boolean isSame(short a, short b) {
        System.out.println("两个参数类型为short的方法执行!");
        return a == b ? true : false;
    }

    public static boolean isSame(int a, int b) {
        System.out.println("两个参数类型为int的方法执行!");
        return a == b;
    }

    public static boolean isSame(long a, long b) {
        System.out.println("两个参数类型为long的方法执行!");
        if (a == b) {
            return true;
        } else {
            return false;
        }
    }

}

练习二

判断哪些方法是重载关系。

    public static void open(){}//正确重载
    public static void open(int a){}//正确重载
    static void open(int a,int b){}//代码错误:与第8行冲突
    public static void open(double a,int b){}//正确重载
    public static void open(int a,double b){}//代码错误:与第6行冲突
    public void open(int i,double d){}//代码错误:与第5行冲突
    public static void OPEN(){}//代码正确不会报错,但并不是有效重载
    public static void open(int i,int j){}//代码错误:与第3行冲突

练习三

模拟输出语句中的println方法效果,传递什么类型的数据就输出什么类型的数据,只允许定义一个方法名println

/*
数据类型:
    基本类型:byte short int long float double char boolean
    引用类型:String

在调用输出语句的时候,println方法其实就是进行了多种数据类型的重载形式。
 */
public class Demo04OverloadPrint {

    public static void main(String[] args) {
        myPrint(100);//int
        myPrint("Hello");//String
    }


    public static void myPrint(byte num) {
        System.out.println(num);
    }

    public static void myPrint(short num) {
        System.out.println(num);
    }

    public static void myPrint(int num) {
        System.out.println(num);
    }

    public static void myPrint(long num) {
        System.out.println(num);
    }

    public static void myPrint(float num) {
        System.out.println(num);
    }

    public static void myPrint(double num) {
        System.out.println(num);
    }

    public static void myPrint(char num) {
        System.out.println(num);
    }

    public static void myPrint(boolean is) {
        System.out.println(is);
    }

    public static void myPrint(String str) {
        System.out.println(str);
    }
}



文章评论

目录