最近写程序时,遇到了一个问题,Java程序需要先编译产生一种与平台无关的字节码(*.class文件),接着java解释器解释执行。 可是有一些的错误在编译的时候不会出现,只会在解释时出现,是不是编译时不会发现这些错误!!!! 例子1: public class Test { } 这个类没有任何的类成分,是个空类,但这个java程序是绝对正确的,如果我们使用javac命令来编译这个程序,程序可以通过编译,但不能被解释器解释执行。 java命令运行上面的Test类,得到如下错误: Exception in thread "main" java.lang.NoSuchMethodError:main 例子2: 如果访问数组元素时指定的索引小于0,或者大于等于数组的长度,编译程序不会出现任何错误,运行时出现异常: java.lang.ArrayIndexOutOfBoundsException:2(数组索引越界异常)大家谁能告诉我为什么呀!!!!到底是不是编译器不会对这些错误做出判断,还是只能交给解释器去做出判断!!
有些错误在编译时不会报错的,但是在运行时会报错,这种情况非常常见,给你举个例子
int[] a=new int[20];
a[20]=100;
system.out.println(a[20]);编译的时候是不会报错的,但是明显下标越界了,运行时就会报错,所以才有所谓的异常处理机制
编译时错误大多是语法错误,而运行时错误大多是逻辑错误!这是很常见的!!
2 去看看异常机制,java分为运行时异常和被声明异常,运行时异常编译时是不会被检查出来的,你的例子中的数组越界就是一个,常见的还有
空指针异常,被声明的异常必须捕获 或者再次抛出,如果不做处理的话 编译时就会被检查出来,比如说IOException。
二、JAVA语言对数组的下限进行了限制。数组下限初始必须为0