首页 > 代码库 > Java 方法

Java 方法

Java 语言是静态的:一个类定义完成后,只要不再重新编译这个类文件,该类和该类的对象所拥有的方法是固定的,永远都不会改变。


方法的所属性

因为 Java 里的方法不能独立存在,它必须属于一个类或者一个对象,因此执行方法时必须使用类或对象来作为调用者。这里可能产生一个问题,同一个类里不同方法之间相互调用时,不就可以直接调用吗?其实不然:同一个类的一个方法调用另一个方法时,如果被调用的是普通方法,则默认使用 this 作为调用者(this 可以省略),如果被调用方法是静态方法,则默认使用类作为调用者(类名可以省略)。也就是说,表面上看起来某些方法可以被独立执行,但实际上还是使用 this 或者类来作为调用者。


永远不要把方法当成独立存在的实体,正如现实世界里由类和对象组成,而方法只能作为类和对象的附属。Java 语言里的方法也是一样,所以调用方法必须有一个调用者。

 

方法的参数传递机制

Java 里方法的参数传递方式只有一种:值传递(pass by value)。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。


形参长度可变的参数

从 JDK 1.5 之后,Java 允许定义形参长度可变的参数,从而允许为方法指定数量不确定的形参。

使用方法:在最后一个形参的类型后增加三点(…),则表明该形参可以接受多个参数值,多个参数值被当成数组传入。

public class Argument {

	public static void show(int... is) {
		System.out.println(is instanceof int[]);// true
	}

	public static void main(String[] args) {
		// 传入一个数组作为参数
		show(new int[] { 1, 2, 3 });
		// 传入多个参数
		show(1, 2, 3);
	}
}
注意:长度可变的形参只能处于形参列表的最后。一个方法中最多只能包含一个长度可变的形参。调用包含一个可变长度形参的方法时,这个长度可变的形参既可以传入多个参数,也可以传入一个数组。


方法重载

如果同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法重载。其实,方法重载要求的就是两同、一不同:同一个类,相同的方法名,参数列表不同。至于方法的其他部分,如方法返回值类型、修饰符等,与方法重载没有任何关系。


这里可能会有一个疑惑:为什么方法的返回值类型不能用于区分重载的方法呢?

对于 int f(){} 和 void f(){} 两个方法,如果我们这样调用 int result = f(); 系统可以识别是想调用返回值类型为 int 的方法;但 Java 调用方法时可以忽略方法返回值,如果采用如下方法来调用 f(); 你能判断是调用哪个方法吗?如果你尚且不能判断,那么 Java 系统怎么判断呢?在编程中有一条重要规则:不要让系统糊涂,系统糊涂了,肯定就是你错了。因此,Java 里不能使用方法返回值类型作为区分方法的依据。

Java 方法