如何判断您的Java错误类型';我们正在月食中

如何判断您的Java错误类型';我们正在月食中,java,eclipse,error-handling,Java,Eclipse,Error Handling,所以,正如前面在另一篇文章中所说的,我目前正在学校学习Java课程。我正在使用eclipse,但我正在尝试了解控制台中出现的错误之间的区别。我不相信它告诉我我犯了什么错误。那么,区分差异的最佳方式是什么 这是我知道失败的代码,我知道失败的原因,“数组中没有数据”我只是不知道我遇到了什么类型的错误 int[][] a = {{5,2,8,4},{}}; System.out.println(a[1][2]); 我得到的错误 Exception in thread "main" 123 java.

所以,正如前面在另一篇文章中所说的,我目前正在学校学习Java课程。我正在使用eclipse,但我正在尝试了解控制台中出现的错误之间的区别。我不相信它告诉我我犯了什么错误。那么,区分差异的最佳方式是什么

这是我知道失败的代码,我知道失败的原因,“数组中没有数据”我只是不知道我遇到了什么类型的错误

int[][] a = {{5,2,8,4},{}};
System.out.println(a[1][2]);
我得到的错误

Exception in thread "main" 123
java.lang.ArrayIndexOutOfBoundsException: 2
at test.main(test.java:82)

对不起,我之前不清楚。我需要理解编译错误、运行时错误、逻辑错误和语法错误之间的区别。这属于哪一类?

在Java中,数组索引从0开始。二维数组在
a[1]
处没有行。因此,由于
a[1]
处的数组长度为0,因此您将越界。在运行时,当您尝试访问
a[1][2]
时,它是越界的,因此JVM抛出
ArrayIndexOutOfBoundsException

您可以尝试将元素添加到初始数组中,以:

int[][] a = {{5,2,8,4},{1, 2, 3, 4}};

您将获得一个
BoundsException阵列。数组
a[1]
为空,因此当您尝试从位置
2
读取时,Java会抱怨,因为引用的内存位置在数组
a[1]
的边界之外


这是Java的一个语言安全特性,可以防止您做危险的事情。在像C这样的语言中,没有默认的
ArrayOutOfBoundsException
,访问数组边界之外的内存位置有时会导致分段冲突,从而使程序崩溃,即使没有发生这种情况,它也会经常返回随机数据,应该被视为错误。

您的问题不清楚,“java.lang.ArrayIndexOutOfBoundsException”是错误类型。我想我的问题不清楚。很抱歉,基本上,我怎么知道是逻辑错误、编译错误、运行时错误还是语法错误。@RichTalcik:Logic error意味着程序背后的逻辑是错误的。编译错误是指编译程序时(在程序运行之前)发生的错误。运行时错误意味着错误发生在程序运行时,语法错误类似于编程的“拼写”错误。至于你的错误类型,我建议你找出它。