import com.jungleboy.Employee;
//为什么不能import com.jungleboy.*;
import java.util.*;
class Test 
{
public static void main(String[] args) 
{
Employee e = new Employee();
e.out();
Random r = new Random();
System.out.println(r.nextInt(123));

}
}
package com.jungleboy;
public class Employee{
public void out(){
System.out.println("I am in Employee!");

}
}我把Employee.java放在根目录的com文件夹的jungleboy文件夹下import com.jungleboy.Employee;我这样写可以运行不会出错。
为什么不能像import java.util.*那样写成
import com.jungleboy.*;问题很基础 希望高手和不是高手的都说下。

解决方案 »

  1.   

    [包里面所有的类前面都写上public
      

  2.   

    eclipse下,我写成。*然后一点保存,那个*就变成我导入的那个类了
      

  3.   

    这是一个Java执行顺序的问题正常情况下么,javac在编译源文件的时候遇到非lang(java的核心类,不需要import的)类的话会尝试看看有没有被import进来了,如果被import进来了,那么就使用import进来的类来替代遇到的非lang类。如果没有被import进来或者import进来的类文件没有被找到,那么javac会在当前文件夹下面寻找对应于该类的源代码文件,找到该文件后编译它然后再编译你指定的文件。如果在当前文件夹下面没有找到的话,呵呵,那就会再到import指定的package目录中寻找,找到了就编译之,还是找不到的话就只有去classpath找了,如果找到了就也是编译之。如果还没有找到的话就报NoClassDefFoundError异常。
      

  4.   

    这里有一个和你差不多相同的问题,看了半天也没抓住重点,希望对你有帮助---->>传送门
      

  5.   

    http://topic.csdn.net/t/20030228/16/1478042.html16楼 18楼
      

  6.   

    顺序非自定义类-->import的类(例如import com.jungleboy.Employee;)--->当前文件夹下查找---->>import包(例如import com.jungleboy.*;)--->classpath---》NoClassDefFoundError
      

  7.   

    下面是我复制那边16楼的你的Package里写的是import   jlj.mypackage.*; 
    只要编译的时候这样写 
    javac   -classpath   c:\jdk\bin   MyPackage.java 
    这样编译就能通过了。 lz试试
      

  8.   

    为什么我测试,两个都可以成功???奇怪。。楼主不会是把Test这个类写在jungleboy里面了吧,是不能够import自己所在的包的
      

  9.   

    原理那边18楼解释的很好,学习了!我也给复制过来了!//关于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:\java 3、源文件: 
    F:\java\Vector.java 
    F:\java\List.java F:\java\LibTest.java 4、文件内容 
    ------------------------- 
    //:   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.class 7、执行 
    F:\java> java   c03.LibTest 8、输出结果 
    com.bruceeckel.util.Vector 
    com.bruceeckel.util.List 9、注意 
    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   errors b、出错的原因在于编译器的原理:根据 "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、根包客户类的源代码和服务类的源代码在不同的目录中; 
          或者使用完整import语句(不使用import   pacage.×;而使用import   pacage.classname;) 
    c、有包客户类的源代码和服务类的源代码可以在同一目录中; 
      

  10.   

    找到了最完美的解答---->>传送门
    学到了蛮多东西的嘛。
      

  11.   

    //为什么不能import com.jungleboy.*;
    为什么不能?只是IDE自动帮你修改的吧? 因为你的package里面只有一个类?你不用IDE 直接javac java试试
      

  12.   

    怎么会不可以?我试了都可以啊(包括自己导入自己)package com.jungleboy;
    import com.jungleboy.Employee;public class Employee{
        public void out(){
            System.out.println("I am in Employee!");
        }
    }
      

  13.   

    是啊 我的包里只有一个类 Employee我没用IDE 是用SHELL 
      

  14.   


    他说这么多 只有上面这句最有用,原来是我的classpath没有设置
    我在我的环境变量中加入这句就可以啦! 
    CLASSPATH=.; F:\java;F:\j2sdk1.4.0_02\lib;  

    谢谢你们的帮助。
      

  15.   

    没有设置classpath
    根本就运行不成功F:\java> javac Vector.java -d//成功 
    F:\java> javac List.java -d//成功
    F:\java> javac LibTest.java -d//失败EditPlus下运行结果:---------- JAVAC ----------
    Test.java:1: 软件包 com.jungleboy 不存在
    import com.jungleboy.*;
              ^
    Test.java:8: 找不到符号
    符号: 类 Employee
    位置: 类 Test
    Employee e = new Employee();
    ^
    输出完毕 (耗时 1 秒) - 正常终止
      

  16.   


    JDK1.4以上已经不需要设置这个环境变量了