JAVA基础(九)------ 方法重载、值传递、引用传递、形参、实参、可变参数
方法重载只需要把握住下面几个重点:
(1)在同一个类中,方法名称相同,参数类型或个数不同的方法就是重载方法;
public static int sum(int x, int y){
return x + y;
}
public static int sum(int x, int y, int z){
return x + y + z;
}
public static double sum(int x, double y){
return x + y;
}
(2)方法重载与返回值类型无关;(虽然支持返回值不同,但是建议重载的方法返回值类型统一,最好不要每个重载方法的返回值类不一样)
(3)System.out.println就是一个重载方法
System.out.println(1);
System.out.println(1.1);
System.out.println(true);
System.out.println('A');
System.out.println("Hello World!");
ps:
需要注意一点,那就是参数的顺序不同是否构成重载?答案是不一定。
int m(int x,int y)
int m(int y,int x)
上面这两个就不构成重载,编译器无法区别它们。但是看下面:
int fun( int x, char y )
int fun( char y, int x )
public int getI(String i, int j, String k) { }
public int getI(int j, String i, String k) { }
这几个就是重载。
因此顺序不同时还有看参数类型是否相同。
总结:
- 两同:同一个类中,方法名称相同
- 三不同:参数列表的参数的类型,个数,顺序不同
- 返回值不同构不能方法得载
- 形参名称不同构不成方法重载
java中使用值传递还是引用传递?
是值传递。Java语言的方法调用只支持参数的值传递。
值传递的时候,将实参的值,copy一份给形参;引用传递的时候,将实参的地址值,copy一份给形参。
按值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。简单来说就是直接复制了一份数据过去,因为是直接复制,所以这种方式在传递时如果数据量非常大的话,运行效率自然就变低了,所以java在传递数据量很小的数据是值传递。
另外一种是按引用传递:引用传递其实就弥补了上面说的不足,如果每次传参数的时候都复制一份的话,如果这个参数占用的内存空间太大的话,运行效率会很底下,所以引用传递就是直接把内存地址传过去,也就是说引用传递时,操作的其实都是源数据。对象引用实际上进行的是值传递,只是拷贝了引用的值罢了,之所以能修改引用数据是因为它们同时指向了一个对象,但这仍然是按值调用而不是引用调用。
可变参数的作用及用法
可变长参数(varargs),适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理,对于同一方法可以使用不同个数的参数调用,例如print("hello");print("hello","lisi");print("hello","张三","alexia")
1、可变参数定义
2、可变长参数的方法的调用
3、可变长参数的使用规则
(1)在调用方法的时候,如果能够和固定参数的方法匹配,也能够与可变长参数的方法匹配,则选择固定参数的方法。
(2)如果要调用的方法可以和两个可变参数匹配,则出现错误
(3)一个方法只能有一个可变长参数,并且这个可变长参数必须是该方法的最后一个参数,即只能出现在参数列表的最后。
举例:
@Test
public void test1() {
print("1");
print("2", "3");
print("4", "5", "6");
}
private void print(String ... args){
for (int i=0; i<args.length; i++){
Console.log(args[i]);
}
};
1
2
3
4
5
6
如何给main方法传递实参?
main方法是java程序的入口,其参数:String args[] 是一个数组,用来接收从程序执行的位置接收参数,添加参数的方法如下: