klo*_*onq 9 java syntax notation
我正在浏览网页并找到了这个例子.在public static void main方法中,这是我以前从未见过的行语法__main:
如:
public class Klass {
public static void main(String[] args) {
// code goes here...
__main:
// and mode code here...
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试将其打入eclipse并使用工具提示获得一个黄色下划线,其中说"标签__main从未明确引用".
我在网上找不到任何东西,我真的很好奇!我已经用Java编程多年了,我以前从未见过这种语法.它做了什么,你为什么要使用它,我在哪里可以学到更多?
And*_*s_D 11
这是一个标签.您可以将它与break和continue语句一起使用.没有必要使用双下划线.
更确切地说:它是标记声明(JLS 14.7)的(第一部分):
Identifier : Statement
Run Code Online (Sandbox Code Playgroud)
Java 中的双下划线没有语义(就像单下划线没有任何语义一样)。
它们可能具有的唯一含义取决于一些定义它们用途的命名约定。
看起来您查看的代码使用双下划线作为标签。由于标签在 Java 中不经常使用,我不会太担心。
C 中的goto语句及其对应语句都伴随有Label参数。在定义的方法中,goto label;语句将触发处理标签的例程。下面是 Greg Rogers 在这篇文章中演示的一个例子。
void foo()
{
if (!doA())
goto exit;
if (!doB())
goto cleanupA;
if (!doC())
goto cleanupB;
// everything succeed
return;
cleanupB:
undoB();
cleanupA:
undoA();
exit:
return;
}
Run Code Online (Sandbox Code Playgroud)
Agoto在 Java 中可能是一个非常有效的工具,但 Java 并没有明确支持该goto关键字,即使该语言已保留该关键字。使用break语句将使命令跳出标签,继续执行标签后面的语句。
例子:
public class Klass {
public static void main(String[] args) {
// code goes here...
__main:
{
if(args.length==0)
{
break __main;
}
}
//code after label
}
}
Run Code Online (Sandbox Code Playgroud)
该包com.sun.org.apache.bcel.internal.generic.GOTO,我个人没有使用过它,但我认为它可以帮助实现与 Greg Rogers 演示的相同的代码结构,如下所示:
void foo()
{
if (!doA())
GOTO exit;
if (!doB())
GOTO cleanupA;
if (!doC())
GOTO cleanupB;
// everything succeed
return;
cleanupB:
undoB();
cleanupA:
undoA();
exit:
return;
}
void undoB(){}
void undoA(){}
boolean doC(){return false;}
boolean doA(){return false;}
boolean doB(){return false;}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3806 次 |
| 最近记录: |