【狂神说Java笔记】Java方法

本文深入探讨Java方法,从方法的基本概念、定义与调用,到方法的重载,以及如何通过命令行传递参数。还介绍了JDK 1.5引入的可变参数和递归应用,是Java开发者的重要参考资料。
摘要由CSDN通过智能技术生成

Java方法01:什么是方法?

System.out.println():System类名;out对象名;println方法名。

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

  • 方法是解决一类问题的步骤的有序组合。

  • 方法包含于类或对象中。

  • 方法在程序中被创建,在其他地方被引用。

设计方法的原则:一个方法只完成1个功能。

Java方法02:方法的定义和调用

Java的方法类似于C语言的函数,是一段用来完成特定功能的代码片段。

方法的定义:
修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
	...
    return 返回值;
}

修饰符:可选。定义了该方法的访问类型,告诉编译器如何调用该方法。

返回值类型:方法可能会有返回值,如果没有返回值,则写void

方法名命名规范:首字母小写和驼峰原则,如:firstSecond()

参数类型和参数名:可选。当方法被调用时,传递值给参数名。传递的值是实际参数,参数名是形式参数。

参数列表:是指方法的参数类型、顺序和个数。

方法体:包含具体的语句,是该方法的功能实现。

方法的调用

如果方法有返回值,方法调用通常被当作一个值。

int larger = max(30,40);

如果方法返回值为void,方法调用就相当于一条语句。

System.out.println("Hello, world!");
拓展

Java都是值传递。

Java方法03:方法的重载

方法的重载

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

规则

方法名称必须相同。

参数列表必须不同:个数不同、类型不同、排列顺序不同(各参数不能是同一类型),满足其一即可。

方法的返回值类型可以相同也可以不同。仅仅是返回类型不同不足以成为方法的重载。

实现理论

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

//虽然排列顺序不同,但各参数都是同一类型,会报错
//编译器匹配的时候与参数名无关,只与类型有关
public class AddMethod {
    public static void main(String[] args){
        int sum = add(1, 2);
        System.out.println(sum);
    }

    public static int add(int a, int b){
        return a+b;
    }
    public static int add(int b, int a){
        return a+b;
    }
}
package method;

public class AddMethod {
    public static void main(String[] args){
        double sum = add(1, 2.0);
        double sum1 = add(1.0, 2);
        System.out.println("sum = " + sum);
        System.out.println("sum1 = " + sum1);
    }

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

Java方法04:命令行传递参数

有时候需要在运行程序的时候再传递给它消息。这要靠传递命令行参数给main()函数实现。

package method;

public class CmdTransferPara {
    public static void main(String[] args){
        for (int i=0; i < args.length; i++){
            System.out.println("args[" + i + "]:" + args[i]);
        }
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SvkaMgXp-1661741921110)(JAVA全栈.assets/image-20220620220627349.png)]

输入javac method.CmdTransferPara会报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZuCIXWhs-1661741921120)(JAVA全栈.assets/image-20220620221734743.png)]

需要到该类名目录下编译.java文件,输入cd BasicGrammar\src\method

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a4S6rz93-1661741921123)(JAVA全栈.assets/image-20220620222546419.png)]

输入javac CmdTransferPara.java

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v55hsaWA-1661741921125)(JAVA全栈.assets/image-20220620222642548.png)]

尝试输入java CmdTransferPara会报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6JBbzBAF-1661741921127)(JAVA全栈.assets/image-20220620222817533.png)]

这时需要输入cd ..返回到src目录下,输入java method.CmdTransferPara

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KxKaaZB3-1661741921129)(JAVA全栈.assets/image-20220620223005742.png)]

能运行,但是没有输出内容

尝试输入java method.CmdTransferPara This is a test.传递参数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OGAKYKFW-1661741921131)(JAVA全栈.assets/image-20220620223135003.png)]

成功得到正确的结果。

总结

  1. 使用 javac 命令编译,需要在 .java 文件名录下进行编译。
  2. 使用 java 命令运行,如果编译过的 .java 文件有包名,则需要在包名所在目录下进行运行。

Java方法05:可变参数

JDK 1.5 开始, java支持传递同类型的可变参数给一个方法。

可变参数语法:

  • 在方法声明中,在指定参数类型后加一个省略号(…)。

  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。

package method;

// 可变参数
public class VarPara {
    public static void main(String[] args){
        VarPara varpara = new VarPara();
        varpara.test(1, 2, 3, 4, 5);
    }

    public void test(int x, int... i){
        System.out.println("x = " + x);

        //可变参数存入数组中,以数组的形式输出
        System.out.println("i[0] = " + i[0]);
        System.out.println("i[1] = " + i[1]);
        System.out.println("i[2] = " + i[2]);
        System.out.println("i[3] = " + i[3]);
    }
}
package method;

// 打印可变参数中储存的最大值
public class VarParaPrintMax {
    public static void main(String[] args){
        printMax();

        System.out.println("------------------------");
        printMax(34, 3, 3, 2, 56.5);
        
        System.out.println("------------------------");
        printMax(new double[]{1, 2, 3});
    }

    public static void printMax(double... numbers){
        if(numbers.length == 0){
            System.out.println("No argument passed!");  // 没有参数传入
            return;
        }

        double result = numbers[0];

        for(int i = 1; i < numbers.length; i++){
            if(numbers[i] > result){
                result = numbers[i];
            }
        }
        System.out.println("The Max of numbers is " + result);
    }
}

Java方法06:递归讲解

面试常问

package method;

/*
递归调用:
如此自己调用自己会导致栈溢出
 */
public class Recursion {
    public static void main(String[] args){
        test();
    }

    public static void test(){
        test();
    }
}

package method;

/*
阶乘:
    负数没有阶乘;
    0的阶乘是1
    逻辑或运算符:||
*/
public class Factorial {
    public static void main(String[] args){
        System.out.println("!5 = " + factorial(5));
        System.out.println("!1 = " + factorial(1));
        System.out.println("!0 = " + factorial(0));
        System.out.println("!-2 = " + factorial(-2));
    }

    public static int factorial(int n){
        if(n < 0){
            return -1;  // -1 表示阶乘不存在
        }
        if(n == 0 || n == 1){
            return 1;
        }else{
            return n*(factorial(n-1));
        }
    }
}

package method;

import java.util.Scanner;

/**
 * 写一个计算器,通过用户交互实现加减乘除功能,并且能够循环接收新的数据。
 * 参考:https://blog.csdn.net/ppp_melody/article/details/116515970?spm=1001.2014.3001.5502
 * 待完善:数据输入、输出;界面。
 */

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

        System.out.println("请输入数字后回车,开始计算(退出计算,请输入非数字):");
        while(scanner.hasNextDouble()){
            double num1 = scanner.nextDouble();

            System.out.println("请输入运算符后回车:");
            String operator = scanner.next();

            System.out.println("请输入数字后回车:");
            double num2 = scanner.nextDouble();

            System.out.println("计算结果:");
            switch(operator){
                case "+": add(num1, num2); break;
                case "-": sub(num1, num2); break;
                case "*": mul(num1, num2); break;
                case "/": div(num1, num2); break;
            }

            System.out.println("请输入数字后回车,开始计算(退出计算,请输入非数字):");
        }
        scanner.close();
    }

    public static void add(double i, double j){
        System.out.println(i+j);
    }

    public static void sub(double i, double j){
        System.out.println(i-j);
    }

    public static void mul(double i, double j){
        System.out.println(i*j);
    }

    public static void div(double i, double j){
        System.out.println(i/j);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值