你是放在jlj\mypackage目录下吗?

解决方案 »

  1.   

    鉴于你的第二个类没有写出具体的包:
    对于一个包下的类是不需要import 的, 对于不同包下的类必须能够在CLASSPATH中找到,包括当前目录下的类(.)。
      

  2.   

    鉴于你的第二个类没有写出具体的包:
    对于一个包下的类是不需要import 的, 对于不同包下的类必须能够在CLASSPATH中找到,包括当前目录下的类(.)。
      

  3.   

    同意skather(美女)的观点:自己不能import自己。
      

  4.   

    我没有自己import自己呀!各位注意看我的import语句上有package语句吗?没有是吗!那怎么会产生这个现象呢?怪啊!
      

  5.   

    各位能不能举个实例呢?两个Java文件是同一个包的,在主程序文件中用import 包名.*;将包导入进来,使主程序文件能访问这两个Java文件的类,看看你们是怎么写的?马上给分,决不食言!!!
      

  6.   

    尽管你们说自己不能import自己,但是如果是用具体的类名来import的话,是可以的。但为什么用通配符就不可以呢?你们这种说法好象不成立的啊!还是没有能搞明白啊!
    还有如果将包文件打包到其他CLASSPATH能找到的目录,也是不行的呀!主程序文件与包文件明明不是同一个包的呀!!!奇怪啊!!!
      

  7.   

    各位说的好象都没有道理啊!如果是各位,有两个Java源文件是属于同一个包的,将这两个同一个包的Java源文件编译到无论是当前目录或是其他CLASSPATH能找到的目录,然后在另个有main方法的Java源文件中用import包名.*应该怎样来做呢?这个问题没有搞懂,真郁闷啊!!!请举个实例,写上最简单的代码好吗?谢谢了!!!
      

  8.   

    我的程序好象应该是没有什么问题的对把!那各位高人看,如果想要实现我以上说的功能,应该怎样来做才好呢???Sun对包的这种做法是不是没有处理的很好呢?谢谢各位了!
      

  9.   

    哈哈,import *当然不可以了,你自己在写的这个类也是这个包里的一个,这个类还没编译出来,怎么引用进来呀。import一个具体的类当然可以了,因为那些个类都是写好编译好了的。虽然import *的结果只是引入你要用到的类,不是引入所有的类,但是总得让它找到所有的类吧,正在写的这个就找不到,因为它是这个包里的一个类,但没有与之想应的.class文件对应。不知道我说的有没有道理。
      

  10.   

    你的问题真的很难懂,不过我还是实现了,这样的是,比如你的classpath里有一个是:
    c:\jdk\bin
    把你的包连同你的类一起放在这个classpath,就是你编译好的MyPackage.class和JljPackage.class放在
    c:\jdk\bin\jlj\mypackage下面你的Package里写的是import jlj.mypackage.*;
    只要编译的时候这样写
    javac -classpath c:\jdk\bin MyPackage.java
    这样编译就能通过了。呵呵,不知道是为什么,不写-classpath选项就不行,有4个错误,写了就可以了,可能这也是为什么javac也有-classpath这么一个选项的原因吧。
      

  11.   

    这个问题我以前也碰到过,今天整理出来。//关于package的用法假定:
    1、JDK的环境变量:
    JAVA_HOME=F:\j2sdk1.4.0_02
    Path=E:\WINNT\system32;E:\WINNT;E:\WINNT\System32\Wbem;f:\j2sdk1.4.0_02\bin;
    CLASSPATH=.; F:\java;F:\j2sdk1.4.0_02\lib;
    2、目录:
    F:\java3、源文件:
    F:\java\Vector.java
    F:\java\List.javaF:\java\LibTest.java4、文件内容
    -------------------------
    //: List.java
    // Creating a package 
    package com.bruceeckel.util;public class List {
      public List() {
        System.out.println(
          "com.bruceeckel.util.List");
      }
    } ///:~
    -------------------------
    //: Vector.java
    // Creating a package
    package com.bruceeckel.util;public class Vector {
      public Vector() {
        System.out.println(
          "com.bruceeckel.util.Vector");
      }
    } ///:~
    -------------------------
    //: LibTest.java
    // Uses the library
    package c03;
    import com.bruceeckel.util.*;public class LibTest {
      public static void main(String[] args) {
        Vector v = new Vector();
        List l = new List();
      }
    } ///:~
    -------------------------5、使用
    F:\java>javac Vector.java -d .
    F:\java>javac List.java   -d .
    F:\java>javac LibTest.java -d .6、生成的目录及类
    F:\java\com\bruceeckel\util\Vector.class
    F:\java\com\bruceeckel\util\List.class
    F:\java\c03\LibTest.class7、执行
    F:\java>java c03.LibTest8、输出结果
    com.bruceeckel.util.Vector
    com.bruceeckel.util.List9、注意
    A、在客户类属于某个包时,如LibTest.java属于包c03:
    a、使用package要保证成功的话,源文件都有放在统一的一个目录中,该目录
    可以是任意目录(因为CLASSPATH中有".;",即当前目录也是类的搜索目录),
    或者特别是CLASSPATH中指定的"F:\java";
    b、编译时指定生成类.class的目标目录,
    即"javac Vector.java -d ."或者"javac Vector.java -d f:\java"之类;
    c、执行时要使用包名.类名,即"java c03.LibTest"-----------------------------------B、在客户类不明确属于某个包时,如LibTest.java中无语句"package c03;":
    a、执行情况如下:
    F:\java>javac LibTest.java -verbose
    [parsing started LibTest.java]
    [parsing completed 120ms]
    [loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/lang/Object.class)]
    [loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/lang/String.class)]
    [checking LibTest]
    [loading .\Vector.java]
    [parsing started .\Vector.java]
    [parsing completed 20ms]
    LibTest.java:8: cannot resolve symbol
    symbol  : constructor Vector  ()
    location: class Vector
        Vector v = new Vector();
                   ^
    [loading .\List.java]
    [parsing started .\List.java]
    [parsing completed 0ms]
    LibTest.java:9: cannot resolve symbol
    symbol  : constructor List  ()
    location: class List
        List l = new List();
                 ^
    [checking com.bruceeckel.util.Vector]
    [loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/lang/System.class)]
    [loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/io/PrintStream.class)]
    [loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/io/FilterOutputStream.class)]
    [loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/io/OutputStream.class)]
    [checking com.bruceeckel.util.List]
    [total 621ms]
    2 errorsb、出错的原因在于编译器的原理:根据"CLASSPATH=.;f:\java;f:\j2sdk1.4.0_02\lib;"
    查找当前目录、f:\java、f:\j2sdk1.4.0_02\lib等目录,来寻找所要类,但如果也找了
    源文件.java,则编译之。
    故由于LibTest.java没有明确属于某个包,则默认成属于根包,故查找到了Vector.java
    和List.java,则编译之,这样就出错了:系统找到了新的类
    (但不属于import中所指的包com.bruceeckel.util)。虽然后面也根据
    "\com\bruceeckel\util"找到了引用的类,但是前面出错了,故停止了。c、解决方法:
    将"F:\java\Vector.java"、"F:\java\List.java"更改名字或移出LibTest.java
    所在的目录;
    或者使用完整的import语句即:
    import com.bruceeckel.util.Vector;
    import com.bruceeckel.util.List;d、执行结果:
    F:\java>javac LibTest.java -verbose
    [parsing started LibTest.java]
    [parsing completed 110ms]
    [loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/lang/Object.class)]
    [loading f:\j2sdk1.4.0_02\jre\lib\rt.jar(java/lang/String.class)]
    [checking LibTest]
    [loading .\com\bruceeckel\util\Vector.class]
    [loading .\com\bruceeckel\util\List.class]
    [wrote LibTest.class]
    [total 631ms]F:\java>java LibTest
    com.bruceeckel.util.Vector
    com.bruceeckel.util.List------------------------------------------------------------------10、原则
    a、服务类在包指定的目录内;
    b、根包客户类的源代码和服务类的源代码在不同的目录中;
    c、有包客户类的源代码和服务类的源代码可以在同一目录中;
       或者使用完整import语句(不使用import pacage.×;而使用import pacage.classname;)
      

  12.   

    对不起,写反了。10、原则
    a、服务类在包指定的目录内;
    b、根包客户类的源代码和服务类的源代码在不同的目录中;
       或者使用完整import语句(不使用import pacage.×;而使用import pacage.classname;)
    c、有包客户类的源代码和服务类的源代码可以在同一目录中;