Java基础学习笔记 - Day04 - 第二章 方法

Java基础学习笔记 - Day04 - 第二章 方法

系统:Win10
JDK:1.8.0_121
IDE:IntelliJ IDEA 2017.3.7

2.1 回顾 —— 方法的定义和调用

前面的课程中,使用过嵌套循环输出矩形,控制台就可以了,因此将方法定义为 void,没有返回值。在主方法 main 中直接调用

public static void main(String[] args) {
    printRectangle();
}

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

printRectangle 方法被 main 方法调用后直接输出结果,而 main 方法并不需要 printTangle 方法的执行结果,所以被定义为 void

2.2 定义方法的格式详解

修饰符 返回值类型 方法名(参数类型 参数名称, ...) {
    方法体
    return 返回值; 
}
  • 修饰符:现阶段固定写法 public static
  • 返回值类型:也就是方法最终产生的数据结果是什么类型
  • 方法名称:方法的名字,规则和变量一样,小驼峰
  • 参数类型:进入方法的数据是什么类型
  • 参数名称:进入方法的数据对应的变量名称
    • ps:参数如果有多个,需要用逗号隔开
  • 方法体:方法需要做的事情,若干行代码
  • return:两个作用,第一 停止当前方法,第二 将后面的返回值还给调用处
  • 返回值:方法执行后最终产生的数据结果
    • ps:return后面的 “返回值”,必须和方法名称前面的 “返回值类型” 一致

2.3 定义方法的明确

  • 需求:顶一个方法实现两个整数的求和计算
    • 明确返回值类型:方法计算的是整数的求和,结果也必然是个整数,返回值类型定义为int类型
    • 明确参数列表:计算哪两个整数的和,并不清楚,但可以确定是整数,参数列表可以定义为两个int类型的变量,由调用者调用方法时传递
public class MethodDemo02 {
    public static void main(String[] args) {
        // 调用方法getSum,传递两个参数,这里传递的实际数据又称为实际参数、
        // 接收方法计算后的结果,输出返回值
        int sum = getSum(5, 6);
        System.out.println(sum);
    }

    /*
        定义计算两个整数求和的方法
        返回值类型,计算结果是int
        参数:不确定数据求和,定义int参数,参数又称形式参数
    */
    public static int getSum (int a, int b) {
        int c = a + b
        return c;
    }
}

程序执行后,主方法 main 调用 getSum 方法,传递了实际数据 5和6,两个变量 a和b 接收到的就是实际参数,并将计算后的结果返回,主方法 main 和变量 sum 接收的方法就是方法的返回值

2.4 调用方法图解

在这里插入图片描述

2.5 调用方法的三种形式

  • 直接调用:直接写方法名调用
public static void main(String[] args) {
    print();
}
public static void print() {
    System.out.println("直接调用!");
}
  • 打印调用:在输出语句中调用方法,System.out.println(方法名())
public static void main(String[] args) {
    System.out.println(getSum(3,4));
}
public static int getSum(int a, int b) {
    return a + b;
}
  • 不能打印调用 void 类型方法。因为方法执行后没有结果,也就打印不出任何内容
public static void main(String[] args) {
    // System.out.println(print()); // 错误调用,不能 输出语句调用void类型方法
}
public static void print() {
    System.out.println("直接调用!");
}
  • 赋值调用:调用方法,在方法前面定义变量,接收方法返回值
public static void main(String[] args) {
    int sum = getSum(3,4);
    System.out.println(sum);
}
public static int getSum(int a, int b) {
    return a + b;
}

2.6 定义方法的注意事项

  • 方法应该定义在类当中,但是不能在方法当中再定义方法。不能嵌套
  • 方法定义的前后顺序无所谓
  • 方法定义之后不会执行,如果要执行,则需要调用:直接调用、打印调用、打印调用
  • 如果方法有返回值,那么必须写上 “return 返回值;”,不能没有
  • return后面的返回值数据,必须和方法的返回值类型,对应起来
  • 对于一个void没有返回值的方法,不能写“return 返回值;”,不过可以直接写“return ;”
  • 对于void方法当中最后一行的return可以省略不写
  • 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到

2.7 定义实现方法

练习一 比较两个整数是否相等

  • 分析:定义方法实现功能,需要有两个明确值,即 返回值参数列表
    • 明确返回值:比较整数,比较的结果只有两种可能,相同或不同,因此结果四布尔类型,比较的结果相同为true
    • 明确参数类型:比较的两个整数不确定,所以默认定义为两个int类型的参数
public static void main(String[] args) {
    // 调用方法cmpare,传递两个参数
    // 接收方法计算后的结果,并打印出来
    boolean result = compare(3, 4);
    System.out.println(result);
}

/*
    定义比较整数是否相同的方法
    返回值类型,比较的结果是布尔型
    参数:不确定参与比较的两个整数
*/
public static boolean compare(int a, int b) {
    if (a == b) {
        return true;
    }else {
        return false;
    }
}

练习二 求出1+2+3+…+100的和

  • 分析:定义方法实现功能,需要有两个明确,即 返回值参数
    • 明确返回值:1~100的求和,计算后必然还是整数,返回值类型是int
    • 明确参数:需求中已知计算的数据,没有未知的数据,不定义参数
public static void main(String[] args) {
    // 调用方法 getSum 并打印返回值
    System.out.println(getSum());
}
/*
    定义计算1~100的求和方法
    返回值类型:计算结果为整数int
    参数:没有不确定数据
*/
public static int getSum() {
    // 定义变量保存求和
    int sum = 0;
    // 从1开始循环,到100结束
    for (int i = 1; i <= 100; i++) {
        sum += i;
    }
    return sum;
}

练习三 实现不定次数打印

  • 分析:定义方法实现功能,需要有两个明确,即 返回值参数
    • 明确返回值:方法中打印出 Hello World! 即可,没有计算结果,返回值类型为 void
    • 明确参数:打印次数不清楚,参数定义一个整形参数
public static void main(String[] args) {
    // 调用方法 print,传递整数
    print(9);
}

/*
    定义打印 Hello World! 方法
    返回值类型:计算没有结果 void
    参数:不确定打印几次
*/
public static void print(int n) {
    for (int i = 0; i < n; i++) {
        System.out.println("Hello World!" + i);
    }
}

2.8 方法重载

  • 方法重载:指在同一类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符返回类型 无关
  • 参数列表:个数不同,数据类型不同,参数的多类型顺序不同
  • 重载方法调用:JVM通过方法的参数列表,调用不同的方法

2.9 方法重载练习

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

public class MethodDemo06 {
    public static void main(String[] args) {
        // 定义不同数据类型的变量
        byte a = 10;
        byte b = 20;
        short c = 30;
        short d = 30;
        int e = 40;
        int f = 50;
        long g = 60L;
        long h = 60L;
        // 调用
        System.out.println(compare(a, b));
        System.out.println(compare(c, d));
        System.out.println(compare(e, f));
        System.out.println(compare(g, h));
    }

    // 两个byte类型的
    public static boolean compare(byte a, byte b) {
        System.out.println("compare byte");
        return a == b;
    }

    // 两个short类型的
    public static boolean compare(short a, short b) {
        System.out.println("compare short");
        return a == b;
    }

    // 两个int类型的
    public static boolean compare(int a, int b) {
        System.out.println("compare int");
        return a == b;
    }

    // 两个long类型的
    public static boolean compare(long a, long b) {
        System.out.println("compare long");
        return a == b;
    }
}

练习二
判断哪些方法是重载关系

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

public class MethodDemo07 {
    public static void main(String[] args) {
        byte a = 1;
        short b = 2;
        int c = 3;
        long d = 4L;
        float e = 5.0F;
        double f = 6.0;
        char g = 'A';
        boolean h = true;
        String str = "Last";
        myPrint(a);
        myPrint(b);
        myPrint(c);
        myPrint(d);
        myPrint(e);
        myPrint(f);
        myPrint(g);
        myPrint(h);
        myPrint(str);
    }

    // byte
    public static void myPrint(byte a) {
        System.out.println("byte数据:" + a);
    }
    // short
    public static void myPrint(short a) {
        System.out.println("short数据:" + a);
    }
    // int
    public static void myPrint(int a) {
        System.out.println("int数据:" + a);
    }
    // long
    public static void myPrint(long a) {
        System.out.println("long数据:" + a);
    }
    // float
    public static void myPrint(float a) {
        System.out.println("float数据:" + a);
    }
    // double
    public static void myPrint(double a) {
        System.out.println("double数据:" + a);
    }
    // char
    public static void myPrint(char a) {
        System.out.println("char数据:" + a);
    }
    // boolean
    public static void myPrint(boolean a) {
        System.out.println("boolean数据:" + a);
    }
    // String
    public static void myPrint(String a) {
        System.out.println("String数据:" + a);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35132089/article/details/107967047