我正在阅读SCJP,我对这一行有疑问:
标识符必须以字母,货币字符($)或连接字符(如下划线(_))开头.标识符不能以数字开头!
它声明有效的标识符名称可以以连接字符(如下划线)开头.我认为下划线是唯一有效的选择吗?还有其他什么连接字符?
我最近了解到,Java源代码中的Unicode不仅可以作为Unicode字符(例如double ? = Math.PI;),还可以作为转义序列(例如double \u03C0 = Math.PI;).
第一个变体对我有意义 - 它允许程序员用他们选择的国际语言命名变量和方法.但是,我没有看到第二种方法的任何实际应用.
以下是一些用于说明用法的代码,使用Java SE 6和NetBeans 6.9.1进行了测试:
此代码将打印出3.141592653589793
public static void main(String[] args) {
double ? = Math.PI;
System.out.println(\u03C0);
}
Run Code Online (Sandbox Code Playgroud)
说明:π和\ u03C0是相同的Unicode字符
此代码不会打印任何内容
public static void main(String[] args) {
double ? = Math.PI; /\u002A
System.out.println(?);
/* a comment */
}
Run Code Online (Sandbox Code Playgroud)
说明:上面的代码实际编码:
public static void main(String[] args) {
double ? = Math.PI; /*
System.out.println(?);
/* a comment */
}
Run Code Online (Sandbox Code Playgroud)
哪个评论打印出来的声明.
仅从我的示例中,我注意到此语言功能存在许多潜在问题.
首先,一个糟糕的程序员可以使用它来秘密注释掉一些代码,或创建多种识别相同变量的方法.也许还有其他可怕的事情可以做,我没有想过.
其次,IDE之间似乎缺乏支持.NetBeans和Eclipse都没有为示例提供正确的代码突出显示.实际上,NetBeans甚至标记了语法错误(尽管编译不是问题).
最后,此功能的记录很少,并且不被普遍接受.为什么程序员会在他的代码中使用其他程序员无法识别和理解的东西?事实上,我甚至在Hidden Java Features问题上找不到这个. …
C#和Java几乎允许在类名,方法名,局部变量等中使用任何字符.使用非ASCII字符,测试不良编辑器和分析工具的界限并使某些人难以阅读是不好的做法,还是美国的傲慢是反对的唯一论据?
private void launchEventPanel(String title) {
EventQueue.invokeLater(new Runnable(title) {
public void run() {
JFrame myFrame = new JFrame();
myFrame.setTitle(this.val$title);
myFrame.setIconImage(CrConference.this.mainCore.myPanel.myIconManager.getPromptIcon(Mart.class.toString()));
myFrame.getContentPane().add(Conference.this.myEventPanel, "Center");
myFrame.pack();
myFrame.setVisible(true);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我得到了一些我想编译和理解的代码.帮助高度赞赏
我写了一个很小的 Groovy 脚本(只是一些简单的指令)并将它命名为a-b.groovy.
我的同事在运行它时遇到问题并说:
我相信“-”在 Groovy 脚本文件名中是非法的
问题: Groovy 文件名中非法字符的完整列表是什么?
(注意:与groovy 脚本文件的命名约定不同,我的问题与约定无关)
是否有一种解决方法可以使用冒号作为枚举中的键?
public enum foo {
_DEFAULT_GET("com.foo.my.package"); // works fine
_PREFIX_GET("com.foo.my.other.package");
_PRE:CODE_GET("com.foo.yet.another.package"); // <-- how do I escape this colon?
}
Run Code Online (Sandbox Code Playgroud)
编辑:在我被遗忘之前,我想补充说,有一个传递的命名约定更改.它在团队中引起了非常有趣的争论!:-)