【发布时间】:2026-02-15 03:45:01
【问题描述】:
在在线解决挑战时,我观察到 java 的以下行为,我觉得有点奇怪。我首先按照以下大纲编译了一个程序:
import java.io.*;
class WeirdJava
{
public static void main (String[] args)
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
HashMap<Integer, Integer> map = new HashMap<Integer,Integer>();
System.out.println("Weird Java");
}
}
注意,在上面的程序中,有两个错误:
- 我没有处理
BufferedReader可能抛出的异常。 - 我没有导入包含
HashMap的标准util库。
现在,当我尝试编译上述程序时,java 编译器给出了找不到符号HashMap 的错误。请注意,涉及HashMap 的声明位于BufferedReader 之后。接下来,我将以下导入语句添加到程序中:
import java.util.HashMap;
当我再次编译程序时,这次编译器显示错误
未报告的异常IOException;必须被抓获或被宣布为 扔了
我的问题:
- 为什么在之前的编译尝试中没有抛出这个错误?
- 编译错误出现的顺序似乎不自然。在这个例程中发挥作用的编译器设计原则是什么?
【问题讨论】:
标签: java compilation compiler-errors