javac 编译的总结

先连接三个博文,看看吧。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/EvilSlyvanas/article/details/79578776
————————————————
分类专栏: java
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43278826/article/details/84870319
————————————————
版权声明:本文为CSDN博主「潇曜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
分类专栏: JAVA
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lwj_199011/article/details/51838677
————————————————
版权声明:本文为CSDN博主「Jack_Lee_90」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lwj_199011/article/details/51838677
原文链接:https://blog.csdn.net/qq_43278826/article/details/84870319
版权声明:本文为CSDN博主「一只笨鸟丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/EvilSlyvanas/article/details/79578776
不看也行,我总结:javac是一个可行性编译程序文件,可以编译java文件。
cd 命令进入指定的目录
无论你进入哪个目录,你都可以执行javac这个程序来编译任意位置的java文件 。
只要你的path变量设置好了!
然后,你在cd进入不同的目录下执行javac有什么影响呢?

来看个项目结构
在这里插入图片描述
这里我们先进入src目录
在这里插入图片描述

再说一次:无论你进入哪个目录,你都可以执行javac这个程序来编译任意位置的java文件 。

只要你剩下的目录补齐了,或者用绝对的路径,绝对就可以帮助javac找到你想要的编译的java类!
在这里插入图片描述

但是:重点来了:你在cd进入不同的目录下执行javac有什么影响呢????
就是你cd进一个c盘随便一个目录,,也可以编译这个文件,进入d盘也可以编译文件,只要我给对路径就可以了。

但是是有区别的!!
https://blog.csdn.net/EvilSlyvanas/article/details/79578776
这个博文中提到一个很重要的点:
编译.java文件时,它根据我们的-classpath路径去寻找相关的类,而-classpath默认是先从当前路径开始寻找。

再说一次:
编译.java文件时,它根据我们的-classpath路径去寻找相关的类,而-classpath默认是先从当前路径开始寻找。

javac 后面只要相对于当前你调用javac的位置而言,的相对路径就可以找到你想要的类!
在这里插入图片描述
javac 后面补充相对路径即可!编译出来的class文件在你不设置位置的情况下,就放在和java文件相同的位置。

如何设置class文件放哪呢?使用-d参数!
在这里插入图片描述

在c:盘下生成了一个文件夹和class类
文件夹的名字叫bao1
在这里插入图片描述

为什么javac要帮你生成bao1这个文件夹呢?明明我设置的位置是c盘!
这取决于在这里插入图片描述
这语句package bao1;说明了这个生成的类一定要放在这个文件夹下,当javac按照你给-d指令来到c盘,发现没有bao1的文件夹,package bao1;语句又说要把这个类放在这个文件夹下面,所以它就创建一个放进去!

好了,再一次回顾一下,当我们进入src文件时候,
在输入这个指令的时候。在这里插入图片描述
为什么class类会将class类生产在java文件的相同的文件下呢?

当我们没有指定-d参数的时候,-d参数默认是当前cd进入的文件夹!再说一次:
当我们没有指定-d参数的时候,-d参数默认是当前cd进入的文件夹!
当javac在src文件夹下运行,发现已经存在bao1的文件夹了,所以它直接打开放进去就可以了!

在很多的博客中有这样的一句话:-d . 后面加个点是代表当前目录!我也补充一下哈哈

总结一下:类的package 语句要考虑这句话有什么用呢?
就是用于编译的时候保证这个类放在这个包下面!这个生成的class类一定是在你package声明的文件夹下,没有都要给你创建出来!打死也要放里边!

至于为什么打死都要放指定的文件夹下,因为保证import的语句的正确执行导包了.

好了再次回到-classpath参数

编译.java文件时,它根据我们的-classpath路径去寻找相关的类,而-classpath默认是先从当前路径开始寻找。

这个参数是用来设置指定编译java源文件需要依赖的.class文件的路径。会按照你当前进入的目录cd进入的目录,加上这个java文件import语句,相对于现在调用javac程序的目录的相对定位去找class文件!
-cp 是给你继续去添加这类所依赖的jar包所在位置!你可以使用相对位置,也可绝对位置。
再说一次:编译这个类的时候会按照import语句去相对于当前位置找对应的class文件!如果在这路径找不到依赖的class文件,会在这个路径下去找同名的java文件,并将其一并编译成class文件保存到-d的参数指定的位置。
如果还找不到就去-cp你设置的目录找,还没找到,就准备收bugger通知书了!

总而言之,这个javac就是将你所给的某一个java类按照import语句将这个类和这个类所依赖的类全部编译到你设置的-d目录下!
编译的时候还会自动帮你构建好包的结构!形成项目包结构!保证了当你执行java命令的时候,这个类可以按照包名找到对应的class文件!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值