不使用编译器建立独一无二的包名

      在现在公司使用JAVA有几个月了,不过今天又重新开始看Thinking in Java 3th Edition这本经典了。因为有目标,所以看书也比较快,很快我也发现一个自己一直没有注意到的问题。就是如何在本机上不使用IDE建立自己的包并使用。今天把这个问题解决了。下面给大家介绍下怎么样实现。
一、CLASSPATH的设置
      这个实验里CLASSPATH的设置至关重要,设置好CLASSPATH等于实验完成一大半。不过,你知道什么是CLASSPATH吗?我看了好多网上很多资料,但是都没有很好的答案。我就在这给大家复习下吧。CLASSPATH是类路径。如果只是一般运用JAVA,只是用到JAVA的基本库文件,练练手而已,则不需要设置CLASSPATH。但是在一般开发中,这是不可能的,所以我们要自己设置CLASSPATH。这里就又牵扯到JAVA程序运行过程中JVM虚拟机的小知识了。
      我们已经知道JAVA是通过 java虚拟机来解释运行的,也就是通过JAVA命令,JAVAC编译生成的.class文件就是虚拟机要执行的代码,称之为字节码(bytecode),虚拟机通过 classloader来装载这些字节码,也就是通常意义上的类。这里就有一个问题,classloader 从哪里知道JAVA本身的类库及用户自己的类在什么地方呢?或者有着缺省值(当前路径),或者要有一个用户指定的变量来表明,这个变量就是类路径(classpath),或者在运行的时候传参数给虚拟机。这也就是指明 classpath 的三个方法。编译的过程和运行的过程大同小异,只是一个是找出来编译,另一个是找出来装载。实际上 java 虚拟机是由 java luncher 初始化的,也就是 java (或 java.exe)这个程序来做的。虚拟机按以下顺序搜索并装载所有需要的类:
1、引导类:组成JAVA平台的类, 包含 rt.jar和tool.jar 中的类。
2、扩展类:使用JAVA扩展机制的类, 都是位于扩展目录($JAVA_HOME/jre/lib/ext)
中的 .jar 档案包。
3、用户类:开发者定义的类或者没有使用 java 扩展机制的第三方产品. 你必须在
命令行中使用 -CLASSPATH选项或者使用 CLASSPATH 环境变量来确定这些类的位置。
      一般来说,用户只需指定用户类的位置,引导类和扩展类是"自动"寻找的。一般来说,用户只需指定用户类的位置,引导类和扩展类是"自动"寻找的。我们关心的就是到底该怎么去指定用户类的位置?用户类路径就是一些包含类文件的目录,比如.jar、.zip 文件的列表, 至于类具体怎么找,因为牵扯到 package 的问题。我们一般的CLASSPATH设置是“.”,他是指当前目录,这个是缺省值。
      我们这里不管那些.jar什么的,我们计划自己的类放在D:\test这个文件夹下。所以,我们的CLASSPATH就设置为D:\test,就是让他去加载D:\test下的所有类,这个就是我们的用户类了。给大家看看我的CLASSPATH:
clip_p_w_picpath002[1]
       大家看红线的部分,这是我们这节的重点。你在控制台输入set classpath,如果有D:\test那么我们就达到目的了。我们可以继续往下体验这个实验了。
二、建立独一无二的包和用户类
       在D:\test下我们建立文件结果如图:
clip_p_w_picpath003[1]
在net文件夹里我们建立一个MultiDimArray.java文件,源码如下:
package com.si.net;
import java.util.*;
public class MultiDimArray{
static Random random = new Random();
public static void main(String args[]){
int[][] a1 = {
{1,2,3},
{4,5,6}
};
for(int i = 0; i < a1.length; i++)
for(int j = 0; j < a1[i].length; j++)
System.out.println(
"a1[" + i + "][" + j + "] = " + a1[i][j]);
int[][][] a2 = new int[2][3][4];
for(int i = 0; i < a2.length; i++)
for(int j = 0; j< a2[i].length; j++)
for(int k = 0; k < a2[i][j].length; k++)
System.out.println(
"a2[" + i + "][" + j + "][" + k + "] = " + a2[i][j][k]);
}
}
       源码中“package com.si.net;”是需要注意的部分,这不正好和我们的文件层次结构相同吗?对了,这就是和我们用IDE在指定包下建立类同样的原理,文件结构也相同。好了,CLASSPATH设置好了,JAVA代码也写好,进入这个实验的最后阶段。
三、完成实验
       打开控制台,如下输入:
clip_p_w_picpath004[1]
       其他一切和平时我们使用默认包同样的原理,不同的地方时,最后一行:使用默认包时,我们不需要写具体的路径(如该例中的:com/si/net/)直接写java MultiDimArray就可以了。因为我们再CLASSPATH中指定了用户类的路径D:\test,所以要找到MultiDimArray.class就必须写出完成的路径。
结题:完成实验了,欢迎各位朋友一起学习、交流。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章