假设你的代码文件PackagedClass.java和Foreign.java放在c:\目录下
那么编译PackagedClass.java会在c:\c05\test\生成一个PackagedClass.class文件
再编译Foreign.java时会c:\c05下生成一个Foreign.class文件;
而import c05.test.*;这条语句会去导找c:\c05\c05\test这个包,
当然这个包是不存在的,所以会报错!
如果没有package c05;这条语句;
Foreign.class会生成在c:\下.import c05.test.*;会寻找c:\c05\test这个包
当然就可以找到PackagedClass.class这个类了.

解决方案 »

  1.   

    1、你的设置有点小问题
    我f盘的目录结构是:F:\CODE\java\c05\test
    classpath配置为:
    .;E:\jdk\lib\tools.jar;
    E:\jdk\lib\dt.jar;
    E:\jdk\bin;             (这个就没必要了,应该加到PATH变量中)
    E:\jdk\jre\lib\rt.jar;
    F:\CODE\java;2、两个源文件所放置的位置是在
    F:\CODE\java\c05\ 下面?3、编译时用javac -d . xxx.java
    从当前目录开始创建相应的子目录代表包路径。
    对于文件1
    //package c05;
    import c05.test.*;public class Foreign{
      public static void main(String[] args){
        PackagedClass pc = new PackagedClass();
      }
    }
    产生的Foreign.class 就在当前目录F:\CODE\java\c05\
    同时要引用到F:\CODE\java\c05\c05\test\PackagedClass.class也就是第2个文件编译后放在:F:\CODE\java\c05\c05\test\下面。
      

  2.   

    在F:\CODE\java目录下运行程序? java c05.Foreign
      

  3.   

    我的 Foreign.java是放在F:\CODE\java\c05
    PackagedClass.java是放在F:\CODE\java\c05\test
    我在cmd下:F:\CODE\java\c05下  javac Foreign.java   通过
    然后       F:\CODE\java\c05下  java Foreign
      

  4.   

    回 远远读你:
    回 爱生活爱星辉:
      我还是不太明白。import c05.test.*;怎么会到\c05\c05\test这个包找呢!
    书上说它应该是先在classpath下找到目录入口  然后再到c05.test下找所引用的包吗?
    这写知识在哪本书上有介绍?
      

  5.   

    你把程序:package c05;
    import test.*;--------------------〉此处改成这样(看看)public class Foreign{
      public static void main(String[] args){
        PackagedClass pc = new PackagedClass();
      }
    }在test下有文件2:
    package c05.test;public class PackagedClass{
      public PackagedClass(){
        System.out.println("Creating a packaged class");
      }
    }
      

  6.   

    package c05.test;你这里又打了个包^_^
      

  7.   

    如果classpath包含了'F:\CODE\java'
    那么 F:\CODE\java>javac c05\Foreign.java(或者'F:\CODE\java\c05>javac Foreign.java'也可以)
         F:\CODE\java>java c05.Foreign
    这样就可以了
    你的问题应该出在'F:\CODE\java\c05>java Foreign'上
    wheee(正午游魂)已经提出了。我想说一下编译的问题。
    这里为什么编译的时候'F:\CODE\java\c05>javac Foreign.java'也可以呢?
    这是因为你的classpath包含了'.',也包含了'F:\CODE\java'
    编译器先在当前目录(F:\CODE\java\c05)下找'c05\test'这个目录,找不到
    然后再去'F:\CODE\java'下找,能找到,所以编译顺利通过但是如果classpath没有包含'F:\CODE\java'
    那么就只能 F:\CODE\java>javac c05\Foreign.java
               F:\CODE\java>java c05.Foreign这是另外一个问题了,希望能对你也有一点帮助
      

  8.   

    楼主,这个概念其实不难,但是不好解释。你可以看看张孝祥的《java就业培训》关于包那一节的讲解。
    http://www.it315.org或看看王森的《java 深度历险》前两章。
      

  9.   

    1.以下是不设置CLASSPATH的最简单方式:
    编译:
    C:\CODE\java>javac c05\Foreign.java运行:
    C:\CODE\java>java -cp . c05.Foreign2.设置CLASSPATH=C:\CODE\java;.
    编译:
    C:\CODE\java\c05>javac Foreign.java运行:
    C:\CODE\java\c05>java c05.Foreign
      

  10.   

    哎,我解释得这么辛苦,竟然都没有分
    'goodhal0418(远远读你)'的答案根本是错的啊,竟然也可以有50
    我不是想争些什么,技术的东西,对就是对,错就是错
    本来就没有什么好争的