系统:Windows XP, Java版本:1.6
在编译Java时以前只是使用最简单的方式javac Demo.java,从来没有使用过其它选项,如果使用IDE(如Eclipse, Netbeans等)根本就不需要直接使用javac。为了对javac更加了解,今天专门试了一下其它的选项。
我的学习目录如下:
-d <目录>:指定存放生成的类文件的目录
默认情况下,编译生成的类文件与源文件在同一目录下。使用-d选项可以将类文件输出到指定目录。例如使用命令javac src/*.java -d bin将所有类文件输出到bin目录下。
-cp 或-classpath:指定查找用户类文件和注释处理程序的目录
在IO目录下有一个Demo.java文件。在Demo中要调用GetStringDemo类中的getLine()方法,而GetStringDemo类编译后的文件,即.class文件在bin目录下。如果直接编译Demo.java将会出现以下错误:
因为编译器找不到类GetStringDemo,为了告诉编译器GetStringDemo在bin目录下,就可以使用-cp/-classpath选项,即javac -cp bin Demo.java -d bin。这里将Demo的类文件也输出到了bin,当然也可以不输出到bin目录下,如果这样的话,在运行的时候也要指定-cp选项,java -cp bin Demo否则会出现异常。
不将类文件输出到bin目录的情况:
-verbose选项:输出关于编译器正在执行的操作的消息,如遇到的所有类的信息。
执行命令javac -verbose -cp bin Demo.java的结果
-source选项:提供与指定版本的源兼容性
现在JDK最新版本是1.6,但在编译时可以使用-source选项来指定与哪个版本兼容。
在JDK1.4及更老的版本中不支持静态导入,如果有以下代码试图在JDK1.4的版本上编译将无法通过:
import java.util.*; import static java.lang.System.*; public class SourceDemo { public static void main(String[] args) { Scanner in = new Scanner(System.in); out.print("Enter Name: "); String name = in.nextLine(); out.print("Hello, " + name); } }
如下图所示:
源文件:
/* GetStringDemo.java */ import java.io.*; public class GetStringDemo { public static String getLine() { int in = -1; String output = ""; try { while ((char) (in = System.in.read()) != '\n') { output = output + (char) in; } } catch (IOException ex) { ex.printStackTrace(); } return output; } public static void main(String[] args) { System.out.print("Line: "); String line = GetStringDemo.getLine(); System.out.println("-> " + line); } }
/* SourceDemo.java */ import java.util.*; import static java.lang.System.*; public class SourceDemo { public static void main(String[] args) { Scanner in = new Scanner(System.in); out.print("Enter Name: "); String name = in.nextLine(); out.print("Hello, " + name); } }
2、-------对-sourcepath选项的补充---------------
用法:javac <选项> <源文件>
其实选项不必放在源文件前面放在后面也是可以的
首先解释源文件,源文件指的是文件名和其他操作文件命令的语法一致可以是相对路径也可以是绝对路径,相对路径的初始位置是键入命令的位置。文件名的语法相当有限,只允许输在文件名上使用通配符,不允许在目录上使用 src\**\*.java这样的写法是没有用的。
其次解释选项,选项的格式为 -选项名 选项值
sourcepath用来查找源文件的,具体来说就是,在我们编译A时,如果A依赖B,而B在classpath中又找不到,这时就要在sourcepath中查找B的源文件。
参考地址:
1、 http://fwso.blog.163.com/blog/static/35550527200711112544298/
2、http://blog.csdn.net/easyroom/article/details/6759045
3、http://www.cnblogs.com/JeffChen/archive/2008/01/16/1041783.html