Java的编译、运行

一、在某个路径下运行当前路径的class文件

在路径处编写一个源文件并编译

public class HelloC {
	public static void main(String[] args) {
		System.out.println("Hello C");
	}
}

如果不小心写错类名则会报错,这个是找不到类名的常见原因之一。

二、在某个路径下去运行其他路径的class文件

我们再到其他路径,看能不能访问刚才的class文件?显然不行。

这是因为JVM只会在rt.jar、tools.jar以及当前运行目录中查找class文件。这是找不到类名的另一个常见原因。

我们只需采用把子目录helloc设置为classpath,即可运行了。

回顾我们安装jdk时,当时如果我们没有把jdk安装目录\bin加到Path系统变量,那么我们使用javac、java等命令时就只能进入该路径,而不能在任意路径下使用它们。上面其实也是这个道理,只不过一个是Path变量(告诉系统去哪找可执行二进制文件),一个是CLASSPATH变量(告诉JVM去哪找class文件);一个是exe、com等可执行文件,一个是class可执行程序。两者都可以在属性的环境变量那里进行永久性的设定,或者通过set临时设置:一个是通过set Path设置,一个是通过set CLASSPATH。

两者在一些细微处略有区别: Path环境变量是先在当前目录找执行程序,如果没有,再到path指定目录中去寻找。而对于classpath,不管你是通过set CLASSPATH进行设置的,还是采用java -classpath(或-cp),则只在你指定的路径下查找,除非你在-classpath后面添加当前目录。否则即使当前目录中有目标执行程序也执行不到(要在classpath的值后面加了英文分号才会当前目录中来寻找执行程序)。

使用CLASSPATH最好不要在属性那里设置某个特定的路径,因为这种设置可能导致奇怪的错误。如下面所示,我们把它设置为一个固定的路径。发现有些类即使存在也找不到。

以后在使用CLASSPATH时,不要在属性里面修改,当项目需要用到时,就用set CLASSPATH临时创建就行了。

三、Java中运行同名类的冲突现象

如上图所示,前一个目录和它的子目录有个同名的源文件,前者是打印"I love Java!",后者打印"Hello C"。分别对它们进行编译,并在cmd中做以下操作:

当两个同名的class文件都添加到CLASSPATH时,运行它们就会 出错,Java针对这种问题给出package机制。

四、Java的编译方式

Java最简单的编译方式就是直接javac 源文件,但是采用javac -d dir 源文件可以得到比较灵活的编译方式。

比如:

javac -d dir HelloWorld.java

结果:将产生的class文件放到指定的dir路径(前提这个dir路径必须存在)下面。这个dir路径可以是相对路径也可以是绝对路径。如下面所示,在目录F:\JavaFiles\SourceCode\com\jeremy\javactest有个HelloWorld.java,在cmd中编译它。

我们把class文件编译到F:\JavaFiles\SourceCode\com\jeremy\javactest\dir\dir1处,三种写法都可以产生class文件。

猜你喜欢

转载自blog.csdn.net/sinat_30973431/article/details/82560046