public class Test {
public static void main(String[] args) {
int a[][];
a = new int[0][0];

for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
System.out.println(a.length);
System.out.println(a[j].length);
}
}//循环的时候不抛异常

System.out.println(a.length);//打出结果为0
System.out.println(a[a.length].length);//抛越界异常 }}
这是刚看到另外一个帖子后看了下CORA JAVA,说是JAVA中支持长度为0的数组,做的小实验
想问下0长度数组在内存里是个什么样子
另请大家解释下这个程序,既然最后一句抛异常,前面循环中为什么不抛?

解决方案 »

  1.   

    测试: public class Main {    public static void main(String args[]) {
    int[] a = new int[0];
            int[][] b = new int[0][0];
        }
    }javap -c Main Compiled from "Main.java"
    public class Main extends java.lang.Object{
    public Main();
      Code:
       0: aload_0
       1: invokespecial #1; //Method java/lang/Object."<init>":()V
       4: returnpublic static void main(java.lang.String[]);
      Code:
       0: iconst_0
       1: newarray int
       3: astore_1
       4: iconst_0
       5: iconst_0
       6: multianewarray #2,  2; //class "[[I"
       10: astore_2
       11: return}没什么特别的地方,创建数组,不过用的参数是0而已. for(int i=0;i<a.length;i++){
    因为a.length是0,所以根本不会执行循环里面的代码,所以不可能抛出异常了.
      

  2.   

    谢谢企鹅
    那就多问个问题吧,那次想看JDK中的原代码,不知道该去哪看
      

  3.   

    用netbeans或者eclipse,可以直接跟进去.
    两种方法: 
    在库里面直接打开rt.jar,选择你要看的类就能直接打开代码.
    或者选中你要看的类,按ctrl,点鼠标进入.
    如果找不到代码,自己配一下src.zip的位置.