当前位置: 首页 > 面试题库 >

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

凌和颂
2023-03-14
问题内容
        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. *在将源语句转换为本地字节码或某些中间字节码的情况下 *生成代码 (对于Java,后者是这种情况)。

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



 类似资料:
  • 即时创建一个小电子邮件脚本与PHPMailer SMTP身份验证。我现在试着用错误的密码发送一封电子邮件——但它仍然会给成功带来“真实”的回报...有人知道吗?' 以下是我用来调用sendmail的函数: 这是我的PHPMailer函数 $smtp包含一个数组,其中包含所有SMTP信息、电子邮件地址、签名、Smtp服务器、端口、用户名、密码和SSL用法... 我敢肯定,我使用了错误的用户名和密码,

  • 我不情愿地从Eclipse转向AndroidStudio开发应用程序(仅限于此)。真正让我恼火的是AndroidStudio并没有一次显示所有编译错误,或者直到现在我还没有找到正确的选项。 首先考虑到这些愚蠢的课程,一切都很好: A.kt B.kt C.kt 现在,如果我在中,错误地从方法名中删除了一个字母,那么它的名字就变成了。然后,在或中不会显示错误: 构建代码 只有在编辑器中打开或时,bug

  • 问题内容: 以下代码块在1.8.11中可以正常编译,但在1.8.20中会引发错误 我得到的错误是java:找不到适合过滤器的方法(com.google.common.base.Predicate) 在更新8和20之间是否存在会影响此代码的更改?我在两种情况下都使用相同版本的guava 17.0(最新版本),唯一的变化是Java中的更新版本。 任何帮助是极大的赞赏。 编辑 显示错误的行是 问题答案:

  • 我已经创建了一个名为FirstServlet的java servlet程序。 我把它放在Tomcat 7.0\webapps\ROOT\WEB-INF\class\FirstS上ervlet.java我还设置了servlet-api.jar的类路径,但是当我编译它时 我发现了一些错误。 代码是: 错误是:

  • 我有一个爪哇项目。它由以下层次结构组成: 项目: < li >服务器(包含server.java) < li >客户端(包含client.java) < li >协议(包含中的消息类型。java文件) 我正在用Eclipse运行这个项目。我已经到了需要用终端测试的地步。我如何使用 build.xml 文件来格式化它,以便每当我将其从 Eclipse 中取出并在服务器中运行时,它都能正常工作,但在上