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

 

在现在公司使用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.jartool.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

 

大家看花红线的部分,这是我们这节的重点。你在控制台输入set classpath,如果有D:/test那么我们就达到目的了。我们可以继续往下体验这个实验了。

二、建立独一无二的包和用户类

D:/test下我们建立文件结果如图:

 

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代码也写好,进入这个实验的最后阶段。

三、完成实验

打开控制台,如下输入:

 

其他一切和平时我们使用默认包同样的原理,不同的地方时,最后一行:使用默认包时,我们不需要写具体的路径(如该例中的:com/si/net/)直接写java MultiDimArray就可以了。因为我们再CLASSPATH中指定了用户类的路径D:/test,所以要找到MultiDimArray.class就必须写出完成的路径。

 

结题:完成实验了,欢迎各位朋友一起学习、交流。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值