命令行编译运行java

时间:2022-02-11 17:42:42

最近学习面向对象编程,课程的编程语言用的是java。之前几乎没接触过,因此这几天略微了解了java的使用。

课程推荐的IDE是eclipse,因此以前装的Intelligent J也就放在那里作罢。首先要先安装jre或者jdk,其中jdk是包含jre的,当时觉得自己用不着开发就随手装的是jre。然后就可以使用eclipse了。(话说我现在总觉得osx下的eclipse没有windows下的友好于是我就主要跑到windows下来调试java)

我们课程的作业是采用奇葩的互评测试(尽管被上届的同学批判吐槽成狗然后学院说要改革,不过到我们这届只是增加了你得先用公共测试集测一下互评者),大抵就是你kill掉别人的点越多,你的分数就水涨船高。然后看到这31个公共测试集,我想这如果一个个通过IDE的运行跑好麻烦呀,感觉必须有必要通过命令行来批处理这些测试。因此我就去看了一下怎么用java、javac来编译运行。指令如下

编译java程序:

javac -d destdir srcFile ( -d destdir java字节码存放路径 srcFile java源文件所在位置)

运行java程序:

java java类名

简单的说就是先用javac(java compiler)来编译java文件生成.class文件(java虚拟机jvm可识别的执行文件),再用java命令来执行这个文件即可。

因此我先把环境变量配置了一下。这时才意识到jre中是不包含javac的,它只是一个运行环境。因此又跑去安装jdk,重新配置好环境变量后,就可以用javac了。

不过我又遇到问题,在cmd执行自己的java程序都是报错。上网了解到:“错误:找不到或无法加载主类​”的原因往往有:1.环境变量处理不当;2,程序名称和入口函数不一样;3,程序中有package。 而我遇到的问题就是第三种。因为我们的java程序是打包的,即在一个package下。这时,解决方法如下。例如,有两个文件Main.java Polynomial.java, 其中Main.java是主入口文件,它们都在package包下。
在编译的时候,我们应该是javac -d . ​Main.java

(-d:表示生成目录,设置编译生成的class文件保存路径,路径与定义的包名和层次相关。

.:表示在当前目录中生成。)

我们据可依看到生成了一个Poly文件夹,这其中包括了我们的两个.class文件。
命令行编译运行java
生成的Poly夹里内容
命令行编译运行java

运行的时候,​带上包名,即java Poly.Main。(注意:不要进到package里面去就在package外面执行java 命令
效果图如下:
命令行编译运行java

另外如果已经在eclipse下编译运行了,那么我们就可以直接进到bin文件夹里运行java指令了,因为eclipse已经完成了编译出.class操作。

然后我们就可以用命令行来选择批处理测点或者对拍了。Easy but fun~