Archive

Posts Tagged ‘for/in’

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之类的,不要和静态引入的重名