有两段程序 包(package) Time1.class在文件夹 D:\Java\testImport\com\deitel\javafp\ch08 中,然后我创建了一个新类:Time1PackageTest.java,当中包含了main方法,并且引用package Time1.class.并且将它放在 D:\Java\testImport2
然后我执行 D:\Java\testImport2>javac -cp D:\Java\testImport 没有提示错误
然后执行 D:\Java\testImport2>java -cp D:\Java\testImport Time1PackageTest
提示错误
Exception in thread "main" java.lang.NoClassDefFoundError: Time1PackageTest Caused by: java.lang.ClassNotFoundException: Time1PackageTest 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) Could not find the main class: Time1PackageTest. Program will exit.
Exception in thread "main" java.lang.NoClassDefFoundError: com/deitel/javafp/ch0 8/Time1 at Time1PackageTest.main(Time1PackageTest.java:9) Caused by: java.lang.ClassNotFoundException: com.deitel.javafp.ch08.Time1 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) ... 1 more
time1code:
[code]
package com.deitel.javafp.ch08;
public class Time1 {
private int hour;
private int minute;
private int second;
public void setTime(int h, int m, int s)
{
hour =( ( h>=0 && h < 24)?h:0 );
minute = ( (m>=0 && m<60)?m:0 );
second = ( (s>=0 && s<60)?s:0 );
}
public String toUniversalString()
{
return String.format("%02d:%02d:%02d", hour, minute, second);
}
public String to1String()
{
return String.format("%02d:%02d:%02d %s", ( (hour==0||hour==12)?12:hour%12 ), minute, second, hour>=12?"PM":"AM");
}
}
[/code]
Time1PackageTest code:
[code]
import com.deitel.javafp.ch08.Time1;
public class Time1PackageTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Time1 time1 = new Time1();
System.out.println(time1.toUniversalString());
}
}
[/code]
下面是老外的回答:
You need both:
-cp .;D:\Java\testImport
我自己的总结
包含两个路径 在-cp后面用;号分隔,两个路径的先后顺序不影响程序的正确执行,也就是被引用包文件(package)与引用文件(import)的位置都要列出来,其前后顺序不影响程序运行。以上完整运行的命令是:
D:\Java\testImport2>java -cp D:\Java\testImport;. Time1PackageTest