省的是不能运行正确的, 然后把 tool.jar 放入 CLASSPATH 后工作正常. 现在作测试,
去掉仍然是正确的. 经过多次测试, 发现如果原来曾装过 jdk 的都很好, 没有装过的
装的时候会死机, 多装几次就可以了. 如果你发现正确安装后, 不能正常工作, 就把
tools.jar 加入 CLASSPATH, 试一下.
二, 包 (package)
Java 中的 "包" 是一个比较重要的概念, package 是这样定义的:
Definition: A package is a collection of related classes and interfaces
that provides access protection and namespace management.
也就是: 一个包就是一些提供访问保护和命名空间管理的相关类与接口的集合.
使用包的目的就是使类容易查找使用, 防止命名冲突, 以及控制访问.
这里我们不讨论关于包的过多的东西, 只讨论和编译, 运行, 类路径相关的东西.
至于包的其他内容, 请自己查阅相关文档.
简单一点来说, 包就是一个目录, 下面的子包就是子目录, 这个包里的类就是
这个目录下的文件. 我们用一个例子来说明.
首先建目录结构如下: PackageTest/source/, 以后根目录指的是 PackageTest
目录, 我们的源程序放在 source 目录下. 源程序如下:
PackageTest.java
package pktest;
import pktest.subpk.*;
public class PackageTest
{
private String value;
public PackageTest(String s)
{
value = s;
}
public void printValue()
{
System.out.println("Value of PackageTest is " + value);
}
public static void main(String[] args)
{
PackageTest test = new PackageTest("This is a Test Package");
test.printValue();
PackageSecond second = new PackageSecond("I am in PackageTest");
second.printValue();
PackageSub sub = new PackageSub("I am in PackageTest");
sub.printValue();
System.exit(0);
}
}
PackageSecond.java
package pktest;
public class PackageSecond
{
private String value;
public PackageSecond(String s)
{
value = s;
}
public void printValue()
{
System.out.println("Value of PackageSecond is " + value);
}
}
PackageSub.java
package pktest.subpk;
import pktest.*;
public class PackageSub
{
private String value;
public PackageSub(String s)
{
value = s;
}
public void printValue()
{
PackageSecond second = new PackageSecond("I am in subpackage.");
second.printValue();
System.out.println("Value of PackageSub is " + value);
}
}
Main.java
import pktest.*;
import pktest.subpk.*;
public class Main()
{
public static void main()
{
PackageSecond second = new PackageSecond("I am in Main");
second.printValue();
PackageSub sub = new PackageSub("I am in Main");
sub.printValue();
System.exit(0);
}
}
其中, Main.java 是包之外的一个程序, 用来测试包外的程序访问包内的类,
PackageTest.java 属于 pktest 这个包, 也是主程序. PackageSecond.java 也
属于 pktest, PackageSub 属于 pktest 下的 subpk 包, 也就是 pktest.subpk.
详细使用情况, 请参看源程序.
好了, 先把源程序都放在 source 目录下, 使 source 成为当前目录, 然后编
译一下, 呵呵, 出错了,
Main.java:1: Package pktest not found in import.
import pktest.*;

