java类定义在一个package里面,为什么编译不通过那?

时间:2021-03-12 18:11:04
我问一个简单的问题;
如下两个类
PackageTest.java

import com.horstmann.corejava.*;
// the Employee class is defined in that package

import 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 package

import 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

13 个解决方案

#1


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

#2


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

#3


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

#4


该回复于2010-09-13 16:03:35被版主删除

#5


楼上的不可以啊,你确定你的做法是试验过的吗?

#6


前面回复的没有可以试验通过的。

#7


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

E:\Editplus>java PackageTest
name=Harry Hacker,salary=52500.0

#8


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

#9


类包的问题,自己找出来,得更多。

#10


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

#11


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

#12


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


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

#13


javac -d . PackageTest.java

就可以了,顺便会编译 Employee 这个类。

#1


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

#2


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

#3


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

#4


该回复于2010-09-13 16:03:35被版主删除

#5


楼上的不可以啊,你确定你的做法是试验过的吗?

#6


前面回复的没有可以试验通过的。

#7


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

E:\Editplus>java PackageTest
name=Harry Hacker,salary=52500.0

#8


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

#9


类包的问题,自己找出来,得更多。

#10


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

#11


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

#12


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


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

#13


javac -d . PackageTest.java

就可以了,顺便会编译 Employee 这个类。