Java基础——classpath与package

Posted 原地没有风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础——classpath与package相关的知识,希望对你有一定的参考价值。

Java Package

Java package是将Java各种类、接口、枚举、注解组织成namespace的一种机制。package有效解决了类型重名问题,相同package的类型可以相互访问,不同package的类型访问要么使用import语句引入,要么使用包含namespace全限定名称引用。

package实质上对应于文件系统的目录结构,编写程序时,使用package AA.BB.CC语句时,编译后,在工作目录下应有AA/BB/CC/xx.class文件结构与之对应。不使用package语句时,意味着使用默认package,即本地工作目录,编译后,会在工作目录里生成xx.class文件。

大多是时候,我们使用IDE开发,如Eclipse,会自动调用合适的javac命令进行编译,但是如果是我们自己手动调用呢?

如果代码使用了package语句,一定要调用合适的javac命令,生成合理的字节码文件目录。

D:\Java>javac -d . -verbose HelloWorld.java
[解析开始时间 RegularFileObject[HelloWorld.java]]
[解析已完成, 用时 30 毫秒]
[源文件的搜索路径: .]
...
... D:\Java>

 编译完成,在本地目录下会生成对应于package的目录结构

使用java命令调用

D:\Java>java cn.leo.demo.HelloWorld
Hello

Java classpath

classpath是Java虚拟机(Java命令)、Java编译器(javac命令)工作时的配置参数,用来指定用户自定义类型和package的位置。classpath可以在命令行临时设置,也可以配置在系统环境变量中长期保持有效。

继续看上面的例子,因为没有设置CLASS_PATH环境变量,其实java的会在本地目录中寻找HelloWorld.class文件,cn.leo.demo.HelloWorld表示 D:/Java/cn/leo/demo/HelloWorld.class。

如果要引用的类不在当前目录中,一定要使用-cp 或者 -classpath选项指定类搜索路劲

D:\Java\cn>java cn.leo.demo.HelloWorld
错误: 找不到或无法加载主类 cn.leo.demo.HelloWorld

D:\Java\cn>java -cp ../ cn.leo.demo.HelloWorld Hello D:\Java\cn>

如果要执行的类引用了当前classpath搜索路径找不到的类型,就要修改当前classpath添加可以搜索到的路径

例如

// HelloWorld.java
package cn.leo.demo;

import com.leo.demo.Hello;

public class HelloWorld{
  public static void main(String[] args){
    Hello leo = new Hello();
    leo.say();
  }
}

// Hello.java
package com.leo.demo;

public class HelloLeo{
    public void say(){
        System.out.println("Leo");
    }
}

HelloWorld类在cn.leo.demo包中,HelloLeo类在com.leo.demo包中,HelloWorld类引用了HelloLeo类。

首先编译HelloLeo类,再编译HelloWorld类,保证依赖解析正确

D:\Java>javac -d . Hello.java

D:\Java>javac -d . HelloWorld.java

D:\Java>java cn.leo.demo.HelloWorld
Leo

D:\Java>cd ..

D:\>java -cp java cn.leo.demo.HelloWorld
Leo

 





以上是关于Java基础——classpath与package的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中的环境变量配置 PATH CLASSPATH

JAVA核心技术I---JAVA基础知识(package和import)

02 java 基础:java 文件名与类名关系 CLASSPATH

廖雪峰Java2面向对象编程-5包和classpath-1包package

java基础知识(10)---包

java class在多个文件夹里,怎么设置classpath