理解Java中的包

我们来做个实验:假如我们要做个系统,并将整个系统放到一个project的文件夹中。

例如我们在d:目录下建个project的目录,此时相对于我们这个系统而言,我们这个系统就可以看做是一个大的包,我们知道包的意思就是类库的意思,也就是说是顶包的意思,而这个顶包就在project的目录下,d:/project是该系统的根目录,这个很重要,必须明确,因为在我们用javac编译时,使用-classpath时相对的就是这个目录,-classpath后面跟的文件或者目录都是处于顶包之下的。

实验开始:

在project目录下,用以下内容建一个java文件:

  1. package com.abc.zyj;
  2. public class M
  3. {}
  4. class G
  5. {}

注意该java文件名为M.java

分析:在java中要找到一个class的话,需要给出该calss的全部限定名。限定名就是包名+类名。在上面package的作用可以看做是给类分块,即把类M和类G划归为com.abc.zyj块,当然实际当中,可以按照项目系统的需要划分。所以类M的完全限定名是com.abc.zyj.M。

现在开始编译:

命令行中:

javac -d . M.java

上面的语句是在当前的目录下编译该java文件。

查看该目录,可以发现编译器在该目录下产生了一个com目录,com目录下又有一个abc目录,abc目录又有一个zyj目录,而zyj目录下又含有2个class文件,即M.class和G.class。

注意上面的语句,-d .这个不能少,如果少了的话,编译产生的class文件将只出现在当前目录,而不会产生目录结构。

由于java中的打包是按照目录结构进行操作的,所以上面应该很容易理解。

现在开始对这2个class文件进行压缩打包。

在命令行窗口中进入project目录下

使用

jar cvf zyj.jar com

即在project目录下生成一个zyj.jar的包

上面命令行的命令的意思可以理解为对com文件夹进行压缩,你可以用winrar对该文件进行查看,就可以看到里面有个类似com/abc/zyj的结构

现在包完成了,如何引用了包呢?这个就要理解classpath的意义了,一定要记住classpath指的在顶包下进行寻找。

继续实验:

在project目录下建一个java文件,内容如下:

  1. import com.abc.zyj.M;
  2. public class Hello
  3. {
  4.          public static void main(String args)
  5.          {
  6.               M a=new M();
  7.               System.out.println(a.toString());
  8.          }
  9. }

上面这些语句中的import作用是告诉java编译器如何查找某个类,因为jar本身是个压缩文件,文件内部包含了com/abc/zyj结构,就相当于在根目录下有com/abc/zyj等目录结构,所以这里相当于首先从根目录开始,查找com目录,然后在com目录下查找abc目录,然后在abc目录查找zyj目录,最后在zyj目录下查找M这个类,即按照com.abc.zyj.M这个顺序去查找的

所以在这里一定明确classpath指的意思,以及包中的结构划分是按照目录结构来划分的

编译上面的类的命令行命令如下:

javac -cp zyj.jar Hello.java

注意在导包的时候一定要注意字母的大小写,即可以查看下jar文件内的目录结构的字母大小,这样在导包的时候才会不会出错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值