我对Java非常新手,我有下面这段代码:
public class Puzzle {
public static void main(String... args) {
System.out.println("Hi Guys!");
// Character myChar = new Character('\u000d');
}
}
您可以看到这条线:
Character myChar = new Character('\u000d');
这个被注释掉了。但是,当我运行javac
时,仍然会出现以下错误:
Puzzle.java:9: error: unclosed character literal
// Character myChar = new Character('\u000d');
^
1 error
在这篇博客中,我找到了异常的原因。该博客表示:
Java编译器在实际编译之前会剥离掉所有Unicode字符并将其转换为字符形式。这个解析过程针对的是包括注释在内的整个源代码。在此转换完成后,Java编译过程才会继续执行。
在我们的代码中,当Java编译器遇到\u000d时,它会将其视为换行符并更改代码如下:
public class Puzzle {
public static void main(String... args) {
System.out.println("Hi Guys!");
// Character myChar = new Character('
');
}
}
我有两个问题:
- 为什么Java首先解析Unicode?这样做有什么优势吗?
- 因为该行仍然被注释,Java正在尝试解析它!这是唯一的情况吗?还是通常也会解析注释行?我很困惑。
提前感谢。
')'
,这是一个语法错误。 - Alex Shesterov