6.3 方法的重载
- 重载就是在一个类中,有相同的 函数名称,但参数不同的函数。
- 方法的重载规则:
- 方法名称必须相同
- 参数列表必须不同(个数不同、类型不同、参数排列顺序可以不同等)
- 方法的返回类型可以相同也可以不相同
- 仅仅返回类型,是不足以 实现方法的重载的!
- 实现理论:
方法形成相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器会报错。
package method;
public class 方法的重载 {
public static void main(String[] args) {
System.out.println(max(1,10));
System.out.println(max(10.2,10.1));
}
//比大小
/*修饰符*/public static /*返回值类型*/double /*方法名*/max(double a/*整数参数①*/,double b/*整数参数②*/)
{
/*方法体*/
if(a==b)
{
System.out.println(a+"=="+b);
return a;
}
if(a>b)
return a;
else return b;
}
//比大小
/*修饰符*/public static /*返回值类型*/int /*方法名*/max(int a/*整数参数①*/,int b/*整数参数②*/)
{
/*方法体*/
if(a==b)
{
System.out.println(a+"=="+b);
return a;
}
if(a>b)
return a;
else return b;
}
}
你会发现,当我们 输入 10.1 和 10.2 的时候,它会自动识别到 max 的 double 重载!
6.4 命令行传参
我们可能从一开始 就对 public static void main(String[] args) 这里的参数 产生疑惑!这个参数是干什么的呢??
- 有时候你希望运行一个程序的时候,去传递给它(程序)一些信息。这要靠传递命令行参数 才能够办到!
package method;
public class 命令行传参 {
public static void main(String[] args) {
for(int i = 0;i<args.length;++i)
{
System.out.println("args["+i+"]:" +args[i]);
}
}
}
用命令行执行 java程序的注意事项:
当你 创建了 包以后,一定要注意,先把 文件位置 退回到 src 下,然后 输入 包名.程序名 才能够 执行程序!!
你会发现 这里 就会把 用命令行 传递 给程序的参数信息,都打印出来了。
6.5 可变参数
- JDK 1.5 开始,Java 支持传递同类型的可变参数。
- 在方法声明中,在指定参数类型后加一个省略号(…)
- 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何的普通参数必须在它之前声明!!!
说白了,就是 你的这个方法,不确定 需要 几个同类型的参数数据!所以这个 时候就有一个东西,叫 可变参数,原型其实 是 数组!!
- 在展示和举例可变参数之前,我们还要学会 如何调用 非 static 的方法!
如果不是 static 修饰过的方法,那么 就 需要 具象化 一个 对象!然后让这个 对象 去 调用这个方法就可以了。(原因 是 非 static 属于 对象,而不属于 整个类!)
- 可变参数的举例和展示
package method;
public class 可变参数 {
public static void main(String[] args) {
可变参数 demo = new 可变参数();//先 具象化 为 对象
demo.max(54,0,21,-2,10,9,-5,8);//用 demo 对象 调用 max 方法
}
public void max(int... nums)//这个 int... nums 就是可变参数,可以接收任意个 该类型的数据
{
int max_num = nums[0];
for(int i =0;i<nums.length;++i)
{
if(nums[i] > max_num)
max_num = nums[i];
}
System.out.println(max_num);
}
}
- 因为 可变参数的 本质 是 数组,只是换了一种 形式。所以我们提供多个同类型数据的时候,可以提供临时数组。
demo.max(new int[]{-2,1,0,8,90,60,2,3});
//new int[] {元素数据}; 这个就叫做 临时 数组,临时创建 临时 销毁!
可变参数并不是没有用 ! 大家千万别记完就忘。这个东西的出现,也是为了方便 我们提供一整串数据 对其进行处理的。
你想一下这种情况,比如你现在直接有 一组 数据,用逗号隔开的,然后你直接 就要拿过来出来,不想自己再进行 数据封装成数组的操作。
那么可变参数不就方便多了。你直接输入进去,然后在方法里,自然就是一个数组。但是有些人可能就又说了,那我参数定义一个 数组类型,用 {一串数据} 提供进去 不也行吗?那要这样说 也没毛病。但是新特性 有 新特性的好处。别不当回事就行。
本来就是解决一种问题,方案可以很多。所以不需要纠结的。