我知道这个问题非常基本,但经过几次谷歌搜索我找不到答案。我是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)
答案 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.