2. 静态导入
静态导入也是一个辅助性的功能增强,能够静态导入变量、方法,省略了一些冗长的代码。静态导入的关键字是import static。静态导入时可以使用通配符(*)。
代码示例:
import static java.lang.System.out;
import static java.util.Arrays.sort;
import static java.lang.Math.*;
import java.util.Arrays;
// .. .. ..
public static void main(String[] args) {
int[] ints = {3, 7, 4};
sort(ints);
out.println(Arrays.toString(ints));
out.println(sqrt(PI * PI));
}
注:静态导入还可以导入静态内部类,这种用法不太常见,此处不再提供代码示例。
3. 变长参数
变长参数(varargs)允许方法中一次接收多个同样类型的参数,不需要将这些参数预先明确定义出来。
变长参数使用...标识,代码示例:
public class Guitar {
public Guitar(String builder, String model, String... features) {
}
public static void main(String... args) {
Guitar guitar1 = new Guitar("Martin", "HD-28V", "Hot-rodded by Dan Lashbrook",
"Fossil Ivory Nut", "Fossil Ivory Saddle", "Low-profile bridge pins");
Guitar guitar2 = new Guitar("Bourgeois", "OMC",
"Incredible flamed maple bindings on this one.");
Guitar guitar3 = new Guitar("Martin", "D-18");
String[] features = {};
Guitar guitar4 = new Guitar("Collings", "OM-42", features);
}
}
在类Guitar的Constructor中使用了变长参数定义:String... features。调用时可以传递多个String参数,而不需要定义不同的Constructor。注意第三个变量的使用,只传递了两个参数,即变长参数是(0..*)的概念。
变长参数的使用有一定的限制,一个方法中只能定义一个变长参数,且此变长参数必须位于参数列表的末尾。
对于变长参数,Java编译器实际将其识别为一个对应类型的数组(示例代码中的main方法可以证明)。例如上边的例子中,编译器将String... features识别为String[] features,可以将其按照数组方式使用,如进行for each遍历,或将其赋值给一个String[]类型的变量。