从零开始学Java【11】
从零开始学Java【11】
学习视频:https://www.bilibili.com/video/BV12J41137hu?p=45
何谓方法?

其中,System.out.println()表示的意思是:System类中的out对象,out对象中的println方法,调用类中对象的方法
表示方式:类.对象.方法()
一般设计方法的原则是原子性:一个方法完成一个功能,这样容易后期扩展
方法的命名:首字母小写的驼峰命名规则
例如:

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

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

总结
①main方法要始终保持干净,尽量使用调用方法
②如果想要可以直接调用方法,直接用static把方法变成类变量
③上述例子中,add方法是int方法,需要传入参数,printtriangle是void空方法,不用传参。
④ctrl+/快速注释快捷键。(视频中用到的)
方法的定义

修饰符像public,private这些,后面会讲到
返回值类型:根据返回值类型可以确定这个函数的类型。比如返回值是空的,那么这个方法函数就是void类型,如果返回值是int,那么这个方法就是int类型。
参数类型:形参和实参,也就是跟C语言中的形参实参传入一样。比如add中,int a,int b就是形参,a:1,b:2就是实参。
方法体:就是方法{}中实现的具体代码。注意如果不是void方法,就一定有return,不可忽视这个玩意。
例子

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

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

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

还是以上面的例子说明:
①不是void空方法。比如max方法,它是int类型的,那么它在主函数main调用的时候,通常需要一个容器来装载这个东西的,因为max方法它返回的是一个值,所以这个值被装到一个变量max(这里max和max方法重名了)里面,然后后续对max变量进行操作。
②是void空方法。比如printtriangle方法,在主函数直接用就可以了,直接写:printtriangle(); 就可以运行了。
另外:Java是值传递。先这么记着先。C语言有引用传递,用到了指针的知识。
方法的重载

例子:比大小

重载的好处是可以对一个方法进行更详细、更广泛的应用,例子重载了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;
}
}

总结
重载的方法名字必须相同,除此之外,像参数类型,方法类型,甚至参数个数等等都可以不同,自由发挥
方法名字相同时,编译器会根据调用方法的参数个数、类型进行匹配,从而选择对应的方法,如果匹配失败就报错。
命令行传递参数
代码如下:

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

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

但如果直接执行的话:

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

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

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

从而实现用命令行实现传参
总结
①当要运行class文件,需要找到它包的位置,退回到包所在的原始路径,再去加载,否则是执行不了的。
②main方法原来也可以进行传参的。
可变参数
因为像方法的重载,比如上面的max方法,时而有两个参数,时而有三个参数,比如下图:


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

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

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

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

又往可变参数输入了五个数字,输出i[2],也就是第三个,即数字3.
如果可变参数里面啥都没有,会报错:数组下标越界

所以可变参数本质就是数组,下一章节会讲到。
总结
①可变参数本质上是数组。用法上述已说。
②它必须是方法的最后一个参数


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

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

浙公网安备 33010602011771号