我问一个简单的问题;
如下两个类
PackageTest.javaimport com.horstmann.corejava.*;
// the Employee class is defined in that packageimport static java.lang.System.*;/**
 * This program demonstrates the use of packages.
 * @author cay
 * @version 1.11 2004-02-19
 * @author Cay Horstmann
 */
public class PackageTest
{
   public static void main(String[] args)
   {
      // because of the import statement, we don't have to use com.horstmann.corejava.Employee here
      Employee harry = new Employee("Harry Hacker", 50000, 1989, 10, 1);      harry.raiseSalary(5);      // because of the static import statement, we don't have to use System.out here
      out.println("name=" + harry.getName() + ",salary=" + harry.getSalary());
   }
}Employee.java
///////////
package com.horstmann.corejava;// the classes in this file are part of this packageimport java.util.*;// import statements come after the package statement/**
 * @version 1.10 1999-12-18
 * @author Cay Horstmann
 */
public class Employee
{
   public Employee(String n, double s, int year, int month, int day)
   {
      name = n;
      salary = s;
      GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
      // GregorianCalendar uses 0 for January
      hireDay = calendar.getTime();
   }   public String getName()
   {
      return name;
   }   public double getSalary()
   {
      return salary;
   }   public Date getHireDay()
   {
      return hireDay;
   }   public void raiseSalary(double byPercent)
   {
      double raise = salary * byPercent / 100;
      salary += raise;
   }   private String name;
   private double salary;
   private Date hireDay;
}也就是 第一个类调用了Employee这个类,这个类定义在
package com.horstmann.corejava在window环境中,我用命令行编译 
javac  PackageTest.java报一下错误,是什么原因PackageTest.java:1: package com.horstmann.corejava does not exist
import com.horstmann.corejava.*;
^
PackageTest.java:17: cannot find symbol
symbol  : class Employee
location: class PackageTest
      Employee harry = new Employee("Harry Hacker", 50000, 1989, 10, 1);
      ^
PackageTest.java:17: cannot find symbol
symbol  : class Employee
location: class PackageTest
      Employee harry = new Employee("Harry Hacker", 50000, 1989, 10, 1);
                           ^
3 errors

解决方案 »

  1.   

    在你的PackageTest.java同一级目录下建个目录com\horstmann\corejava 将Employee.java放在该目录下,先编译Employee.java,在编译PackageTest.java。这样操作一下吧!
      

  2.   

    编译还有包声明语句的java源程序文件的格式是:
    javac -d 路径名 java源程序文件名
      

  3.   

    楼主正在看《Java核心技术》?楼上的太麻烦了,楼主可以试一下javac -d . PackageTest.java,编译器可以自动按照包声明给你建立目录结构。
      

  4.   

    确认一下com.horstmann.corejava,这个com这个文件和PackageTest.java在同一个文件下吗?
    我使用正常啊
    E:\Editplus>javac PackageTest.javaE:\Editplus>java PackageTest
    name=Harry Hacker,salary=52500.0
      

  5.   

    两个类是定义同一个package里吗?那为什么还要import com.horstmann.corejava.*;
    直接package com.horstmann.corejava;不就可以啦。不在同一个包里,这个程序是正确的啊
      

  6.   

    不在同一个文件夹下
    目录机构
    c:\Package\PackageTest.java
    c:\Package\com\horstmann\corejava\Employee.java
      

  7.   

    按照我的理解,我一开始也是以为就应该
    javac  PackageTest.java就可以了,我认为PackageTest.java会自己去找需要的类,但是不行
    我开始以为是程序的问题,但是同样的程序,在eclipse是可以的。
      

  8.   


    eclipse是可以自动编译*.java程序的。
      

  9.   

    javac -d . PackageTest.java就可以了,顺便会编译 Employee 这个类。