回顾:JAVAC和JAVA怎么用
尤其是在有package、import和import *的情况下,各种混乱,IDE用久了,命令行是硬伤,有必要复习一下:
假设有 g:/src/simple/Foo.java
最好的practice是将编译后的class文件全部集中放到bin目录下,bin和src在同一目录,先把bin创建好,g:/bin
注意这里有import *
1 package simple; 2 3 import net.mindview.util.*; 4 5 public class Foo { 6 public static void main(String[] args) { 7 Print.print("Foo imports net.mindview.util.*"); 8 } 9 }
还有g:/src/net/mindview/util/Print.java
1 package net.mindview.util; 2 import java.io.*; 3 4 public class Print { 5 // Print with a newline: 6 public static void print(Object obj) { 7 System.out.println(obj); 8 } 9 // Print a newline by itself: 10 public static void print() { 11 System.out.println(); 12 } 13 // Print with no line break: 14 public static void printnb(Object obj) { 15 System.out.print(obj); 16 } 17 // The new Java SE5 printf() (from C): 18 public static PrintStream 19 printf(String format, Object... args) { 20 return System.out.printf(format, args); 21 } 22 }
cmd切换到src目录,怎么编译运行Foo?
就不谈先前在尝试的过程中的错误了,先把正确的过程写到下面,以供举一反三:
因为Foo.java中使用了import ...*,所以要先编译Print.java,命令行如下:
javac -d ../bin net/mindview/util/Print.java /* “..” 表示上一级目录 */
然后编译Foo.java:
javac -d ../bin simple/*.java /* 虽然simple目录中只有Foo.java,但是Foo中使用了import *,所以必须使用javac ... *.java 至于原因,应该是多文件编译的要求 */
然后运行:
java -cp ../bin simple.Foo