【发布时间】:2014-03-12 03:22:59
【问题描述】:
我试图弄清楚类导入在 Java 中是如何工作的。我有以下文件结构:
testProject
pkgA
A.java
A.class
dir
pkgB
B.java
B.class
A.java的内容是:
package pkgA;
public class A {
public static String funcA() {
return "funcA in class A in pkgA";
}
}
B.java的内容是:
package pkgB;
import pkgA.A;
public class B {
public static void main(String[] args) {
System.out.println((new A()).funcA());
}
}
在 testProject 我运行:
javac pkgA/A.java
上面的命令不打印任何东西。
在 testProject/dir 我运行:
javac pkgB/B.java -classpath ..
上面的命令不打印任何东西。
在 testProject/dir 我运行:
java pkgB/B -classpath ..
上面的命令打印如下:
Exception in thread "main" java.lang.NoClassDefFoundError: pkgA/A
at pkgB.B.main(B.java:7)
Caused by: java.lang.ClassNotFoundException: pkgA.A
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
我做错了什么?
将类路径作为绝对路径没有帮助。
$ java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
操作系统是 Ubuntu 12.04
谢谢!
【问题讨论】:
-
此外,由于 fktA() 是静态的,因此不需要类实例来调用它: System.Out.println(A.fktA());应该足够了。您的第一个命令什么也不做,因为 A 没有定义合适的入口点(至少从您发布的内容来看)。 “直接运行”一个类需要一个 public static void Main(String[] args)。
标签: java classpath noclassdeffounderror classnotfoundexception