关于 CLASSPATH 和 -classpath 和 -cp

1. 作用

作用: 指定 java-解释器、javac-编译器 查找 .class或.java 文件的位置(可以是 目录、jar、zip)
    多个目录时,用 : 分割

2. 区别

区别: -classpath 和 -cp 相同
        是 javac、java 命令的参数

     CLASSPATH 为环境变量
     如果配置了 CLASSPATH,启动 javac、java是会默认使用 CLASSPATH
     如果使用参数时 -classpath=path:CLASSPATH

     示例: export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/usr/local/lib/antlr-4.0-complete.jar

3. 示例: 编译时 java源文件中 引用了其他的类

1. 在 /root/up 下 创建 One.java

    // 引用了 外部类 Two
    public class One {
        public static void main(String[] args) {
            new Two().show();
            System.out.println("One启动了");
        }
    }

2. 在 /home/software 下 创建 Two.java

    public class Two {

        public void Two(){
            System.out.println("Two启动了");
    }   

     public void show(){
            System.out.println("Two启动了");

    }

        public static void main(String[] args) {
            System.out.println("Two启动了");
        }
    }

3. 编译 One.java
    javac One.java

    One.java:3: 错误: 找不到符号
            new Two().show();
                ^
      符号:   类 Two
      位置: 类 One
    1 个错误

分析: 无法找到 引用 Two的java文件在哪里 

3.1 编译 One.java 指定 -cp 
javac -cp /home/software One.java

3.2 编译 One.java 指定 环境变量 CLASSPATH
export CLASSPATH=.:/home/software
javac One.java

4.示例 运行 一个引用了外部类的类

1. 运行 java One 
Exception in thread "main" java.lang.NoClassDefFoundError: Two
        at One.main(One.java:3)
Caused by: java.lang.ClassNotFoundException: Two
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        ... 1 more

分析: 无法找到 Two.class 

2. 运行 java One 指定 -cp (指定 Two.class 所在的目录 和 One.class 所在的目录)
java -cp /home/software:./ One 

3. 运行 java One 指定 环境变量 CLASSPATH
export CLASSPATH=.:/home/software
java One

 

 

 

posted @ 2022-10-18 11:24  学而不思则罔!  阅读(429)  评论(0)    收藏  举报