码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础——classpath与package

时间:2017-09-28 18:10:04      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:手动   文件结构   string   ide   stat   环境   mes   使用   name   

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

标签:手动   文件结构   string   ide   stat   环境   mes   使用   name   

原文地址:http://www.cnblogs.com/seastar1989/p/7607656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!