最近写程序时,遇到了一个问题,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(数组索引越界异常)大家谁能告诉我为什么呀!!!!到底是不是编译器不会对这些错误做出判断,还是只能交给解释器去做出判断!!

解决方案 »

  1.   

    编译时只会指出语法错误。但是语法正确并不表示这个程序就一定能够顺利执行。比如一个读取文件的程序,编译没问题,但如果运行的时候发现文件不存在怎么办?一个空类是无法执行的。只有包含 public static void main(String[] args) 方法的类才可以用 java 命令执行。
      

  2.   

    是的,错误分为编译时错误和运行时错误两种
    有些错误在编译时不会报错的,但是在运行时会报错,这种情况非常常见,给你举个例子
    int[] a=new int[20];
    a[20]=100;
    system.out.println(a[20]);编译的时候是不会报错的,但是明显下标越界了,运行时就会报错,所以才有所谓的异常处理机制
    编译时错误大多是语法错误,而运行时错误大多是逻辑错误!这是很常见的!!
      

  3.   

    1 只有含有main函数的才可以用java命令执行
    2 去看看异常机制,java分为运行时异常和被声明异常,运行时异常编译时是不会被检查出来的,你的例子中的数组越界就是一个,常见的还有
      空指针异常,被声明的异常必须捕获 或者再次抛出,如果不做处理的话 编译时就会被检查出来,比如说IOException。
      

  4.   

    RunTimeException 程序在编译时是不知道的.
      

  5.   

    java中错误主要有,语法错误,词法错误,运行错误,逻辑错误,其中前二都在编译时会被发现,而后者基本上是运行时发现的
      

  6.   

    一、没有MAIN方法输出
    二、JAVA语言对数组的下限进行了限制。数组下限初始必须为0