关于 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 @   学而不思则罔!  阅读(375)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示