2021_2_23_方法详解

JAVA方法详解

什么是方法

  • 方法指的是语句的集合,它们在一起实现一个功能
    • 方法是解决一类问题的步骤的有序组合
    • 方法包含于类或对象中
    • 方法先被创建,然后在其他地方被调用
  • 设计方法的原则:方法的初衷是功能块。设计方法时要注意方法的原子性,也就是一个方法完成一个功能。这样有利于方法的调用和后期的扩展。
public class Demo1 {
    // main方法
    public static void main(String[] args) {
        System.out.println(addition(2,3)); // 调用addition方法
    }

    // 创建一个加法方法 public-公开修饰符 static-类方法修饰符 int-返回值数据类型(void为不返回) 括号中写参数
    public static int addition(int a, int b){
        return a+b; //返回两个数的和
    }

}

// 5

方法的定义和调用

  • 方法包含一个方法头和一个方法体。

  • 以下是一个方法的所有部分:

    • 修饰符:可选的,告诉编译器将如何调用该方法。定义了该方法的访问类型。
    • 返回值类型:顾名思义,returnValueType是方法返回值的数据类型。有些方法并不会有返回值,此时将这个值设为void。
    • 方法名
    • 参数:
      • 形式参数:定义方法时,接收外界数据的接口。占位符
      • 实参:调用方法时传给方法的实际参数。
    • 方法体:包含了实现方法功能的语句。
  • 方法的基本格式如下

    修饰符 返回值类型 方法名(参数类型 参数名){

    ​ ...

    ​ 方法体

    ​ ...

    ​ return 返回值;

    }

    public class Demo02 {
        public static void main(String[] args) {
    
            System.out.println(isBigger(2,10)); // 调用比大小方法
    
        }
    
        // 比大小方法
        public static int isBigger(int a, int b){
            if (a>=b) {
                return a;
            }else {
                return b;
            }
        }
    }
    
    //10
    

方法的重载

  • 重载就是在一个类中,有相同的函数名称,但形参不同的方法。
  • 方法重载规则:
    • 方法名相同
    • 参数列表必须不同(个数、类型或者参数排序不同)
    • 方法的返回类型可以相同也可以不同
    • 仅仅返回类型不同不足以成为方法重载
  • 实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型去逐个匹配来选择对应的方法。但是若匹配失败就会报错。
public class Demo02 {
    public static void main(String[] args) {

        System.out.println(isBigger(2,10)); // 调用比大小方法
        System.out.println(isBigger(2.0, 10.0)); // 调用比大小方法,触发重载

    }

    // 比大小方法重载
    public static double isBigger(double a, double b){
        if (a>=b) {
            return a;
        }else {
            return b;
        }
    }

    // 比大小方法
    public static int isBigger(int a, int b){
        if (a>=b) {
            return a;
        }else {
            return b;
        }
    }
}

//10
//10.0

命令行传参

当你希望运行一个程序时再传递给它信息。这就要靠传递命令行参数给main()函数来实现。

public class Demo03 {
    public static void main(String[] args) { //args可以接受命令栏传入的参数
        for (String item : args) { //遍历args的元素
            System.out.println(item);
        }
    }
}

在终端中,Demo03.java的位置下输入:

javac Demo03.java

由此,Demo03.class被编译完成。

然后在src的位置,在终端中输入:

java Method.Demo03 Command Line Message

在运行Demo03的时候要加上包名 然后加上终端中传入的命令(Command Line Message)

得到的结果为,

Command
Line
Message

可变参数

  • JDK1.5开始,JAVA支持传递同类型的可变参数给一个方法。
  • 格式为,在指定参数类型后加省略号 ...
  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
public class Demo04 {
    public static void main(String[] args) {

        int sum = addition(1, 5, 7, 7, 10);

        System.out.println(sum);

    }


    // 不指定个数的求和
    public static int addition (int... numbers){
        int sum = 0;
        for (int number : numbers) {
            sum += number;
        }
        return sum;
    }
}

// 30

递归

  • 在一个方法内调用自己的结构被称为递归结构。

  • 递归可以简化重复嵌套的复杂问题。

  • 递归结构包括两部分:

    • 递归头:什么时候不调用自己。如果没有头,将陷入死循环。
    • 递归体:什么时候需要调用自己。
public class Demo05 {
    public static void main(String[] args) {

        System.out.println(ladder(6));
    }


    // 阶乘方法
    public static int ladder (int size) {

        if (size == 1) {
            return 1;
        } else {
            return size * ladder(size - 1);
        }
    }
}

练习:计算器

import java.util.Scanner;

// 写一个拥有加减乘除功能的计算器
public class Homework {
    
    public static void main(String[] args) throws InterruptedException {

        while (true) {
            int firstNumber = inputFirstNumber();
            int secondNumber = inputSecondNumber();
            String operation_type = inputOperation();

            switch (operation_type) {
                case "+":
                    System.out.println(firstNumber + "+" + secondNumber + "=" + addition(firstNumber, secondNumber));
                    break;

                case "-":
                    System.out.println(firstNumber + "-" + secondNumber + "=" + subtraction(firstNumber, secondNumber));
                    break;
                case "*":
                    System.out.println(firstNumber + "*" + secondNumber + "=" + multiplication(firstNumber, secondNumber));
                    break;
                case "/":
                    System.out.println(firstNumber + "/" + secondNumber + "=" + division(firstNumber, secondNumber));
                    break;
                default:
                    System.out.println("Not a valid operation");
                    continue;
            }

            break;
        }

        Scanner scanner1 = new Scanner(System.in);
        scanner1.close();

    }

    // 输入运算符
    public static String inputOperation() {
        Scanner scanner1 = new Scanner(System.in);
        String operation_type;

        System.out.println("Please enter the operation:");
        operation_type = scanner1.next();

        return operation_type;
    }

    // 输入第一个数字
    public static int inputFirstNumber() {
        Scanner scanner1 = new Scanner(System.in);
        int firstNumber;

        while (true) {

            System.out.println("Please enter the first number");
            if (scanner1.hasNextInt()) {
                firstNumber = scanner1.nextInt();
                break;
            } else {
                System.out.println("Not a valid number");
                scanner1.nextLine();
            }
        }

        return firstNumber;
    }

    // 输入第二个数字
    public static int inputSecondNumber() {
        Scanner scanner1 = new Scanner(System.in);
        int secondNumber;

        while (true) {

            System.out.println("Please enter the second number");
            if (scanner1.hasNextInt()) {
                secondNumber = scanner1.nextInt();
                break;
            } else {
                System.out.println("Not a valid number");
                scanner1.nextLine();
            }
        }

        return secondNumber;
    }

    // 加
    public static double addition(int a, int b){
        return a + b;
    }

    // 减
    public static double subtraction(int a, int b){
        return a - b;
    }

    // 乘
    public static double multiplication(int a, int b){
        return a * b;
    }

    // 除
    public static double division(int a, int b) {
        return (double) a / b;
    }
posted @ 2021-02-24 16:00  cutomorrow  阅读(94)  评论(0)    收藏  举报