在用cmd编译运行java程序时遇到的问题

问题由来

在做java网络编程时,想要多开客户端,因此想要通过cmd来运行java程序,这样更能直观地体现实现的效果.但是在具体运行时却发现一些问题,导致源文件无法过编译.

问题

放在同一文件夹下(和同一包是有区别的)的两个.java文件a.java和b,java,其中b.java中引用了a.java中的类,两者同属一个包A.在b.java进行编译时发现找不到a的class文件.发生编译错误,编译失败.

分析

在java中有约定:编译后的class文件会隶属于它的声明的包:
但是在具体编译的过程中我们会发现编译产生的class文件会放在和.java文件同级的文件目录下,于是这就有一个疑问,为什么会这样呢,不是应该放在声明的包下面吗?其实是因为编译后的文件的隶属信息已经写在了class文件中了,这并不与.class文件所放的地方相关联(意思是这种划分并不是以具体位置来划分的,而是以自身所带标记来划分的).因此,在对b.java文件进行编译时,当编译到a的位置时会对a进行编译.可是在往包A中去寻找时却发现没有,因此会发生错误.

解决

1,可以按照寻找要求往A中添加a.java编译后的a.class
2,可以使用javac -d . a.java来直接生成所需的包,然后在包下面放a.class文件(注意: "."的两边都有空格)
3,直接把每个文件的包声明都去掉,省事(很多地方的java文件提交都不让用包声明)

结束

总的来说,这应该是书本上的知识点,可是上个学期由于疫情只能上网课,就一直留在家里,由于种种原因导致心态爆炸而错过了最佳的学习时间.从而没能掌握.有时想想,能一直有一个好的环境学习,真的是一件快乐的事情.

你可能感兴趣的:(在用cmd编译运行java程序时遇到的问题)