Java中——javac、java命令以及-classpath参数总结

2018年03月16日 11:58:17 一只笨鸟丶 阅读数:1608

 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/EvilSlyvanas/article/details/79578776

在最近学习Maven的过程中,对java是怎么编译和寻找对应的类加载做了一下实验。

1、实验环境:

用idea呈现结构,doc做为编译和运行

Java中——javac、java命令以及-classpath参数总结

User类的属性:

Java中——javac、java命令以及-classpath参数总结

WechatUtil类只有一个静态方法:

Java中——javac、java命令以及-classpath参数总结

Main类:

Java中——javac、java命令以及-classpath参数总结

直接运行Main的结果:

Java中——javac、java命令以及-classpath参数总结

classes文件夹是装载编译后的文件,src是装在java的源文件。

 

2、javac:

javac命令编译.java源文件的时候,它会去寻找相关的import的类,如Main中引用了两个类,一个是util包中的WechatUtil类和entity包中的User类。编译Main.java时,它根据我们的-classpath路径去寻找相关的类,而-classpath默认是先从当前路径开始寻找。现在先看一下命令演示的结果:

Java中——javac、java命令以及-classpath参数总结

我直接javac,输入Main.java的绝对路径去编译这个文件,它会报找不到其他的两个类,这是因为我javac的时候,路径填写的是src/edu/bnuz/,当前路径是在CP,而它需要的两个类的全限定名是cn.com.minstone下,在CP下,没有这个文件夹cn这个文件夹,所以找不到。

Java中——javac、java命令以及-classpath参数总结

先进入src文件夹,再次编译,编译成功,这是因为当前文件夹为src,它能直接访问到另外的两个类

Java中——javac、java命令以及-classpath参数总结

会发现,如果我们在命令行没有指定生成的.classes文件,它会默认在源文件的目录。

在这里,我想说明一个问题,当编译Main.java这个源文件的时候,它是会去寻找另外的两个类(.java或者.classes),如果没有.classes文件,则会寻找.java,例子中就是Main.java会去寻找WechatUtil.class这个文件,如果没有,则会寻找WechatUtil.java进行编译,而WechatUtil.java编译的时候又需要User.class文件,则会去找User.class文件,一直这样找下去。

下面做个实验,我先把刚编译好的.classes删除。

Java中——javac、java命令以及-classpath参数总结

编译Main.java的时候 ,我用已经编译好的.class

Java中——javac、java命令以及-classpath参数总结

Java中——javac、java命令以及-classpath参数总结

可以看到,util包下没有了WechatUtil.class和entity包下没有User.class文件,就是因为我们指定了-classpath路径,让我们在编译Main.java的时候去该路径下寻找相关的.class,所以就不会去编译WechatUtil.java和User.java了。

 

3、java:

这个命令的用法和javac命令的用法很像,只是这里java命令后面跟随的文件名必须是全限定名,这这个edu.bnuz并不是路径的意思,因为我们jdk配置的就是默认在当前路径下去寻找.class,而我们当前路径是在src,并不是,在classes文件中,我们这里并没classes文件,所以也可以说明这个并不是路径,我们这里代表,我们去../classes下找edu.bnuz.Main,和找它依赖的类。

Java中——javac、java命令以及-classpath参数总结

 

在做完实验后,想起我们在web打包部署放在webapp下的时候

Java中——javac、java命令以及-classpath参数总结

tomcat启动,它是怎么知道加载哪个文件夹是放.class文件和我们的lib的。

如果我们把classes文件夹重命名或者把lib重命名,会怎么?找了相关资料

Java中——javac、java命令以及-classpath参数总结

这只是换了一个问法而已,给出的答案是

Java中——javac、java命令以及-classpath参数总结

其他的答案:

Java中——javac、java命令以及-classpath参数总结

Java中——javac、java命令以及-classpath参数总结

相关文章:

  • 2021-09-07
  • 2021-11-28
  • 2022-02-01
  • 2022-01-07
  • 2022-12-23
  • 2021-09-04
  • 2021-08-22
猜你喜欢
  • 2021-07-15
  • 2022-12-23
  • 2021-11-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-13
相关资源
相似解决方案