语法 - Java中是否有goto语句?

我对此感到困惑。 我们大多数人都被告知Java中没有任何goto语句。

但我发现它是Java中的关键词之一。 哪里可以使用? 如果它不能使用,那么为什么它作为关键字包含在Java中呢?

23个解决方案

222 votes

防止人们被迅猛龙杀死。

Alceu Costa answered 2019-02-28T00:14:45Z

210 votes

James Gosling在支持goto语句的情况下创建了原始JVM,但随后他将此功能删除为不必要的。 goto不必要的主要原因是通常可以用更易读的语句(如break/continue)或通过将一段代码提取到方法中来替换它。

资料来源:James Gosling,Q& A会议

Vitalii Fedorenko answered 2019-02-28T00:15:18Z

178 votes

Java关键字列表指定goto关键字,但标记为“未使用”。

它是在原始的JVM中(见@VitaliiFedorenko的回答),但随后删除了。 它可能保留为保留关键字,以防它被添加到更高版本的Java中。

如果列表中没有goto,并且稍后会将其添加到该语言中,则使用单词goto作为标识符(变量名,方法名等等)的现有代码将会中断。 但是因为goto是一个关键字,这样的代码甚至不会在当前编译,并且仍然可以使它实际上稍后执行某些操作,而不会破坏现有代码。

Thomas answered 2019-02-28T00:14:20Z

137 votes

关键字存在,但未实现。

我能想到的唯一使用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:

在Java中,你可以这样做:

loops:

for (int i = 0; i < MAX_I; i++) {

for (int j = 0; j < MAX_J; j++) {

// do stuff

break loops;

}

}

jonnystoten answered 2019-02-28T00:15:57Z

43 votes

[http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html]

“关键字const和goto是   保留,即使他们不是   目前使用。“

Isaac E answered 2019-02-28T00:16:29Z

28 votes

因此,如果语言设计者感到需要,他们可以在某一天使用。

此外,如果来自具有这些关键字的语言(例如C,C ++)的程序员错误地使用它们,那么Java编译器可以提供有用的错误消息。

或者也许只是为了阻止程序员使用goto :)

dave answered 2019-02-28T00:17:09Z

19 votes

它们保留供将来使用(请参阅:Java语言关键字)

关键字const和goto是保留的,即使它们当前未被使用。

Java中没有goto语句的原因可以在“Java语言环境”中找到:

Java没有goto语句。 研究表明,goto(错误)的使用频率高于“因为它存在”。 消除goto导致语言的简化 - 例如,没有关于goto对for语句中间的影响的规则。 对大约100,000行C代码的研究确定,大约90%的goto语句纯粹用于获得打破嵌套循环的效果。 如上所述,多级中断并继续删除对goto语句的大部分需求。

Heinzi answered 2019-02-28T00:17:57Z

17 votes

如何在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);

}

}

结果:

I am here // i=0

j: 0

j: 1

I am here // i=1

I am here // i=2

temp = 1

andrew answered 2019-02-28T00:18:24Z

10 votes

重要的是要理解goto构造是程序员用机器代码和汇编语言编程的日子。 因为这些语言是如此基本(例如,每个指令只做一件事),程序控制流程完全用goto语句完成(但在汇编语言中,这些被称为跳转或分支指令)。

现在,虽然C语言相当低级,但它可以被认为是非常高级的汇编语言 - C中的每个语句和函数都可以很容易地分解为汇编语言指令。 尽管C不是当今计算机编程的主要语言,但它仍然在低级应用程序中大量使用,例如嵌入式系统。 因为C的函数如此紧密地反映了汇编语言的功能,所以只有goto包含在C中才有意义。

很明显,Java是C / C ++的演变。 Java与C共享许多功能,但是抽象了更多的细节,因此只是以不同的方式编写。 Java是一种非常高级的语言,因此当更多高级结构(如函数,for,for和while循环)执行程序控制流时,它不需要像goto那样具有低级功能。 想象一下,如果你在一个函数中,并将goto标记到另一个函数中。 当其他函数返回时会发生什么? 这个想法很荒谬。

这并不一定能解释为什么Java包含goto语句但不会让它编译,但重要的是要知道为什么goto首先被用在较低级别的应用程序中,以及为什么它只是没有意义 在Java中使用。

Michael P at NCSU answered 2019-02-28T00:19:13Z

10 votes

不,goto未使用,但您可以定义标签并将循环保留到标签。 您可以使用break或continue,后跟标签。 所以你可以跳出多个循环级别。 看看教程。

Arne Burmeister answered 2019-02-28T00:19:40Z

8 votes

不,谢天谢地,Java中没有goto。

goto关键字仅保留,但未使用(const也是如此)。

Bozho answered 2019-02-28T00:20:14Z

7 votes

因为它不受支持,为什么你想要一个什么都不做的break label;关键字或一个名为continue label;的变量?

虽然您可以使用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");

}

}

pjp answered 2019-02-28T00:20:51Z

6 votes

不,goto在Java中没有使用,尽管它是一个保留字。 对于const也是如此。这两个都在C ++中使用,这可能是它们被保留的原因; 其目的可能是避免让迁移到Java的C ++程序员感到困惑,也许还要保留在Java的后续版本中使用它们的选项。

Michael Borgwardt answered 2019-02-28T00:21:19Z

2 votes

正如所指出的那样,Java中没有goto,但关键字是保留的,以防Sun感觉有一天会向Java添加goto。 他们希望能够在不破坏太多代码的情况下添加它,因此他们保留了关键字。 请注意,在Java 5中,他们添加了goto关键字,并且它也没有破坏那么多代码。

虽然Java没有goto,但它有一些构造对应于goto的一些用法,即能够break和continue具有命名循环。 另外,finally可以被认为是一种扭曲的goto。

Thomas Pornin answered 2019-02-28T00:21:59Z

1 votes

禁止声明具有相同名称的变量。

例如int i = 0, goto;

Karl answered 2019-02-28T00:22:36Z

1 votes

它被认为是你不做的事情之一,但可能被列为保留字,以避免混淆开发人员。

Dean J answered 2019-02-28T00:23:07Z

1 votes

[http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto]

如果你被告知Java中没有goto语句你就被愚弄了。 实际上,Java包含两层“源”代码。

Mikael Lindlöf answered 2019-02-28T00:23:44Z

1 votes

请注意,您可以替换goto的大部分良性用法

返回

打破

打破标签

扔进了try-catch-finally

starblue answered 2019-02-28T00:24:36Z

1 votes

请参阅以下链接,显示所有java保留字,并告诉您它们添加的版本。

[http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html]

goto是保留的,即使它当前没有使用,也绝不会说永远不会:)

Paul Whelan answered 2019-02-28T00:25:21Z

1 votes

我也不是goto的粉丝,因为它通常会使代码的可读性降低。 但是我确实相信该规则有例外(特别是当词法分析器和解析器时!)

当然,您可以将程序转换为类似汇编程序的程序,然后编写类似的东西,将程序带入Kleene Normalform

int line = 1;

boolean running = true;

while(running)

{

switch(line++)

{

case 1: /* line 1 */

break;

case 2: /* line 2 */

break;

...

case 42: line = 1337; // goto 1337

break;

...

default: running = false;

break;

}

}

(所以你基本上写一个执行你的二进制代码的VM ...其中goto对应于指令指针)

这比使用goto的代码更具可读性,不是吗?

Viktor Engelmann answered 2019-02-28T00:26:12Z

0 votes

因为虽然Java语言不使用它,但JVM字节码可以。

gribnit answered 2019-02-28T00:26:43Z

0 votes

当然它是关键字,但它不用于源代码级别。

但是如果你使用jasmin或其他低级语言,它转换为字节码,那么“goto”就在那里

user1722245 answered 2019-02-28T00:27:21Z

-3 votes

goto不是Java

你必须使用GOTO但它无法正常工作。在关键的java字中它没有被使用。[http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html]

public static void main(String[] args) {

GOTO me;

//code;

me:

//code;

}

}

m-tech answered 2019-02-28T00:27:58Z

java的goto语句_语法 - Java中是否有goto语句?相关推荐

  1. java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at

    [http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...

  2. java的tey语句return了_Java中try、finally语句中有return时的执行情况

    在Java中当try.finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家众说纷纭,有的说会执行,有的说不会执行,到底哪种说法正确,现在通过下面的例子 ...

  3. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  4. c语言格式字符If,C语言所有语句格式 C语言中的的if语句共有多少种格式?

    导航:网站首页 > C语言所有语句格式 C语言中的的if语句共有多少种格式? C语言所有语句格式 C语言中的的if语句共有多少种格式? 相关问题: 匿名网友: 1.if语句: if(Bool表达 ...

  5. java任何表达式都可以当作语句_在Java语言中语句用分号终止,并不是所有的表达式都可以构成语句...

    在Java语言中,语句以分号":"作为结束标志.块语句由其他语句组成,其本身不需要用分号结尾.另外,内嵌有块语句并以块语句结尾的语句,也不需要用分号结尾. Java语句可分为空语句 ...

  6. java switch case语句_在Java中使用switch Case语句的例子

    当我们有多个选项,并且需要为每个选项执行不同的任务时,就需要使用Switch case语句. Switch case语句的语法如下-switch (variable or an integer exp ...

  7. java try catch嵌套_解析Java中未被捕获的异常以及try语句的嵌套使用

    Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public st ...

  8. java 删除语句_是java语句

    <21天学通Java(第7版)>-- 第2章 Java编程基础 2.1 语句和表达式 本节书摘来异步社区<21天学通Java(第7版)>一书中的第2章,第2.1节,作者: [美 ...

  9. java 1.6 最大化_关于java:JDK 1.6和1.7中的新功能

    我很了解JDK 1.5.众所周知,除了新的API(例如AtomicInteger),还有一些主要的语言更改,例如提供对泛型的支持.添加枚举.私有化自动装箱和自动取消装箱等. 我想找到一些资源,它们最好 ...

最新文章

  1. 全球及中国太阳能硅片产业供需走势及投资建设前景分析报告2021-2027年
  2. mapreduce的shuffle机制(来自学习笔记)
  3. CSS中的类class和标识id选择符(.和#号)
  4. Vue父子组件传递数据
  5. 编程珠玑笔记-第12章习题
  6. 机器翻译市场需求调研报告
  7. 安装“万能解码器”还原真实“解码”
  8. 深受企业青睐的华为云
  9. Waterfall Header Bidding机制
  10. java徽章_java
  11. Alibaba微服务组件Sentinel
  12. java标准输出输入(Scaner类)
  13. 克服低温磁场测量的挑战—高斯计
  14. Python 详解计算 Median Absolute Deviation(绝对中位偏差)| 还可用于异常值检测
  15. 【思考】开学第一课--大学的终结,终生学习
  16. 李开复:中国创业失败率高因天使投资人太少
  17. 【五六七人口普查】我国区县级人口基本情况
  18. (七)Linux内存管理 - zoned page frame allocator - 2
  19. Python 调用中控门禁并包装成webservice供移动设备调用。
  20. 区分有状态和无状态组件

热门文章

  1. vcs产生code coverage与function coverage
  2. 如何优雅地让多个node版本共存--nvm
  3. 【FLV解析】audio tag 解析:解析 AudioSpecificConfig TAG
  4. Android按键唤醒原理
  5. 软件设计模式之中介者模式实验
  6. U盘格式化提示卷标无效
  7. C语言实现一趟快速排序算法
  8. 基于java下Springboot框架实现小区物业管理系统
  9. uva 10881蚂蚁(思维题)---理清关系
  10. intro是啥意思_intro-是什么意思_intro-怎么读_intro-翻译_用法_发音_词组_同反义词_表示“向内_在内”之义-新东方在线英语词典...