标签:java
1.编译带有包声明的JAVA类
package aa;
public class B {}
用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
标签:java
原文地址:http://blog.csdn.net/s517515435/article/details/42321193