使用Java Package时编译错误?

时间:2013-11-16 05:16:58

标签: java oop package

我知道这个问题非常基本,但经过几次谷歌搜索我找不到答案。我是Java新手。今天我学习了java包。我有A级,所以:

package hello;

public class A {

}

我也有B级使用A类:

package hello;

public class B {
    public static void main(String[] args) {
        A a = new A();
    }
}

A类和B类我放在“hello”文件夹中。当我编译B时,我得到了这样的错误:

B.java:5: error: cannot find symbol
                A a = new A();
                ^
  symbol:   class A
  location: class B
B.java:5: error: cannot find symbol
                A a = new A();
                          ^
  symbol:   class A
  location: class B
2 errors

编辑:在cmd中输入

>>javac A.java

>>javac B.java

    B.java:5: error: cannot find symbol
                    A a = new A();
                    ^
      symbol:   class A
      location: class B
    B.java:5: error: cannot find symbol
                    A a = new A();
                              ^
      symbol:   class A
      location: class B
    2 errors

我尝试使用此命令编译:

>>javac *.java

>> java B
Exception in thread "main" java.lang.NoClassDefFoundError: B (wrong name: hello/
B)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

2 个答案:

答案 0 :(得分:1)

它不是编译错误,而是执行错误。

java hello.B

一样运行它

这是因为您的主class B位于包hello中。因此,为了提及您,您必须说hello.B

答案 1 :(得分:0)

尝试在hello目录中编译两者:javac *.java

如果您在没有A的情况下编译B,则java不知道A,因此您会收到错误。如果你同时编译(使用* .java),javac可以正确链接。

要运行,请尝试以下方法:从hello中跳出一个级别(如您在文件夹中看到的那样)。然后输入java hello.B。它应该工作。原因是因为我们将它打包在hello下,java需要FQCN(完全限定类名),告诉它在文件夹hello中找到B.