说到Java命令行运行,我们就不得不谈到String[] args, 我在这篇文章中的例程,已经演示了如何利用String[] args的值传到程序里面。那么关于Java命令行运行的指令到底是什么样的呢?
基础编译与运行命令
假设我们有一个文件叫做name.java, 且我们已经cd到这个文件的根目录中,那么编译这个文件用到的命令是:
javac name.java
执行完这条语句之后,就会生成name.class文件,也就是java字节码文件, 然后我们用:
java name
即可完成对字节码文件的运行。
没有package的情况
当一个java文件没有包的时候,直接用我们上面提到的方法就可以顺利运行。
有package的情况
在这种情况下,可以先按上面提到的方法先编译,然后cd到包路径的级别,然后进行下面的操作:
java packagename.name
为什么用这种方法去加载运行一个类?很明显,在有包的情况下,在你尝试切入到文件所在目录去运行这个java文件的时候,会报出ClassLoader类的错误,这就意味着是类加载出了问题。熟悉类加载的同学应该都知道,类加载器在加载类的时候会根据你的 类全名+路径 进行加载,而当一个类拥有了包的时候,在它的类全名里面就会加上它的包名,所以你在根目录使用类全名加载肯定是不对的。所以我们要往上一层路径移动一下。
用命令行调用jar文件(无package的情况)
在目标文件的文件夹里面,将你想要打包的.class文件打成jar包。
jar -cvf test.jar name
修改jar文件中的META-INF/MANIFEST.MF文件
在最后加一行 Main-Class: name(注意:冒号和name间有一空格,否则报错-Invalid or corrupt jarfile C:/temp/bin/test.jar),然后回车,否则也报错-Failed to load Main-Class manifest attribute from
C:/temp/bin/test.jar关于jar命令我们又有很多可以赘述的知识点,这里先略去,有时间有兴趣可再扩充。
用命令行调用jar文件(有package的情况)
基本步骤一样,就是在最后修改.MF文件的时候,需要写上类全名。
关于命令行赋值的问题
再啰嗦一句,我们传入的参数是String[ ]类型的,所以你只管在文件名后面继续输入你的变量就是了,java会自动将文件名后面的输入解析为输入的参数。
例如:java name my age is 18
name是我们的文件名,后面的四个字符串就组成了我们的String[] args。