java - 需要澄清编译错误和运行时错误

标签 java compiler-construction compiler-errors jvm

我正在阅读有关运行时错误和编译错误的信息

Runtime vs Compile timeHow exactly does java compilation take place?

我可以推断的是,在编译期间,编译器不会检查逻辑,而只会检查语法和拼写错误,以及在运行时检查逻辑的位置以及如何实现这些逻辑等。例如除以零,内存不够。

因此,如果我的理解是正确的,那么仅在编译阶段才会出现编译错误,而仅在执行程序时才会出现运行时错误。

例如让我考虑一个简单的程序

public class Try {

public static void main(String[] args) {
    System.out.println("My first program");
    }
}

现在,当我在这个阶段编译(即 javac )时,如果产生任何错误,那么这些错误称为编译错误,在此期间会检查语法和拼写错误。

将字节码转换为本地/机器代码(例如 java )的过程中产生的错误称为运行时错误,在此期间检查程序逻辑。

因此,只有在执行开始时才会出现编译错误,只有在第二阶段(即将字节码转换为机器码)才会出现运行时错误。

如果我的理解有误,请指正...

最佳答案

一个简单的例子:

String myString = null;
myString.substring(..)

上面的代码在语法和类型方面都是正确的,编译器没有显示错误。但是,当您使用此代码执行程序(运行程序)时,会出现明显的运行时错误。编译器不够智能,无法检测到这些错误,如果您想在开发周期的早期捕获这些错误(更好的是在客户端执行程序之前:P),可以使用静态分析工具等工具,或者更好的是自动测试。

关于java - 需要澄清编译错误和运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21632281/

相关文章:

c# - 错误 "the exec task needs a command to execute"是什么意思?

java - 创建泛型集合数组

java - Java : Cannot find symbol? [duplicate]

compiler-construction - 在Visual Studio 2013中写入输出构建 Pane +错误列表,无需双击即可使用msbuild/new进程双击条目以出错

java - 在 Java 中创建 GUI 时出现编译错误

C++,好旧的 LNK1169(和 LNK2005)错误

java - IntelliJ 未更新 Glassfish 部署

Java 8 相当于 (RxJava) Observable#onComplete()

java - Java 中的 Neo4j 服务器模式

java - 使用 ToggleButton 在单击按钮时将数据发送到另一个 Activity