理解Java中的包

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

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

实验开始:

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

package com.abc.zyj;
public class M
{}
class G
{}

注意该java文件名为M.java

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

现在开始编译:

命令行中: [color=green]javac -d . M.java[/color]

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

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

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

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

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

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

命令行中:[color=green]jar cvf zyj.jar com[/color]
即在project目录下生成一个zyj.jar的包

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

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

继续实验:

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


import com.abc.zyj.M;
public class Hello
{
public static void main(String args)
{
M a=new M();
System.out.println(a.toString());
}
}

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

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

编译上面的类的命令行命令如下:
[color=green]javac -cp zyj.jar Hello.java[/color]

注意在导包的时候一定要注意字母的大小写,即可以查看下jar文件内的目录结构的字母大小,这样在导包的时候才会不会出错
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值