【问题标题】:Java can't find symbol from .class in the same directoryJava 在同一目录中无法从 .class 中找到符号
【发布时间】:2013-09-14 21:09:17
【问题描述】:

我有两个文件:MyStringLog.java(它扩展了 ArrayStringLog)和 TestDriver.java 在同一个目录中。为什么 TestDriver.java 不能识别 MyStringLog 类中的 MyStringLog 构造函数?在 TestDriver.java 我声明:

MyStringLog animals = new MyStringLog("animals");

这应该构造一个名为 animals 的新 MyStringLog 对象,但我在编译时遇到 2 个错误,即未找到 MyStringLog 符号。

【问题讨论】:

  • 您是否使用 import 语句导入 MyStringLog
  • 我认为您需要将此当前目录添加到类路径中。类似于添加“-cp”。到命令行。
  • 你说它们在同一个目录下,但是它们的包是一样的吗?
  • 你说得对,尼古拉斯。通过附加 :.到我的 CLASSPATH 声明结束时,我所有的问题都消失了。感谢您的帮助。

标签: java class object constructor symbols


【解决方案1】:

我得到这个大致工作。为此...

对于文件ArrayStringLog.java,我删除了implements StringLogInterface,因为我根本无法访问该接口。这样做之后,我删除了package ch02.stringLogs;。当我用package... 编译这个文件时,我收到了错误:Exception in thread "main" java.lang.NoClassDefFoundError: ArrayStringLog (wrong name: ch02/stringLogs/ArrayStringLog)

然后在MyStringLog.java 中,我删除了import ch02.stringLogs.*;。然后我保存并编译了代码,并运行了 TestDriver,我没有收到任何编译错误。

这让我相信您的错误源于ArrayStringLog.java 中的package 语句。


为了最终获得编译,我将所有四个文件(ArrayStringLog、MyStringLog、StringLogInterface、TestDriver)放入同一目录,删除了所有 package... 语句,implements StringLogInterface 添加回 ArrayStringLog。 java,编译每个,然后使用添加的toString 方法运行TestDriver,输出为:

Log: animals

1. dog
2. cat

这是测试驱动程序:

public class TestDriver {
    public static void main(String[] args) {
        MyStringLog animals = new MyStringLog("animals");
        animals.insert("dog");
        animals.insert("cat");

        System.out.println(animals.toString());
    }
}

为了清楚起见,ArrayStringLog 以:

public class ArrayStringLog implements StringLogInterface

【讨论】:

  • 哎呀,这是一个错字发布在这里。我的文件没有错字。
  • 注意,以上评论是对我之前的回答的回应,不再适用。
  • dropbox.com/s/6koo8eim16xcskb/bookFiles.zip 这些是我们正在使用的所有文件。我看了一个同学编译的代码,他们不用碰ArrayStringLog.java。
  • 查看我修改后的答案。如果您还有更多问题,请发表评论。
  • 我从 ArrayStringLog.java 中删除了“implements StringLogInterface”。我删除了“包 ch02.stringLogs;”从所有文件。我将它们都放在同一个目录中,但 MyStringLog.java 不会编译,TestDriver.java 也不会。我是否忘记删除某些内容?
【解决方案2】:

尝试将import MyStringLog; 添加到您的文件中。

你也在使用包吗?在这种情况下应该是import <package_name>.MyStringLog;

【讨论】:

  • 这给了我错误“TestDriver.java:1: error: '.'预期导入 MyStringLog;"箭头指向分号。 ArrayStringLog 类位于 MyStringLog.java 导入的 ch02.stringLogs 包中。
  • 然后使用import ch02.stringLogs.MyStringLog;
猜你喜欢
  • 1970-01-01
  • 2013-08-20
  • 2015-12-12
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 2021-12-04
  • 1970-01-01
相关资源
最近更新 更多