美文网首页
java之命令行编译运行

java之命令行编译运行

作者: 豆豆先生的小屋 | 来源:发表于2016-06-06 00:09 被阅读304次

    先看代码

    public class HelloChina {
        public static void main(String[] args) {
            System.out.println("Hello China");
        }
    }
    
    

    哈哈 为什么不是HelloWorld呢 因为我愿意
    HelloChina.java 存放在E:\animal\dog\cart 文件夹下面
    你要问我为什么是dog和cat 我不会告诉你是因为它们拼写简单的
    打开cmd

    E:\>cd animal\dog\cat
    E:\animal\dog\cat>javac HelloChina.java
    E:\animal\dog\cat>java HelloChina
    Hello China
    E:\animal\dog\cat>
    

    这个非常简单 没什么疑问的
    那么如果我在HelloChina.java第一行加上package呢
    如下:

    package dog.cat;
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello cat and cat!");
        }
    }
    
    

    请注意文件的位置一定要和package后面的路径对应 至于不对应如何编译 我还没搞懂 有懂得可以评论区留言

    关于这种带有package的首先还是cd到相应的目录下面

    E:\>cd animal\dog\cat
    E:\animal\dog\cat> javac HelloChina.java
    E:\animal\dog\cat> java HelloChina
    错误: 找不到或无法加载主类 HelloChina
    E:\animal\dog\cat>cd ../../
    E:\animal>java dog.cat.HelloChina
    Hello China
    E:\animal>
    

    javac跟之前的没什么区别
    java的时候一定要去到文件文件package的上一层目录,例如本例中HelloChina.java位于dog.cat之中,但dog位于animal文件中 所以要驱去到animal目录中运行class文件,如果直接在当前目录下运行的话会报错

    ** 切记 **:package一定不要以java开头不然会报另外一个异常 我就在这里栽了以一个大跟头
    下面是错误的示例:

    package java.dog.cat;
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello cat and cat!");
        }
    }
    
    E:\>cd java\dog\cat
    E:\java\dog\cat>javac HelloChina.java
    E:\java\dog\cat>cd ../../../
    E:\>java java.dog.cat.HelloChina
    Error: A JNI error has occurred, please check your installation and try again
    Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.dog.cat
           at java.lang.ClassLoader.preDefineClass(ClassLoader.java:662)
           at java.lang.ClassLoader.defineClass(ClassLoader.java:761)
           at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
           at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
           at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
           at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
           at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
           at java.security.AccessController.doPrivileged(Native Method)
           at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
           at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
           at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
           at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
           at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
    

    相关文章

      网友评论

          本文标题:java之命令行编译运行

          本文链接:https://www.haomeiwen.com/subject/mkmrdttx.html