Java 将类添加到包中

Java 将类添加到包中,java,packages,Java,Packages,我正在学习java软件包。我成功创建了一个包含单个.class文件Hello.class的包包。现在我想在同一个包中添加另一个类文件。我将新的java类命名为bye.java,并通过 指挥部。bin目录包含包目录。 包含主函数的I compile test.java文件 javac -cp ./bin test.java 指挥部。编辑工作做得很好。但是当我进去的时候 java test 指挥部。我明白了 Hello, world Exception in thread "main" jav

我正在学习java软件包。我成功创建了一个包含单个.class文件Hello.class的包包。现在我想在同一个包中添加另一个类文件。我将新的java类命名为bye.java,并通过

指挥部。bin目录包含包目录。 包含主函数的I compile test.java文件

javac -cp ./bin test.java
指挥部。编辑工作做得很好。但是当我进去的时候

java test 
指挥部。我明白了

Hello, world
Exception in thread "main" java.lang.NoClassDefFoundError: pack/Goodbye
at test.main(test.java:9)
Caused by: java.lang.ClassNotFoundException: pack.Goodbye
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 1 more
有人能解释我在这件事上做错了什么吗?我正在ubuntu 14.04上工作,在终端上做所有的事情

Hello.java和再见.java文件都位于

/home/username/apps/src 
目录。相应的类文件在里面

/home/username/apps/bin/pack
目录。包目录是由创建的

javac -d ./bin 
指挥部。 Hello.java文件的内容

package pack;
public class Hello
{
    public static void HelloMessage()
    {
        System.out.println("hello, world");
    }
}
它工作正常。对于其相应的类,将加载文件 java文件的内容是

package pack;
public class Goodbye
{
    public static void message()
    {
        System.out.println("bye");
    }
}
导入包的test.java文件位于/home/username/apps目录。它有以下几行代码

import pack.*;
public class test
{
    public static void main(String args[])
    {
        Hello.HelloMessage();
        Goodbye.message();
    }
}

非常感谢您的帮助。

我对您的类文件的理解如下:

/home/username/apps/bin
                     |
                     +-- pack
                     |     |
                     |     +--- Hello.class
                     |     |
                     |     +--- Goodbye.class
                     |
                     +-- test.class
然后转到
/home/username/apps/bin
并拨打

java -cp . test
使用
-cp
可以添加当前目录以搜索类。这应该始终是包的根。然后参考你的主要课程

顺便说一句:根据标准,类名应该以大写字母开头,比如
Test


更新:更新了类文件位置。

您需要设置两个位置的类路径,因为类文件位于两个不同的位置:

  • /主页/用户名/应用程序/(此位置提供test.class)
  • /home/username/apps/src/bin(pack.Hello.class和pack.再见.class在此位置可用)
  • 您可以使用javac命令的-cp选项来实现这一点。您需要在多个类路径之间放置分号,如下所示:

    java -cp .;./bin test
    

    但是为什么不使用IDE呢?这将使你的工作更容易。我有C++背景,并已习惯了终端。我不喜欢未知原因的IDE,我想,想知道它在命令行中是如何工作的是件好事。这使我们在最后有了更深的理解,即使以后专门使用IDE。不,test是一个单独的.java文件,它位于上面一个目录中。我错误地理解了文件夹结构。我还编写了javac而不是java命令。我看到的问题是,所有必需的类都不在类路径中。使用java命令的-cp选项指定所有类的路径。
    java -cp .;./bin test