java特性-The for/in Statement & Static Imports
March 28th, 2008
No comments
5 The for/in Statement & Static Imports
5.1 The for/in Statement
看一下代码
1 2 3 4 5 6 7 8 9 10 11 | import static java.lang.System.out; public class ForInStatement { public static void main(String[] args) { int[] ints = new int[]{0,1,2,3,4,5,6,7,8,9}; for(int i : ints) { out.println(i); } } } |
for循环表达式很简单,当然编译后得class文件中还是原先的形式for(x;x;x),java新特性好像只是为了书写方便,编译器把代码帮转成原先的Statement,jvm的内部语言实现没有多大变化,但那也足够了
这里使用了array作为例子,当然很多容器都支持这样的写法,当然你自己可以构造一个容器只要实现了interface Iterable.
5.2 Static Imports
上面的代码中的import
1 | import static java.lang.System.out; |
代码中就可以直接引用了
1 | out.println(i); |
这就是静态引入的概念,适用与静态方法,静态变量;枚举类都是staitc的,所以也可以引用
通配符的应用如:import static java.lang.Math.*;我们一般不提倡用通配符
同时引入两个一样的名字,如
1 2 | import static java.util.Arrays.sort; import static java.util.Collections.sort; |
这时会根据你掉用的方法的参数,去找两个sort中合适的方法;假使你要调用的方法在两个静态引入里都同时存在,那么将会发生编译期错误
方法中参数名同静态引入名,如
1 2 3 4 5 6 7 8 9 | import static java.lang.System.out; . . public static void writeError(PrintStream err, String msg) throws IOException { err.println(msg); } . . |
此时,方法中的参数err会覆盖静态引入的err;当然为了减少不必要的麻烦,建议修改writeError里err的名字为psErr之类的,不要和静态引入的重名