首页 > 代码库 > JAVAC 编译JAVA文件

JAVAC 编译JAVA文件

1.编译带有包声明的JAVA类

package aa;

public class B {
public static void main(String[] args)
{
System.out.println("f");
}

}

JAVAC编译完这个文件时,如果直接用java B 来执行的话,会报错

Exception in thread "main" java.lang.NoClassDefFoundError: B (wrong name: aa/B)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

正确做法是退到aa所在的那个目录,比如我现在.../java/aa/下,则这时回退一个目录到,,./java/下,再执行java aa.B

这时候就能正常执行了。

2.一个文件中声明了其他文件中的类。

       编译:两个类在同一个包aa下,A类中声明了B类;  目录为java/aa/B.java 注意A.java也在这个目录下。则切换工作目录到java下 javac aa/A.java ,则会同时编译A与B两个类。也可以直接在aa目录下编译,但是此时要加上classpath,

         javac -classpath ../  A.java

     运行: 运行根据工作目录的不同,也有两种方式。若在java目录下,则直接java aa.A。若是在aa目录,则同上要加上classpath指定 java -classpath  ../  aa.A    。根据这边讲的第二种运行方式也可以用于1中的情况。

 2.带JAR包编译

同样指定classpath ,例如若引用了/home/jar/org.json.jar包

       则 javac -classpath /home/jar/org.json.jar  A.java

   http://wenku.baidu.com/link?url=tG2_FSkx8FKlKkt9XrY3GakiVGpysPLbPLEYGVcWdYrBBd4znxVLzU7J7URYIp2j2mYJaUROCOJ4pqxmhbqzco5PqF3fyp5_BBHYI1zY0BK

    

JAVAC 编译JAVA文件