• classpath总结


    classpath表示类(.class文件)的路径,在dos环境下使用时有如下情况:

    第一种情况,未命名包时(不加package):

    在e盘建个demo的文件夹,在demo下建立a、b、c三个文件夹,在b下建立一个B.java文件如下:

    public class B{
    	
    	public String sayHi(String name) {
    		return "Hi!" + name;
    	}
    	
    }

    在a下建立一个A.java文件,A类中引用了B类,如下:

    import java.util.Date;
    
    public class A{
    
    	public static void main(String[] args) {
    		System.out.println(new B().sayHi("zhangsan"));
    		System.out.println(new Date());
    	}
    
    }

    在dos环境下切换到e:/demo/a下,使用javac A.java报错:

    因为默认的classpath是在当前目录下找,找不到B类,所以通过-classpath+路径名给classpath指定类路径,使用javac -classpath e:/demo/b A.java:

     继续执行java A报错:

    原因是-classpath是临时指定类路径,使用java -classpath e:/demo/b A提示找不到A类:

    需要在路径中加分号(;),分号表示当前目录,分号在前表示先在当前目录下找后到指定目录找,即java -classpath ;e:/demo/b A或java -classpath e:/demo/b; A:

    如果执行javac B.java,会提示找不到文件B.java,需要输入文件的绝对路径如下:

    第二种情况,命名包时(加入package):

    A.java修改如下:

    package a;
    
    import java.util.Date;
    import b.B;
    
    public class A{
    
    	public static void main(String[] args) {
    		System.out.println(new B().sayHi("zhangsan"));
    		System.out.println(new Date());
    	}
    
    }

    B.java修改如下:

    package b;
    
    public class B{
    	
    	public String sayHi(String name) {
    		return "Hi!" + name;
    	}
    
    }

     在dos环境下切换到e:/demo/a下,使用javac A.java报错:

    因为import导入时,先在当前目录下找b,没找到,所以使用javac -classpath e:/demo A.java:

    或者切换到e:/demo,使用相对路径javac a/A.java:

    在e:/demo/a下执行java A提示找不到A:

    因为此时命令相当于在当前目录下先找a,再找A即E:demoaaA.java,重复了,所以要切换到e:/demo下使用java a.A:

    此处要使用A类的全名称,即加包名,也不用-classpath指定B类的路径,上面说过import导入时会在当前目录下依次找。

    将b文件夹移动到c文件夹下,在e:/demo/a下执行javac -classpath e:/demo A.java报错:

    要改为javac -classpath e:/demo/c A.java:

    切换到e:/demo,使用相对路径javac a/A.java报错:

    此时应改为javac -classpath e:/demo/c a/A.java:

    在e:/demo下执行java a.A报错:

     

    修改为java -classpath ;e:/demo/c a.A或java -classpath e:/demo/c; a.A:

     最后,编译时如果有包名,-classpath要指定到包名的父目录,比如B.java在包b下,-classpath指定为e:/demo/c而不是e:/demo/c/b;执行时如果有包名,要加上包路径比如java a.A、java b.B。

  • 相关阅读:
    Git命令与使用
    Android与WebView的JS交互
    Android 中关于硬件加速的使用和问题
    Activity-生命周期和启动模式
    Activity-恢复与保存状态或数据
    Android中Paint的一些使用心得记录
    Java中sleep,wait的区别
    C#基本类型
    LeetCode74 搜索二维矩阵
    leetcode 43 字符串相乘 java
  • 原文地址:https://www.cnblogs.com/lirun/p/10368953.html
Copyright © 2020-2023  润新知