Vit*_*nko 222
James Gosling在支持goto语句的情况下创建了原始JVM ,但随后他将此功能删除为不必要的.主要原因goto是不必要的,通常它可以用更易读的语句(例如break/continue)或通过将一段代码提取到方法中来替换.
资料来源:James Gosling,问答环节
Tho*_*mas 193
在Java的关键字列表指定的goto关键字,但它被标记为"未使用".
它是在原始的JVM中(见@VitaliiFedorenko的回答),但随后删除了.它可能保留为保留关键字,以防它被添加到更高版本的Java中.
如果goto不在列表中,并且稍后将其添加到该语言中,则使用该单词goto作为标识符(变量名,方法名等等)的现有代码将会中断.但因为goto是一个关键字,这样的代码甚至不会在当前编译,并且仍然可以使它实际上稍后执行某些操作,而不会破坏现有代码.
jon*_*ten 146
关键字存在,但未实现.
我能想到的唯一使用goto的理由是:
for (int i = 0; i < MAX_I; i++) {
for (int j = 0; j < MAX_J; j++) {
// do stuff
goto outsideloops; // to break out of both loops
}
}
outsideloops:
Run Code Online (Sandbox Code Playgroud)
在Java中,你可以这样做:
loops:
for (int i = 0; i < MAX_I; i++) {
for (int j = 0; j < MAX_J; j++) {
// do stuff
break loops;
}
}
Run Code Online (Sandbox Code Playgroud)
Isa*_*c E 43
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
"保留关键字const和goto,即使它们目前尚未使用."
dav*_*ave 29
因此,如果语言设计者感到需要,他们可以在某一天使用.
此外,如果来自具有这些关键字的语言(例如C,C++)的程序员错误地使用它们,那么Java编译器可以提供有用的错误消息.
或者也许只是为了阻止程序员使用goto :)
and*_*rew 17
如何在Java中使用"continue"标签的示例是:
public class Label {
public static void main(String[] args) {
int temp = 0;
out: // label
for (int i = 0; i < 3; ++i) {
System.out.println("I am here");
for (int j = 0; j < 20; ++j) {
if(temp==0) {
System.out.println("j: " + j);
if (j == 1) {
temp = j;
continue out; // goto label "out"
}
}
}
}
System.out.println("temp = " + temp);
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
I am here // i=0
j: 0
j: 1
I am here // i=1
I am here // i=2
temp = 1
Run Code Online (Sandbox Code Playgroud)
小智 10
重要的是要理解goto构造函数是程序员用机器代码和汇编语言编程的日子里的残余.因为这些语言是如此基本(例如,每个指令只做一件事),程序控制流程完全用goto语句完成(但在汇编语言中,这些被称为跳转或分支指令).
现在,虽然C语言相当低级,但它可以被认为是非常高级的汇编语言 - C中的每个语句和函数都可以很容易地分解为汇编语言指令.尽管C不是当今计算机编程的主要语言,但它仍然在低级应用程序中大量使用,例如嵌入式系统.因为C的函数如此密切地反映了汇编语言的功能,所以它只goto包含在C 语言中.
很明显,Java是C/C++的演变.Java与C共享许多功能,但是抽象了更多的细节,因此只是以不同的方式编写.Java是一种非常高级的语言,因此没有必要具有低级功能,例如goto当更多高级构造(如函数),for,for循环和while循环执行程序控制流程时.想象一下,如果你在一个函数中,并将goto标签转换为另一个函数.当其他函数返回时会发生什么?这个想法很荒谬.
这并不一定能解释为什么Java包含goto语句但不会让它编译,但重要的是要知道为什么goto首先使用它,在较低级别的应用程序中,以及为什么它只是没有意义在Java中使用.
因为它不受支持,为什么你想要一个goto什么都不做的关键字或一个名为变量的变量goto?
虽然你可以使用break label;和continue label;语句来有效地做什么goto.但我不推荐它.
public static void main(String [] args) {
boolean t = true;
first: {
second: {
third: {
System.out.println("Before the break");
if (t) {
break second;
}
System.out.println("Not executed");
}
System.out.println("Not executed - end of second block");
}
System.out.println("End of third block");
}
}
Run Code Online (Sandbox Code Playgroud)
不,goto不是在Java中使用,尽管是一个保留字.同样如此const.这两个都用在C++中,这可能是它们被保留的原因; 其目的可能是避免让迁移到Java的C++程序员感到困惑,也许还要保留在Java的后续版本中使用它们的选项.
小智 5
是的,这是可能的,但不如 C# 中的那么好(在我看来,C# 更好!)。goto 总是掩盖软件的观点是愚蠢的!遗憾的是java至少没有goto case xxx。
跳转至前进:
public static void main(String [] args) {
myblock: {
System.out.println("Hello");
if (some_condition)
break myblock;
System.out.println("Nice day");
}
// here code continue after performing break myblock
System.out.println("And work");
}
Run Code Online (Sandbox Code Playgroud)
向后跳转:
public static void main(String [] args) {
mystart: //here code continue after performing continue mystart
do {
System.out.println("Hello");
if (some_condition)
continue mystart;
System.out.println("Nice day");
} while (false);
System.out.println("And work");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
379781 次 |
| 最近记录: |