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
时间: 2024-08-03 10:55:07

Java基础——classpath与package的相关文章

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

一:package 所有的Java类都是放置在同一个目录下面的,因此类之间的相互调用无需显式声明调用. –同一个目录下,两个类的名字不能相同 –文件过多,查找和修改都不易,且容易出 Java支持多个目录放置Java,并且通过package/import/classpath/jar等机制配合使用,可以支持跨目录放置和调用Java package 包,和C++中namespace类似 (一)package使用 在Java类文件的第一句话给出包的名称--->项目目录下的包路径 package net.

java基础--JDK安装、环境变量配置、工具开发第一个程序、数据类型、运算符

**-----Java基础大纲-----**   **-----本章节-----** 1.Java语言的历史.特点及工作原理 2.JRE和JDK的介绍 3.Java运行环境和开发工具 4.Java基础语法 **-----下一章节-----** 5.条件语句 6.循环 7.数组 ============================================== 一:历史及开发准备 1.Java发展历程及来源 (1)发展历程 1996年1月,Sun公司发布了Java的第一个开发工具包(JD

java 基础(二)

java 基础(二)java 基础(二) 2016-2-1 by Damon 61. 编写多线程程序有几种实现方式 Java 5以前实现多线程有两种实现方法:一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活. 补充:Java 5以后创建线程还有第三种方式:实现Callable接口,该接口中的

Java基础复习(六)

1. 接口的实现类中的实现接口中的抽象方法的方法必须为public,为什么? 接口中所有的方法与变量都默认是 public 的,在接口中可以不写出来.但在实现类中,如果不明写的话,就变成了 friend  的了,也就是 “包访问权限”.而JAVA又规定,在实现接口或者覆写父类方法时,不能降低父类方法的访问权限,但是可以提高.也就是可以按照  friend protected public 来提高访问权限,但不能按照 public protected friend 来降低访问权限. 反证法: 接口

Java基础常见英语词汇

(转自http://www.jianshu.com/p/2743fe834166) Java基础常见英语词汇(共70个) ['?bd?ekt] ['?:rientid]导向的 ['pr??ɡr?m??]编程OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程 [d?'vel?pm?nt][k?t]工具箱 ['v??tj??l]虚拟的JDK:Java development kit, java开发工具包 JVM:java

学习Spring必学的Java基础知识(1)----反射

引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Java基础知识,希望对大家有所帮助.): [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http://www.iteye.com/topic/1123293 [3] 属性

给Java新手的一些建议——Java知识点归纳(Java基础部分)

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

给Java新手的一些建议----Java知识点归纳(Java基础部分)

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

Java基础07 包(转载)

包(package)的目的就是为了更好的组织Java程序. 包的建立 包的建立非常简单.我们只用在Java程序的开始加入package就可以了.我们以Human类为例,将它放入包中: package com.vamei.society; public class Human{    /**     * constructor     */    public Human(int h){        this.height = h;        System.out.println("I'm