2012年2月18日星期六

关于import & package的应用与疑问

在《thinking in JAVA》第六章 访问控制权限 中,说到了package的用法。对于解决像System.out.print这种冗长的输出格式,也不失为一种好的解决办法。但是建立自己的类库,代码的可移植性也就要差点了。当然这个package也是鼓捣了好一阵才弄明白怎么用,囧

首先涉及到classpath的设置。安装JDK的时候会有设置classpath这一步。比如,classpath中存在“%java_home%\lib;"

import access.test.*
就会在classpath下寻找access]test 这个目录中的java源文件和class文件(也就是%java_home%\lib\access\test\ 这个目录)

个人感觉,import 和C++中的 using namespace 比较类似,反而不是属于include那一类。简单的说就是命名空间的划分引用。

也就是说,一般在类库中的文件,源代码开头(除注释)都是package 语句,用以将该java文件和class文件划分在指定的命名空间中。调用的时候就通过import语句导出。也就是说类库中java源文件中的package路径就是文件本身的路径?

其实一开始让我疑惑的是,一般我们会
import java.util.*
但是在我的classpath
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
搜寻路径中,没有java这个目录,而java\util\ 这个目录实际上存在于%JAVA_HOME%\src.zip 这个文件中打包保存。这个怎么解释呢?应该是JAVA路径支持压缩包

比如:
CLASSPATH:也指定一个路径列表,是用于搜索 Java 编译或者运行时需要用到的类。在 CLASSPATH 列表中除了可以包含路径外,还可以包含 .jar 文件。Java 查找类时会把这个 .jar 文件当作一个目录来进行查找。通常,我们需要把 JDK 安装路径下的 jre/lib/rt.jar (Linux: jre/lib/rt.jar) 包含在 CLASSPATH 中。

1 条评论:

  1. 本来就是打包保存的...不过只有zip包而已,或者应该说是jar包
    或者这样类比一下,比如你新建了一个工程...
    包名是g.test.try..
    在workplace里面查找,可以找到text的文件夹下面还有一个try,但是没有g文件夹....

    回复删除