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核心技术I---JAVA基础知识(package和import)
02 java 基础:java 文件名与类名关系 CLASSPATH