回顾: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

原文地址:https://www.cnblogs.com/qrlozte/p/2969779.html