gpt4 book ai didi

java编译器不会一次给出所有错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:47:14 24 4
gpt4 key购买 nike

        System.out.println("First eror ::  without semicolon ") // first Error
System.Out.println("This second error :: OUT object not used proper :: "); //second error


class TestCompilation
{
public static void main(String []args)
{
System.out.println("Hello no semicolon::")//First Error
System.Out.println("Hello out spell not correctely::"); //Second Error

}

}

每当我在 cmd 中通过 JAVAC 命令编译上面的代码时,它只给出第一个错误意味着不给出第二个错误。在 java 语言中部分编译器和部分解释器以及在 java 中第一次编译发生所以编译器应该列出所有错误但它只给我一个错误。为什么会这样?我不明白所以请帮我解决这个问题..


我想现在我很清楚我的问题意味着编译器完全可以工作......

为此,我创建了一个简单的示例,它将帮助您理解 java 编译器的工作原理。

class TestCompilation
{
public static void main(String []args)
{
Syste.out.rintln("Hello");//First Error
Syste.Out.rintln("Hello");//Second Error (Not printed at compiler time because it syntatically correct as in compiler first phase)
Hitesh542.add(); //there is no such class called Hitesh542.- but compiler thinks that it is right way to call the method. So it passes the first time.
Hitesh542.add()();//Look out here.. There is a problem, that we can't call a method like this..So it will show the error on first lookup.
System.otu.println("Hello")//second Errorasdasdas

if(); //look this is also an error.- A BASIC syntax error shown at the first lookup.

try{
int i = 10 / 0;
}
//Third error

//So bottom line is the JAVA syntatical errors are checked first i.e The SYNTAX of JAVA not the classes or objects.
//But obv is the first thing is Java Compiler should get the Java class first for compilation on proper path. :)
}
}

最佳答案

我想说这与编译器通常的工作方式有关:

  1. 执行词法分析,将源代码转换为一系列“标记”。
  2. 代码被解析,编译器检查标记是否符合语言语法。这是您的第一行会失败的地方:Java 中的每个语句都必须以分号结尾。
  3. 执行语义分析,其中编译器尝试根据已知符号列表解析变量、方法等 - 在 Java 中,这将粗略地转换为您的类路径。
  4. 生成代码,其中源语句被翻译成 native 字节码或一些中间字节码(后者是 Java 的情况)。

如果其中一个步骤失败,则该过程必须停止,因为当代码不符合语法时,编译器无法执行语义分析。

关于java编译器不会一次给出所有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17966406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com