关于自定义一个程序库(library),在Java里也就是定义一个package。例如,我有一个测试用的package, com.smilereader.test。编译后的CLASSPATH是:
D:\develop\eclipse\workspace\TestScoping\bin\com\smilereader\test
注意这个路径的最后部分,com\smilereader\test,如同package名。(关于com,我打算不久买下smilereader.com代替.biz......)而相对应的,在系统环境变量中需要设置的目录并不是上面这整个路径。而是,能找到这个包的相对路径的根路径。具体如下:
CLASSPATH=.;D:\develop\eclipse\workspace\TestScoping\bin;D:\j2sdk1.4.2_04\lib
当然,如果是使用如eclipse或者IntelliJ IDEA之类的集成开发环境,其中自有关于CLASSPATH,lib等等的设置。可以对于不同的project使用完全不同的配置及不同版本的JDK。再加一句,如果使用JAR文件,那么在CLASSPATH里就不单单要指明路径而且要指明对应的JAR文件名。Bruce Eckel在TIJ里的例子:
So for a JAR named grape.jar your classpath would include:
CLASSPATH=.;D:\JAVA\LIB;C:\flavors\grape.jar
关于访问修饰符,private里有几点要注意的:
第一,如果一个对象(object)有一个private的引用(reference),并不代表别的对象(object)不能拥有一个这个对象的public reference。其实就是要重复提醒自己,Java中除了基本类型外,所有对象及数组的变量名都是一个reference而已。对于reference的修饰只对这个reference有效,与真正的object本身无关。
第二,类不可以是private或者protected。这很容易理解,如果类是private的,那么无法在其之外访问,这个类毫无意义。如果类是protected,就其包访问性来说没什么问题,它是个包内部的辅助类。而对于继承关系来说,protected的父类无法被子类以外的对象访问。那么在抽象性及多态性上就失去了意义。所以,protected类也是没有必要的。(有个特例,inner class可以是private或者protected的)