java编译包_Java如何使用命令行编译包

最近写Java实验报告的时候遇到了编译包的问题,很烦。。。

问题:编写一个类A,它位于包a中,保存到A.java中,再编写一个类B,它位于包b中,保存到B.java中。在类B中实例化类A的一个对象。分别编译类A和类B。

使用IDE编译很方便,按要求建包再编译就可以,但要是使用cmd就有一些坑。。。

首先我们建立如下的包关系:

包a:包b、A.java;包b:B.java(B中需要用到类A的对象,所以编译时一定要先编译A.java,再编译B.java)

包a放在D盘中javacode文件夹中,位置是:"D:\javacode\a";

错误编译方法:首先到包a的位置:"D:\javacode\a",先编译A.java,成功编译,生成A.class;再编译B.java,提示找不到类A

46724f1ebee5d7c9a48e445463e55d46.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

至于为什么会出错?我想了很久才明白,我们理一下整个编译过程:(仔细体会)

编译A.java时,首先要找到A.java在哪里?此时我们的位置是"D:\javacode\a",A.java就在a的直接目录下,此时系统能找到A.java,所以直接使用"javac A.java"进行编译,会在这个位置生成A.class;然后编译B.java时,B.java位于包a中的包b里,这时系统在这个位置就找不到B.java了,我们需要进入包b才能找到B.java,所以我们这样写:"javac b\B.java";但是却提示不能找到类A,为什么呢?我们需要弄明白它是怎么找类A的?B.java使用import语句把类A添加到B.java中,我们看import语句怎么写的就知道系统是怎么找类A的了,import a.*意味着我们要先找到包a,我们现在的位置是:"D:\javacode\a",但是在这个位置是找不到包a的,可能有人会疑惑这不就是包a的位置吗,怎么会找不到包a?其实真的找不到,此时系统在这个位置能看到的只有包b、A.java和A.class,是无法找到包a的(如下图所示),所以就出错了。

455ff68b9867f6134be07bcdbe0a5cb8.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

那我们怎么解决这个问题呢?我目前只知道两种解决方法,如果有其他方法的欢迎补充

方法一:使用-d编译

格式:javac -d A.java

表示的意思是在位置a里生成一个同包名(你需要编译的包的包名)的包,包里面只包含编译后的class文件

一般使用:javac -d . A.java(‘.’表示当前位置,‘.’两边有空格不能省略)

使用这种方法进行编译:

c2fe037620b663a8dd731dd55fbe4658.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

编译后:在包a里又产生了一个和a同名的包,这样在编译B.java时就能找到包a了,而且包a里有A.class

ac5e5a4e0047bc8d569b4b11800e9da3.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

我们打开新产生的包a:新包与旧包有相同的结构,里面有编译A.java产生的A.class文件、包b;包b中有编译B.java产生的B.class

e0eb5b98608cfae0d33dfcd6e218bba4.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

打开包b:包b中有编译B.java产生的B.class

dc603b5900cf13a865d32a13b595b9f2.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

方法二:我们不进入要编译包的这一层,而是上一层

我们只进入到"D:javacode",而不是"D:javacode\a",这样做是为了编译B.java时能找到包a,我们在包a的上一层就能看到包a了,这么做不会产生新包,只是在java文件的位置产生class文件

编译过程:

a9bd57adf3d136c715f80ef93b5f9cc0.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

包a的变化:

ac882182f5b8511ee78cd4f0604ac875.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

包b的变化:

da4a02bd8e83e12579609e70a5b8c71b.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值