【问题标题】:Overriding acm.program init() method; does Java have to be this hard?覆盖 acm.program init() 方法; Java必须这么难吗?
【发布时间】:2012-02-24 21:30:59
【问题描述】:

Java 问题

我是 Java 的学生。到目前为止,我设法编写了大约 15 个 Java 程序并让它们在 PC 上运行。但是我还没有编写像我最近的分配需要的 init() 方法来初始化一些实例变量。编译器告诉我,我的 init() 方法正试图覆盖 acm.program 中的最终 init() 方法。这不就是 init() 方法应该做的吗?在上周用尽了 PC 上的所有途径之后,我认为这可能是 PC 上的 Eclipse 问题。 Java 文档中的所有示例代码都显示了小的 Mac 窗口。所以我想我会尝试将我的代码移动到运行 Lion OS 10.7.2 的 Mac 上。

切换到 MAC 环境。

  1. Mac 声称安装了 Java,但我认为它只是运行时环境,而不是开发环境。我能找到的应用程序只有 Java VisualVM,我假设它是虚拟机,所以没有 Java 开发软件。所以……我从斯坦福的网站下载了适用于 Mac 的 Eclipse,并获得了适用于 Java 开发者版本的 Eclipse IDE:Helios Service Release 2,并尝试运行一个包含导入语句的简单程序。
  2. 导入 acm.program.*;声明给编译器一个问题:“acm 无法解决”。研究后我认为问题是我没有下载 acm.jar 存档并将其添加到我的构建路径中。为什么这还没有为我完成,作为 Eclipse 的一部分,我不知道。我想一切都很难。
  3. 所以我下载了 acm.jar 存档,它位于我的下载文件夹中。我试着双击它,幸好mac不会执行它。我尝试将它拖到 Eclipse 中的源文件夹中,然后将其添加到构建路径中。一旦进入构建路径,Eclipse 就会告诉我 jar 丢失了。所以我从构建路径中删除了它,而是从 Eclipse 内部转到 Properties/Java Build Path/Libraries/add External JARS... 并导航到我的下载文件夹,其中 acm.jar 文件夹用于选择 JAR。但是,Eclipse 似乎正在寻找一个 .jar;.zip 文件,因为我的 Mac 已经解压缩了该文件夹,所以没有该文件。因此,我更改了打开的窗口以查找所有文件 (.),现在我看到单个 .java 文件太多,无法单独添加到构建路径中。
  4. 回到 PC 并下载 acm.jar zip 文件并以解压缩的形式将其复制到 Mac 上,然后再次将其作为 zip 文件添加到构建路径中。这解决了编译器错误和我在 Mac 上执行的简单程序!
  5. 接下来我将使用 init() 方法尝试我的程序,看看它现在是否有效。没有。 Mac上的同样问题。此 init 方法导致以下错误:此行有多个标记

    • 覆盖 acm.program.Program.init
    • 无法覆盖最终方法 程序

    公共无效初始化(){ 画布 = 新 HangmanCanvas(); 添加(画布); }

  6. 一定要这么难还是我错过了什么?

【问题讨论】:

标签: eclipse init


【解决方案1】:
  1. 通常 Mac 会安装整个 JDK。不过 Eclipse 不错。
  2. 没有安装这个“acm”包,因为它不是任何标准的东西;这就像问为什么你的冰箱里没有芦笋一样。
  3. 最后一个对话框是正确的;你需要原始的jar文件。再试一次,右键单击并“另存为...”链接以保存浏览器中的文件。
  4. 参见 3。我觉得特别有趣的是,有人会使用 Windows 计算机来弥补 Mac 的缺点;实际上,Mac 更加灵活和强大。
  5. 如果您收到一条消息,抱怨您正在尝试覆盖final 方法,那么您确实是在尝试做错事; final 实际上意味着“你不能覆盖这个。”也许你没有完全理解作业的说明。
  6. 我保证,它会变得更好。请务必将这些烦恼作为一种学习体验。

【讨论】:

  • 谢谢。在 Mac 上。我只开始使用 PC,所以我不会使用 Mac,因为我妻子经常使用 Mac。但现在我正在使用 Mac 来尝试克服 PC 的明显缺点,而不是相反。但是,我现在发现两个地方都发生了错误,所以我不能再责怪PC了。关于 init()。我将 init() 方法放在 run() 方法之外,但在类中。这是初始化我希望其他类访问的 GCanvas 实例的正确位置吗?
  • @Dana:大多数 Java 程序员不熟悉这个“acm.program”包——它不是一个标准库——所以我们不能仅仅根据你对问题的描述来帮助你。我进行了网络搜索,根据some documentation I found,acm.program.Program 的init 方法不是最终的。我建议您将整个程序包含在您的问题中(我认为它相当短),以便我们可以看到还有什么问题。
  • @Kevin:整个程序贴在这里:stackoverflow.com/questions/9331698/…
【解决方案2】:

Mac 上的 Java 没有任何理由比 PC 上的 Java 更好。语言和工具的工作方式应该相同......假设您使用的是相同版本的语言和类似版本的工具。

init 的问题与 PC 与 Mac 无关。因此,不要浪费时间切换平台来尝试修复它。你需要弄清楚是什么

从表面上看,编译器/IDE 是在告诉你真相。 Java 不允许您覆盖 final 方法。事实上,将方法声明为final全部意义是为了防止重载。

但是,这没有意义。根据我找到的here 的文档,acm.program.Program.init() 方法设计 被覆盖。那为什么不让你呢?

我怀疑您的问题的原因是您已下载或获得了 JAR 文件的副本,但有人乱用了该副本。有人将方法更改为final(出于某种原因最好是他们自己知道的),将其编译并发布以供人们下载。 Google 并不总是您的朋友...

因此,我建议您查看所有提供的讲义和文件,以查找提供的 JAR 副本或从何处下载它的说明。然后用推荐的 JAR 替换您当前使用的 JAR 副本。


为什么这还没有为我完成,作为 Eclipse 的一部分,我不知道。我想一切都必须是困难的。

Eclipse 应该如何知道这个“acm”的东西是什么?您需要哪个版本?从哪里下载?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2014-07-29
    相关资源
    最近更新 更多