RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 667941
Accepted
user194625
user194625
Asked:2020-05-19 13:22:39 +0000 UTC2020-05-19 13:22:39 +0000 UTC 2020-05-19 13:22:39 +0000 UTC

为什么 const 和 goto 没有在 java 中使用?

  • 772

下面说说Java语言中两个保留但未使用的关键字,const和goto。为什么不使用它们?据我了解, const可以替换为public static final,但是goto呢?

java
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    default locale
    2020-05-19T15:04:32Z2020-05-19T15:04:32Z

    更新

    Java 规范(§3.9. 关键字)指定了保留的原因const和goto,这与未来的计划无关:

    关键字 const 和 goto 是保留的,即使它们当前未被使用。如果这些 C++ 关键字不正确地出现在程序中,这可能允许 Java 编译器生成更好的错误消息。
    关键字const和goto是保留的,尽管当前未使用。如果这些 C++ 关键字在程序中被误用,这将允许 Java 编译器生成更清晰的错误消息。

    那。Java 开发人员最初并没有计划使用这些词,而是保留它们以在复制用 C++ 编写的代码时捕获错误(如果变量可以命名为goto其中之一const,则复制的 C++ 代码可能会错误地编译并在执行时导致意外结果)。自 JLS 第一版以来,规范的这一部分没有改变。

    以下是答案的原始版本,它解决了在 Java中寻找用途const的尝试。goto

    Many letters: const并goto从 C++ 搬来。Java 中没有使用关键字。它们在 C++ 中执行的功能在 Java 中的实现方式不同。

    故事

    从历史上看,Java 的语法是基于 C++ 的,因此开发人员选择保留一些 C++ 关键字来:

    • 复制用 C++ 编写的代码时捕获错误;
    • 将来在扩展语言时使用它们;
    • 简化 C++ 开发人员向 Java 的过渡。

    const和goto

    所以问题归结为:“Java 是否需要const,goto他们应该做什么?”

    常数

    const可以在链接中查看其中一项与C ++类推的建议:

    JDK-4211070:Java 应该支持用于代码维护的常量参数(如 C++)

    该提议于 2005 年结束。通过链接,您可以看到分析,在结论中指出了与输入相关的问题const:

    • 现在添加 const 为时已晚。如果这是从 1.0 添加的,情况可能会有所不同。

    • Const 污染:C++ 方法要求所有 const 方法都标有 const 关键字。这意味着大多数方法必须显式标记为 const。这往往会使 C++ 中的所有方法变得混乱。

    • 兼容性是JDK的一个非常重要的特性。可以说,应该修改集合类以指示元素是常量。这将需要以相同的方式更新所有现有的实现,从而有效地破坏集合接口的所有现有的非 JDK 实现。类似地,
      hashCode 必须是 const,打破了 String 的当前实现。

    已经提供了在 Java 中创建 const 变量/字段final。从 C++ 引入机制被认为是不合理的。

    去

    名声goto不好(参见 Dijkstra 的“ Go To Statement Considered Harmful ”)。Java 有替代的跳转运算符:break, continue, return,涵盖了大部分范围。唯一赞成的论据goto是,在某些情况下,使用goto允许您简化代码。显然,支持者goto无法对开发人员产生足够的影响来添加新关键字。

    英文版的类似讨论:

    • 为什么 Java 中没有 Constant 特性?
    • Java中有goto语句吗?
    • 19
  2. pavlofff
    2020-05-19T13:58:46Z2020-05-19T13:58:46Z

    goto被认为是“糟糕的操作员”,会损害可读性并增加代码混淆,生成难以维护的“意大利面条代码”(也违反了非常重要的编程概念,可以在答案末尾的链接中找到)。

    一些认真的人认为它在编程语言中没有立足之地,并写了整本书。因此,当有人在谈论它时,Java 的创建者正在这样做。他们真诚地相信,如果没有无条件的转变,世界会变得更仁慈一点,就所有问题和优势而言,人们可以同意他们的看法。更多的

    这个词本身是在创建语言的阶段保留下来的,是从当时其他流行的词中迁移而来的。所以还是在说...

    PS:Java还是有通过操作符break和continue标签实现的无条件跳转。您使用它们的频率如何?您是否完全了解这种可能性(这是关于此操作员的需求)?

    • 13
  3. iluxa1810
    2020-05-19T13:35:11Z2020-05-19T13:35:11Z

    例如,它们可能不被使用,但在语言中,作为将来的保留,以便在未来的版本中很容易添加这个运算符并且不会与已经编写的代码中的变量/对象的名称相交(Legacy) 在旧版本的语言中。

    在 JavaScript 中,似乎也是同样的做法。

    关于const哪些可以更换public static final:

    JAVA 开发人员没有理由在以后实现 const 并添加所谓的“语法糖”,当您可以这样那样做时,结果程序将以相同的方式运行。

    例如,C# 有很多语法糖:

    1. 您可以通过别名 (int) 或类型本身 (Int32) 声明变量
    2. 有 LINQ,它允许您在简单的情况下不使用循环等...
    • 5

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5