编程语言
首页 > 编程语言> > Java学习笔记(No.10)

Java学习笔记(No.10)

作者:互联网

Java方法详解(No.10)

1、方法的含义及设计原则(The Meaning And Design Principle Of The Method)

1.1、方法的含义(Meaning Of Method)

Java方法是语句的集合,它们在一起执行一个功能

1.2、方法的设计原则(The Design Principle Of The Method)

Java方法的本意是功能块,就是实现某个功能的语句块的集合。在设计方法的时候,最好保持方法的原子性(即,每一个方法只完成一个功能,有利于后续程序的扩展)

2、方法的定义与调用(Definition And Call Of Method)

2.1、方法的定义(Definition Of Method)

Java方法类似于其它语言的函数,是一段用来完成特定功能的代码片段。其包含一个方法头和一个方法体

2.2、方法的语法(Grammar Of Method)

2.3、方法的调用(Call Of Method)

Java支持2种调用方法的方式,根据方法是否有返回值来选择

2.4、示例(Example)

其示例,如以下代码所示

package com.xueshanxuehai.Method;
public class DefinitionAndCallMethod {
    public static void main(String[] args) {
        System.out.println("调用有参有返回值方法:");
        System.out.println("=============================");
        //实际参数:实际调用传递给方法的参数
        int maxNum = max(1, 2);
        if(maxNum==0){
            System.out.println("2个数字值相等");
        }else{
            System.out.println("2个数字中的最大数字:"+maxNum);
        }
        System.out.println("=============================");
        System.out.println("调用无参无返回值方法:");
        System.out.println("=============================");
        testMethod();
        System.out.println("=============================");
    }
    //有参有返回值方法
    //比较2个数字的大小
    //形式参数:定义方法的参数
    public static int max(int num1,int num2){
        int maxNum=0;
        if(num1==num2){
            return 0;//返回数值并终止方法
        }else if(num1>num2){
            maxNum=num1;
        }else{
            maxNum=num2;
        }
        return maxNum;//返回数值并终止方法
    }
    //无参无返回值方法
    public static void testMethod(){
        System.out.println("Hello!World!");
    }
}

其运行结果,如下图所示

方法的定义与调用运行结果

2.5、注意事项(Matters Needing Attention)

Java方法的参数都是值传递(Value Delivery),不是地址传递(Address Delivery,[即,引用传递(Reference Delivery)])

3、方法的重载(Overload Of Method)

方法的重载就是在一个类中,有相同的方法名称,但形参不同的方法

3.1、重载规则(Overload Rule)

3.2、实现理论(Realization Theory)

方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,若匹配失败,则编译器报错

3.3、示例(Example)

其示例,如以下代码所示

package com.xueshanxuehai.Method;
public class OverloadMethod {
    public static void main(String[] args) {
        System.out.println("方法的重载");
        System.out.println("*****************************");
        System.out.println("调用返回类型int的max方法:");
        System.out.println("=============================");
        int maxNumInt = max(1, 2);
        if(maxNumInt==0){
            System.out.println("2个数字值相等");
        }else{
            System.out.println("2个数字中的最大数字:"+maxNumInt);
        }
        System.out.println("=============================");
        System.out.println("调用返回类型double的max方法:");
        System.out.println("=============================");
        double maxNumDouble = max(1.0, 2.0);
        if(maxNumDouble==0){
            System.out.println("2个数字值相等");
        }else{
            System.out.println("2个数字中的最大数字:"+maxNumDouble);
        }
        System.out.println("=============================");
        System.out.println("*****************************");
    }
    //比较2个数字的大小,int类型返回值的方法
    public static int max(int num1,int num2){
        int maxNum=0;
        if(num1==num2){
            return 0;//返回数值并终止方法
        }else if(num1>num2){
            maxNum=num1;
        }else{
            maxNum=num2;
        }
        return maxNum;//返回数值并终止方法
    }
    //比较2个数字的大小,int类型返回值的方法
    public static double max(double num1,double num2){
        double maxNum=0.0;
        if(num1==num2){
            return 0.0;//返回数值并终止方法
        }else if(num1>num2){
            maxNum=num1;
        }else{
            maxNum=num2;
        }
        return maxNum;//返回数值并终止方法
    }
}

其运行结果,如下图所示

方法的重载运行结果

4、命令行传递参数(Command Line Delivery Parameter)

有时候希望运行一个程序时再传递给它参数信息,这时候需要靠传递命令行参数给main()方法实现,如以下代码所示

package com.xueshanxuehai.Method;
public class CommandLineDeliveryParameter {
    public static void main(String[] args) {
        //args.length 数组长度
        for (int i = 0; i < args.length; i++) {
            System.out.println("args["+i+"]="+args[i]);
        }
    }
}

其运行结果,如下图所示

命令行传递参数运行结果

5、可变参数(Variable Parameter)

从Java SE 5[即,JDK5]开始,Java支持传递同类型的可变参数给一个方法

其语法格式为:

“修饰符 返回值类型 方法名称([参数类型1 参数名称1 [,参数类型… 参数名称… [,参数类型n 参数名称n]]] [,] 可变参数类型… 可变参数名称){

…//方法体

return 返回值;//若返回值类型为void,则无需此语句,否则,需要此语句

}”

其示例,如以下代码所示

package com.xueshanxuehai.Method;
public class VariableParameter {
    public static void main(String[] args) {
        //调用可变参数方法
        printMax("(可变参数方法调用1)",11.11,3,22.22,5.5);
        printMax("(可变参数方法调用2)",new double[]{1,9.9,3});
    }
    public static void printMax(String str,double... numbers){
        if(numbers.length==0){
            System.out.println(str+"未传递可变参数!!!");
            return;
        }
        double result=numbers[0];
        //查找可变参数中最大数
        for (int i = 0; i < numbers.length; i++) {
            if(result<numbers[i]){
                result=numbers[i];
            }
        }
        System.out.println(str+"可变参数中最大数:"+result);
    }
}

其运行结果,如下图所示

可变参数方法运行结果

6、递归方法(Recursive Method)

递归方法就是方法自身调用方法自身(如:A方法调用A方法)

7、扩展应用(Extended Application)

实现需求:“写一个控制台计算器,要求实现加减乘除功能,并且能够循环接收新数据,通过用户交互实现”

package com.xueshanxuehai.Method;
import java.util.Scanner;
public class ConsoleCalculator {
    public static void main(String[] args) {
        //写一个控制台计算器,要求实现加减乘除功能,并且能够循环接收新数据,通过用户交互实现。
        Scanner scanner = new Scanner(System.in);//创建扫描器对象scanner
        boolean operator = true;
//        System.out.println("控制台计算器(只能加、减、乘、除计算功能):");
        while (operator) {
            System.out.println("请输入加、减、乘、除运算符号(只能输入\"+\"、\"-\"、\"*\"、\"/\",若输入其它字符则退出计算):");
            if (scanner.hasNext()) {
                String str = scanner.next();
                switch (str) {
                    case "+"://加法
                        System.out.println("请输入加法中第1个操作数:");
                        if (scanner.hasNextDouble()) {
                            double dbl1 = scanner.nextDouble();
                            System.out.println("请输入加法中第2个操作数:");
                            if (scanner.hasNextDouble()) {
                                double dbl2 = scanner.nextDouble();
                                System.out.println("(加法运算)" + dbl1 + "+" + dbl2 + "=" + addition(dbl1, dbl2));
                            } else {
                                scanner.next();
                                System.out.println("加法中第2个操作数类型输入有误(请重新开始输入)");
                            }
                        } else {
                            scanner.next();
                            System.out.println("加法中第1个操作数类型输入有误(请重新开始输入)");
                        }
                        break;
                    case "-"://减法
                        System.out.println("请输入减法中第1个操作数:");
                        if (scanner.hasNextDouble()) {
                            double dbl1 = scanner.nextDouble();
                            System.out.println("请输入减法中第2个操作数:");
                            if (scanner.hasNextDouble()) {
                                double dbl2 = scanner.nextDouble();
                                System.out.println("(减法运算)" + dbl1 + "-" + dbl2 + "=" + subtraction(dbl1, dbl2));
                            } else {
                                scanner.next();
                                System.out.println("减法中第2个操作数类型输入有误(请重新开始输入)");
                            }
                        } else {
                            scanner.next();
                            System.out.println("减法中第1个操作数类型输入有误(请重新开始输入)");
                        }
                        break;
                    case "*"://乘法
                        System.out.println("请输入乘法中第1个操作数:");
                        if (scanner.hasNextDouble()) {
                            double dbl1 = scanner.nextDouble();
                            System.out.println("请输入乘法中第2个操作数:");
                            if (scanner.hasNextDouble()) {
                                double dbl2 = scanner.nextDouble();
                                System.out.println("(乘法运算)" + dbl1 + "*" + dbl2 + "=" + multiplication(dbl1, dbl2));
                            } else {
                                scanner.next();
                                System.out.println("乘法中第2个操作数类型输入有误(请重新开始输入)");
                            }
                        } else {
                            scanner.next();
                            System.out.println("乘法中第1个操作数类型输入有误(请重新开始输入)");
                        }
                        break;
                    case "/"://除法
                        System.out.println("请输入除法中第1个操作数:");
                        if (scanner.hasNextDouble()) {
                            double dbl1 = scanner.nextDouble();
                            System.out.println("请输入除法中第2个操作数:");
                            if (scanner.hasNextDouble()) {
                                double dbl2 = scanner.nextDouble();
                                System.out.println("(除法运算)" + dbl1 + "/" + dbl2 + "=" + division(dbl1, dbl2));
                            } else {
                                scanner.next();
                                System.out.println("除法中第2个操作数类型输入有误(请重新开始输入)");
                            }
                        } else {
                            scanner.next();
                            System.out.println("除法中第1个操作数类型输入有误(请重新开始输入)");
                        }
                        break;
                    default://其他情形
                        operator = false;//退出While循环
                        break;
                }
            } else {
                scanner.next();
            }
        }
        System.out.println("加、减、乘、除计算已结束");
        scanner.close();//关闭扫描器对象scanner(若不关闭会一直占用内存空间资源)
    }
    //加法
    public static double addition(double add1, double add2) {
        return add1 + add2;
    }
    //减法
    public static double subtraction(double sub1, double sub2) {
        return sub1 - sub2;
    }
    //乘法
    public static double multiplication(double mul1, double mul2) {
        return mul1 * mul2;
    }
    //除法
    public static double division(double div1, double div2) {
        return div1 / div2;
    }
}

其运行结果,如下图所示

控制台计算器运行结果

参考资料:

学习网址:Java方法详解

标签:No.10,Java,scanner,double,System,笔记,println,方法,out
来源: https://blog.csdn.net/baidu_28055785/article/details/117635616