Java入门(十三)

Java入门(十三)

Java 方法详解

  • 什么叫做方法?日常生活中就是我们要解决某些事情而要采取的解决办法。比如你们今天要来学校学习,你要怎么过来呢?你是通过公交车、打的?这些解决问题的东西都叫做方法。
  • 在Java当中方法是用来完成某些事情的,比如写一个添加的方法叫做add() ,把 1 和 2 添加进去 add(1,2)他就会返回一个3 。这就是加法的方法,以前用过的println()这些都是方法。
  1. 首选了解什么是方法
  2. 方法的定义及调用
  3. 方法重载
  4. 命令行传参
  5. 可变参数
  6. 递归

什么是方法?

  • System.out.println() ,是什么呢?他是输出语句,但为什么呢?结构是什么呢?System他是一个系统的类,out是System下一个输出的对象,println() 他就是一个方法。回想之前的scanner.nextLine() 这些方法都是点"."出来的,这些东西都是Java里面的方法
  • System.out.println() 就是调用系统中输出对象的out中的方法println。
  • 方法是语句的集合,他们在一起能够执行一个功能。我们用经常用a+b去计算会非常麻烦,我们就用一个公共的东西把他提取出来
  • 方法的命名规则是首字母小写,后面是驼峰命名规则。
  • 每次我们输入 public static void main (String[] args) 就出现了一个main方法。这个方法是交给程序管的,不是我们自己去写的。我们要写的方法一般都会写在他的外面。
  • 先写一个加法,int是他的返回值,比如main方法里面修饰main的是void,他代表一个返回值,执行完就结束了。但是咱们加法 1+1要等于2,所以int就是这里来的。我们加法需要两个数,就给他设置两个参数int a 和 int b。这两个数是形式的,待会用的时候要给他传实际的。return一个 a+b
    public static void main(String[] args) {
    }
    //加法
    public int add(int a,int b){
        return a+b;
    }
  • 那么写完之后就要用,但是在main里面直接调用add()是用不了的。我们要在 前面加上一个static让他变成一个类变量就可以使用了。这时候我们给他返回一个值
    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;
    }

在这里插入图片描述
在这里插入图片描述

  • 使用debug分析为什么等于3 。首选进main方法的参数是空的
    在这里插入图片描述
  • 下一步到了add方法直接跳到了add()里面执行 ,a=1,b=2,他就会把值进行一些运算。
    在这里插入图片描述
  • 在下一步就是3了,它相当于调用了一个方法去执行的。
    在这里插入图片描述
  • 方法是解决一类问题的步骤的有序组合,方法包含于类或对象中,方法在程序中被创建,在其他地方被引用。我们可以把写好的功能都抽取成一个一个的功能,要用的直接去用就好了。
  • 设计方法的原则:一个方法只完成1个功能,这样有利于我们后期的扩展。
  • 比如说之前写的一个功能:用for循环输出1-100能被5整除的数,并且每行输出3个
        for(int i = 0;i<=100;i++){
            if(i%5==0){
                System.out.print(i+"\t");
            }
            if(i%15==0){
                System.out.println();
            }
        }
  • 那么我们把这一段功能提出来
    public static void test(){
        for(int i = 0;i<=100;i++){
            if(i%5==0){
                System.out.print(i+"\t");
            }
            if(i%15==0){
                System.out.println();
            }
        }
  • 调用方法的时候直接使用 test就可以了
    public static void main(String[] args) {
//        int sum = add(1, 2);
//        System.out.println(sum);
        test();
    }

在这里插入图片描述

  • main方法要时刻保持简介干净,尽量把一些公共模块都通过方法形式提取到外面来。

方法的定义

  • Java方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,定义一个方法包含以下语法:修饰符、返回值类型、方法名、参数类型、方法体。
修饰符  返回值类型  方法名(参数类型  参数名){
	...
	方法体
	...
	return   返回值
}
  • 修饰符可以有多个(public、static、final),可写可不写。

  • 方法的返回值,上面写了一个int类型和一个void类型,加减乘除以他会返回一个数字,returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值,returnValueType是关键字void。

  • 方法名:Java里面所有东西都需要有一个名字,方法名就是方法实际的名字,名字要遵循驼峰命名规范。

  • 参数类型:参数就是我们可以给他传递一些具体的值,让他运算。像上面写的test()我们没有传递参数也是可以直接运行的。参数更像是一个占位符。方法里面有两个东西,一个叫做实参,一个叫做形参。实参就是调用方法实际传递给他的参数,形参就是定义方法的时候随便给他编的。比如 add(int a , int b) 这个就是形式上给他定义的两个参数。调用方法的时候 int sum = add(1,2) 就把 1赋值给了a,2赋值给了b。这就是实际调用给他传递的参数,叫做实参。

  • 方法体:是方法里面包含的任何语句,他定义的一些功能。

  • return:如果方法存在返回值,一定要把返回值通过return关键字返回出去。如果是void就不用了。

  • 来写一个比大小的方法。首先要写一个public,公共的,代表每个人都可以使用它。static相当于告诉大家我要直接调用它,是一个类变量。比大小的方法会返回一个数,那么写int。方法名max。

public static int max()
  • 比大小必须要有两个形式参数,那么给两个int 数。如下面代码,return一般不写在if里面,而是写在最外面。
    public static int max(int num1,int num2){
        if (num1 > num2){
            return num1;
        }
    }
  • 那怎么把num1返回出来呢?可以定义一个变量
    public static int max(int num1,int num2){
        int result;
        if (num1 > num2){
            result =  num1;
        }
        return result;
    }
  • return 这个result会有一条红线,告诉你没有初始化值。
    在这里插入图片描述
  • 比如初始化的值为-1,不管取多少,都会被下面的代码给覆盖掉
    public static int max(int num1,int num2){
        int result = 0;
        if (num1 > num2){
            result =  num1;
        }
        return result;
    }
  • 在加个判断,return除了返回的意思,还有终止方法的意思。程序一旦碰到return,这个方法就结束了。
    public static int max(int num1,int num2){
        int result;
        if (num1 == num2){
            System.out.println("num1==num2");
            return 0;
        }
        if (num1 > num2){
            result =  num1;
        }else{
            result = num2;
        }
        return result;
    }
  • 现在我们比一下大小
    public static void main(String[] args) {
        int max = max(10, 20);
        System.out.println(max);
    }
  • 方法调用的方式有两种,如果方法有返回值的时候,一般方法调用会当做一个值来处理。如果方法为空(void),那么方法调用一定是一条语句,比如System.out.println 。点击println()这个方法进去看 。println就是传递x的值进去
    在这里插入图片描述
  • 返回的结果是
    在这里插入图片描述- 再来比较相同的结果 10 跟 10
    在这里插入图片描述
  • java是值传递,main方法是被java虚拟机调用的,除此main方法和普通正常的方法没有任何区别。java中只有值传递,有个拷贝的概念。方法可以实现共用,后面学到对象,就可以通过类调用到他。

方法的重载

  • 重载就是在一个类中,有相同的函数名称,但形参不同的函数。比如上面的max方法,只适用于int,如果我给他传了一个double,10.0 ,他就比不了大小了
    在这里插入图片描述
  • 我们可以再定义一个一模一样的方法,把类型改成double,最后返回值也改成double,那么他就会比较两个double了。
        double max = max(10.0, 10.0);
        System.out.println(max);
    }
    public static int max(int num1,int num2){
        int result;
        if (num1 == num2){
            System.out.println("num1==num2");
            return 0;
        }
        if (num1 > num2){
            result =  num1;
        }else{
            result = num2;
        }
        return result;
    }
    public static double max(double num1,double num2){
        double result;
        if (num1 == num2){
            System.out.println("num1==num2");
            return 0;
        }
        if (num1 > num2){
            result =  num1;
        }else{
            result = num2;
        }
        return result;
    }

在这里插入图片描述

  • 这时就把一个普通的方法变成一个重载的方法了。
  • 如果现在比较 10 跟 20,那么他还是会走double,因为现在还是 double max = max (10,20) 。所以我们把它改回来
int max = max(20, 10);

在这里插入图片描述

  • 名字都用max,但是你调用int就用int类型的方法,调用double就用double类型的方法,这就是方法的重载。说白了就是一个类里面有两个相同的方法,只是参数不同,如果参数一样就崩了。jvm的编译器会根据方法的参数类型,判断到底执行哪个。
  • 方法重载可以让程序更加清晰易读,比如我们还可以来3个数比较大小,只要你理清了逻辑就行。方法可以有无限多重名的,但是要确定参数类型不同。
    public static int max(int num1,int num2 ,int num3){
        
    }
  • 参数列表必须不同(个数不同、或类型不同、或参数排列顺序不同等)
  • 方法的返回类型可以相同也可以不相同。方法名称相同的时候,java编译器会根据调用方法的参数个数,参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。比如我再加一个参数的时候他匹配不到对应参数个数,就会报错
    在这里插入图片描述

命令行传参

  • 比如java、javac命令可以在命令行上面操作,java程序也是可以的。有时候你希望在命令行上给程序传递消息,就需要把参数传递给main方法实现。
  • main方法的构成是 public static void main (String args[]) ,其中String args[]里面是可以给他传递参数的。args[] 是一个数组,我们可以把他里面的东西打印出来看到。
  • args.length表示数组的长度,下面代码的含义就是遍历每一个参数
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {

        }
    }
  • 我们可以通过下标来看,数组里面有很多元素,可以通过下标访问。从0开始看到每一个元素。然后给他添加一些修饰的词可以看到当前第几个值是什么。
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "]: " + args[i]);
        }
    }
  • 在idea下面有一个terminal
    在这里插入图片描述
  • 我们可以再这个终端里面执行一下他,结果报错
javac Demo03.java

在这里插入图片描述

  • 我们知道代码里面有个package,如果路径不对是执行不了的。退到base上一级,然后java执行全路径的文件
    在这里插入图片描述
 java base/Chaptor12/method/Demo03
 java base.Chaptor12.method.Demo03
  • 上面执行因为没有给参数所以没有显示任何的东西。之前说过String[] args 我们可以给他丢一个数组一样的东西。
java base.Chaptor12.method.Demo03  this is kuangshen

在这里插入图片描述

可变参数

  • 在方法有很多不确定的参数的时候,我们会写很多类,然后写很多方法代替他。我们可以用可变参数把他替代,可变参数(不定项参数)可以传递很多值给他。
  • 在方法声明中,在指定参数类型后加一个省略号(…)
  • 一个方法只能指定一个可变参数,他必须是方法的最后一个参数,任何普通参数都必须在他之前声明。 eg:
    public static void printMax( double... numbers){
        if (numbers.length == 0){
            System.out.println("No argument passwd");
            return;
        }
        double result = numbers[0];
        //排序1
        for (int i = 1; i< numbers.length; i++){
            if (numbers[i] > result){
                result = numbers[i];
            }
        }
        System.out.println("The max value is " + result);
    }
  • 比如说我们想写一个可边长参数。写一个test方法,然后new一个类,他会返回当前。实参什么都不写会输出一个对象的值
    public static void main(String[] args) {
        Demo05 demo05 = new Demo05();
        demo05.test();
    }
    public void test(int... i){
        System.out.println(i);
    }

在这里插入图片描述

  • 比方说现在传递输出一个数组,会报一个异常
System.out.println(i[0]);

在这里插入图片描述

  • 可边长参数必须在最后面,所有传递参数必须一个类型。
    在这里插入图片描述
    在这里插入图片描述
  • 刚才上面写了一个排序代码。意思是打印最大的参数,但是不确定传递的有多少参数。判断传递的参数是否等于0,如果等于0就代表你没有传递参数,就打印一个参数然后返回。result返回值是一个数组。for循环如果他遍历出来的数比result大一点,就把遍历出来的数赋值给result。
    public static void printMax( double... numbers){
        if (numbers.length == 0){
            System.out.println("No argument passwd");
            return;
        }
        double result = numbers[0];
        //排序1
        for (int i = 1; i< numbers.length; i++){
            if (numbers[i] > result){
                result = numbers[i];
            }
        }
        System.out.println("The max value is " + result);
    }
  • 跑一下
    public static void main(String[] args) {
        printMax(34,3,3,2,56.5);
        printMax(new double[]{1,2,3});
    }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值