【问题标题】:custom java package doesn't work自定义 java 包不起作用
【发布时间】:2012-11-30 18:13:18
【问题描述】:

我正在尝试创建一个自定义包来放置我的一些类,但是当我尝试将它导入到我的一个程序中时,它说找不到。

这是我要编译的文件,但它说找不到包

import project_euler.Fibonacci;

public class test {
    public static void main(String[] args) {
        Fibonacci fib = new Fibonacci();
        System.out.println(fib.getTerm(10));
    }
}

这是斐波那契类

package project_euler;
public class Fibonacci {
    public int getTerm(int n) {
        if (n < 0 || n > 46) {
            throw new IllegalArgumentException();
        } else {
            return (n > 1) ? getTerm(n-1) + getTerm(n-2) : n;
        }
    }
}

这是我尝试编译时遇到的错误

test.java:1: error: package project_euler does not exist
import project_euler.Fibonacci;
                ^
test.java:6: error: cannot access Fibonacci
            Fibonacci fib = new Fibonacci();
            ^
bad source file: C:\Users\dhout_000\Documents\Project Euler\project_euler\Fibonacci.java
file does not contain class Fibonacci
Please remove or make sure it appears in the correct subdirectory of the sourcepath.
2 errors

我的目录设置是

> My Documents
    > Project Euler
        - test.java
        > project_euler
            - Fibonacci.class
            - Fibonacci.java

我似乎无法弄清楚问题是什么

【问题讨论】:

  • 为什么你的 .java 文件在包文件夹中?把它移到外面。并重新编译。
  • 您从哪个目录运行编译器?您应该从C:\Users\dhout_000\Documents\Project Euler 运行它或相应地设置类路径。在我看来,您是从其他地方运行它,所以编译器误解了您的包结构(一开始并不是很好,但这是另一个问题)。

标签: java packages


【解决方案1】:

确保您没有设置 CLASSPATH 环境变量。

从包层次结构的基本目录编译并运行您的代码。

C:\My Documents\Project Euler> javac project_euler\Fibonacci\*.java

C:\My Documents\Project Euler> java project_euler.Fibonacci.test

您还可以使用 -cp 选项为 javacjava 命令显式指定类路径。确保包含包层次结构的基本目录 (C:\My Documents\Project Euler)。当您在 C:\My Documents\Project Euler 中时,您可以通过指定 .(当前目录)来做到这一点:

C:\My Documents\Project Euler> javac -cp . project_euler\Fibonacci\*.java

C:\My Documents\Project Euler> java -cp . project_euler.Fibonacci.test

注意:根据常见的 Java 命名约定,名称(包、类、方法名)中不应使用下划线,包名应小写,类名应以大写字母开头。将包重命名为 projecteuler.fibonacci(当然,您还需要重命名文件夹),并将类 test 重命名为 Test

【讨论】:

  • 如果您查看有问题的源代码,您会看到test 类在默认包中,Fibonacci 类在project_euler 包中。因此,他的目录结构如问题所示 是正确的并且与他的源代码一致(实际上我刚刚尝试过,它工作正常)。问题出在其他地方(或者问题中发布的内容并未准确反映他机器上的真实情况)。
  • 没有Fibonacci 包,这是类的名称,所以该文件夹不需要存在。
  • @ivantod 你说得对,我看的不够仔细。编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 2023-03-14
  • 2020-04-14
  • 2015-05-28
  • 2012-05-05
  • 2020-05-21
  • 2019-11-13
相关资源
最近更新 更多