欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java的编译、运行

程序员文章站 2024-03-25 11:46:16
...

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

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

Java的编译、运行

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

Java的编译、运行

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

Java的编译、运行

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

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

Java的编译、运行

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

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

Java的编译、运行

 

回顾我们安装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的值后面加了英文分号才会当前目录中来寻找执行程序)。

Java的编译、运行

Java的编译、运行

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

Java的编译、运行

Java的编译、运行

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

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

Java的编译、运行

Java的编译、运行

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

Java的编译、运行

当两个同名的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中编译它。

Java的编译、运行

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

Java的编译、运行

Java的编译、运行