我目前正在使用 Sierra 和 Bates 学习指南学习 SCJP 认证,并且在许多自测(模拟考试问题)中,我一直遇到同样的问题 - 我无法判断运行时是否会出现特定错误(一个异常)或编译时(编译错误)。我知道这是一个有点模糊的问题,可能无法回答,但是,我如何判断在编译时或运行时是否会发现错误?您能否向我发送一些可能对我有帮助的网站链接?
28470 次
3 回答
11
编译时错误- java 编译器无法编译代码,通常是因为语法错误。典型候选人:
- 缺少括号
- 缺少分号
- 访问其他类中的私有字段
- 类路径上缺少类(在编译时)
运行时错误- 代码确实编译,可以执行,但在某些时候崩溃,就像你有一个被零除。
- 使用实际上是的变量
null
(可能导致 NullPointerException) - 在数组上使用非法索引
- 访问当前不可用的资源(丢失文件,...)
- 类路径上缺少类(在运行时)
(“崩溃”确实不是正确的术语,仅用于说明发生的情况)
于 2010-07-05T12:44:15.223 回答
2
对此没有简单的答案;要查看是否可以编译,您必须完全了解语言规范和所涉及的 API。您本质上必须像编译器一样行事,没有人可以完美地做到这一点。甚至编译器也不总是完全遵循规范。
Java 语言中有很多很多极端情况。这就是为什么像Java Puzzlers这样的东西如此吸引人的原因:人们不能总是判断某些东西是否可以编译和/或如果可以编译,到底发生了什么。
Java 语言的一些更复杂的领域是:
- 泛型(Eclipse 和
javac
编译器甚至不能在所有事情上达成一致) - 方法重载解析(JLS 中最难理解的部分之一)
相关问题
于 2010-07-05T12:43:24.793 回答
0
基本上,运行时错误是代码中的逻辑错误,即使代码在语法上是正确的。编译器错误是指语法/语义中的错误。如果您的代码中有编译器错误,程序将永远无法运行(并检查代码的逻辑)。如果你同时有语法和逻辑错误,你会首先得到编译器错误(语法错误),然后当你再次运行代码时,你会得到一个运行时错误(逻辑错误)。
于 2017-11-20T15:47:58.417 回答