从零开始学Java【11】

从零开始学Java【11】


​ 学习视频:https://www.bilibili.com/video/BV12J41137hu?p=45

何谓方法?

image-20220428105529590

其中,System.out.println()表示的意思是:System类中的out对象,out对象中的println方法,调用类中对象的方法

表示方式:类.对象.方法()

一般设计方法的原则是原子性:一个方法完成一个功能,这样容易后期扩展

方法的命名:首字母小写的驼峰命名规则

例如:

image-20220428110333975

其中的add就是方法,加static变成类变量可以直接在主函数内直接调用,实参1,2,传入add虚参进行加法运算,再返回结果赋值给sum,最后再输出sum为3.

image-20220428111950241

上节课讲的打印三角形,把它封装成一个方法:printtriangle(注意是static类变量)空类型的,所以在调用的时候不用赋实参,直接就可以打印出来了。

image-20220428111841023

总结

①main方法要始终保持干净,尽量使用调用方法

②如果想要可以直接调用方法,直接用static把方法变成类变量

③上述例子中,add方法是int方法,需要传入参数,printtriangle是void空方法,不用传参。

ctrl+/快速注释快捷键。(视频中用到的)

方法的定义

image-20220428114028670

修饰符像public,private这些,后面会讲到

返回值类型:根据返回值类型可以确定这个函数的类型。比如返回值是空的,那么这个方法函数就是void类型,如果返回值是int,那么这个方法就是int类型。

参数类型:形参和实参,也就是跟C语言中的形参实参传入一样。比如add中,int a,int b就是形参,a:1,b:2就是实参。

方法体:就是方法{}中实现的具体代码。注意如果不是void方法,就一定有return,不可忽视这个玩意。

例子

image-20220428120218755

其中需要注意的是,return 的作用不单止返回结果,还有终止方法的作用。比如当num1==num2的时候,

return 0就是终止方法,该方法返回0,直接输出结果的意思。

image-20220428122105017

具体关于return返回值的用法如下:

image-20220428121304765

可以看到,return 0 就是正常退出程序的意思,return 0 与return都是退出方法的意思。

方法的调用

image-20220428115951991

还是以上面的例子说明:

①不是void空方法。比如max方法,它是int类型的,那么它在主函数main调用的时候,通常需要一个容器来装载这个东西的,因为max方法它返回的是一个值,所以这个值被装到一个变量max(这里max和max方法重名了)里面,然后后续对max变量进行操作。

②是void空方法。比如printtriangle方法,在主函数直接用就可以了,直接写:printtriangle(); 就可以运行了。

另外:Java是值传递。先这么记着先。C语言有引用传递,用到了指针的知识。

方法的重载

image-20220428122520705

例子:比大小

image-20220428163602820

重载的好处是可以对一个方法进行更详细、更广泛的应用,例子重载了max函数方法,一个是int整型,另一个是double双精度浮点型,这样max方法输入参数的时候,就可以不再局限于整型了。在main函数的时候直接用max,输入的实参无论是整数还是小数都可以,这样的话拓宽了函数方法的使用面,更加完善了。

代码如下:

package com.zhang.Method;

public class Demo03 {
    public static void main(String[] args) {
        /*这里写max方法之后,输入参数(整型浮点型都行)之后,直接alt+回车,就
        可以自动补全了,这里分别把重载的两种返回值给了两种容器,看输出是没有问题的*/
        double max1 = max(10.5, 12.5, 13.5);
        int max2 = max(10, 20);
        System.out.println(max1);
        System.out.println(max2);
    }
    //比大小:整型
    public static int max(int num1,int num2){
        int result = 0;
        if (num1 == num2){
            System.out.println("相等");
            return 0;//终止方法
        }
        if (num1 > num2){
            result = num1;
        }else {
            result =num2;
        }
        return result;
    }
    //重载方法:比大小:双精度浮点型
    public static double max(double num1,double num2){
        double result = 0;
        if (num1 == num2){
            System.out.println("相等");
            return 0;//终止方法
        }
        if (num1 > num2){
            result = num1;
        }else {
            result =num2;
        }
        return result;
    }
    //重载方法:比大小:双精度浮点型(三个参数)
    public static double max(double num1,double num2,double num3) {
        double result = 0;
        if (num1 == num2 && num2 == num3) {
            System.out.println("相等");
            return 0;//终止方法
        }
        if (num1 > num2 && num1 > num3) {
            result = num1;
        } else if (num1 < num2 && num2 > num3) {
            result = num2;
        } else {
            result = num3;
        }
        return result;
    }
}

image-20220428171320760

总结

重载的方法名字必须相同,除此之外,像参数类型,方法类型,甚至参数个数等等都可以不同,自由发挥

方法名字相同时,编译器会根据调用方法的参数个数、类型进行匹配,从而选择对应的方法,如果匹配失败就报错。

命令行传递参数

代码如下:

image-20220428174302245

main函数的参数“String[] args”,通过遍历长度:args.length(长度就是我们要输入的长度),然后进行输出内容,此次代码用命令行编译,在Java下方点击Terminal可以进入类似于cmd的界面

image-20220428174903490

然后进入对应路径,进行编译,可以发现,编译成功,并且生成了class文件(javac是编译Java文件的cmd指令)

image-20220428174947352

但如果直接执行的话:

image-20220428180536881

因为这个Java文件在 package com.zhang.Method;,所以应该路径应该退到src路径下:

image-20220428180724115

在执行的时候,要: Java 包名.文件名

image-20220428181044164

可以看到可以执行了,接下来就为它传递参数:

image-20220428181245506

从而实现用命令行实现传参

总结

①当要运行class文件,需要找到它包的位置,退回到包所在的原始路径,再去加载,否则是执行不了的。

②main方法原来也可以进行传参的。

可变参数

因为像方法的重载,比如上面的max方法,时而有两个参数,时而有三个参数,比如下图:

image-20220428193023688

image-20220428191908412

参数有时候两个,有时候三个,有时候非常多个,重载起来很麻烦,那其实可以在里面弄一个可变参数,可以把很多个相同类型的值传给它,这样参数有多少个也没问题了

image-20220428192108305

比如在括号里面填写:int... i

image-20220428193853376

构建一个test方法输出可变参数i,在主函数新建对象demo05,调用demo05的方法test,进行输出,可以看到一串不知道是什么的东西。这个先别管,先看改进后的代码:

image-20220428194118944

可以把这个可变参数看作一个数组,主函数输入一个1,那么就是这个可变参数的第1个,也就是数组的[0]。

image-20220428194251485

又往可变参数输入了五个数字,输出i[2],也就是第三个,即数字3.

如果可变参数里面啥都没有,会报错:数组下标越界

image-20220428194503427

所以可变参数本质就是数组,下一章节会讲到。

总结

①可变参数本质上是数组。用法上述已说。

②它必须是方法的最后一个参数

image-20220428194816412

image-20220428194900623

③它的所有传参都必须同一个类型,比如int...i,传入的参数就必须都是int类型,如果传入其它类型会报错

image-20220428195137699

这个图里面的代码是用到了排序算法,现阶段很难理解这个代码,先放一边,不过可以观察到代码用到了可变参数double...number。

posted @ 2022-04-28 19:57  机智的小柴胡  阅读(37)  评论(0)    收藏  举报