Java import 如何使用

有两段程序 包(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

提示错误

Code:
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.
于是尝试 D:\Java\testImport2>java Time1PackageTest

Code:
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]

下面是老外的回答:


 Originally Posted by  oszc 
then i execute D:\Java\testImport2>java -cp D:\Java\testImport Time1PackageTest
the error occur:
Code:
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.
This is because you only put the directory for the com.deitel.javafp.ch08.Time1 class in the class path, and don't include the current directory (ie the one with the Time1PackageTest class). So it fails to find the Time1PackageTest class.

 Originally Posted by  oszc 
then i execute D:\Java\testImport2>java Time1PackageTest

error again:
Code:
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
In this case you are running without any defined classpath so it defaults to current directory (.). This means it can find Time1PackageTest, since it is in the current directory, but now it can't find the com.deitel.javafp.ch08.Time1 class.

You need both:

-cp .;D:\Java\testImport


我自己的总结

  包含两个路径 在-cp后面用;号分隔,两个路径的先后顺序不影响程序的正确执行,也就是被引用包文件(package)与引用文件(import)的位置都要列出来,其前后顺序不影响程序运行。以上完整运行的命令是:

D:\Java\testImport2>java -cp D:\Java\testImport;.  Time1PackageTest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值