Java 的 Class Path 和 Package(转载)

本文详细介绍了Java中的Class Path和Package的概念及其重要性。Class Path是Java虚拟机寻找类和库的路径,包括引导类、扩展类和用户类。用户类路径可以通过环境变量、命令行参数或默认值指定。Package则是组织类的一种方式,提供访问保护和命名空间管理。文章通过实例演示了如何设置Class Path、创建和使用Package以及打包成jar文件的方法,并强调了理解这些基础知识的重要性。
摘要由CSDN通过智能技术生成

发信人: SuperMMX (笑天子), 信区: Java
标  题: [整理] Java 的 Class Path 和 Package
发信站: BBS 水木清华站 (Mon Apr  9 08:15:01 2001)


           Java 中的 ClassPath 和 Package


前言:
    由于这两个问题新手问得较多, 且回答比较零散, 很难统一整理, 所
以就直接写了一篇, 还请大家见谅.

前言:
    由于这两个问题新手问得较多, 且回答比较零散, 很难统一整理, 所
以就直接写了一篇, 还请大家见谅.


正文:
一, 类路径 (class path)
    当你满怀着希望安装好了 java, 然后兴冲冲地写了个 hello world,然后编译,
运行, 就等着那两个美好的单词出现在眼前, 可是不幸的是, 只看到了 Can't find
class HelloWorld 或者 Exception in thread "main" java.lang.NoSuchMethodError: main.
为什么呢? 编译好的 class 明明在呀.


    我们一起来看一看 java 程序的运行过程. 我们已经知道 java 是通过 java
虚拟机来解释运行的, 也就是通过 java 命令, javac 编译生成的 .class
文件就是虚拟机要执行的代码, 称之为字节码(bytecode), 虚拟机通过 classloader
来装载这些字节码, 也就是通常意义上的类. 这里就有一个问题, classloader 从
哪里知道 java 本身的类库及用户自己的类在什么地方呢? 或者有着缺省值(当前路径).
或者要有一个用户指定的变量来表明, 这个变量就是类路径(classpath), 或者在运行
的时候传参数给虚拟机. 这也就是指明 classpath 的三个方法. 编译的过程和运行
的过程大同小异, 只是一个是找出来编译, 另一个是找出来装载.
    实际上 java 虚拟机是由 java luncher 初始化的, 也就是 java (或 java.exe)
这个程序来做的. 虚拟机按以下顺序搜索并装载所有需要的类:
    1, 引导类: 组成 java 平台的类, 包含 rt.jar 和 i18n.jar 中的类.
    2, 扩展类: 使用 java 扩展机制的类, 都是位于扩展目录($JAVA_HOME/jre/lib/ext)
中的 .jar 档案包.
    3, 用户类: 开发者定义的类或者没有使用 java 扩展机制的第三方产品. 你必须在
命令行中使用 -classpath 选项或者使用 CLASSPATH 环境变量来确定这些类的位置. 我
们在上面所说的用户自己的类就是特指这些类.


    这样, 一般来说, 用户只需指定用户类的位置, 引导类和扩展类是"自动"寻找的.
    那么到底该怎么做呢? 用户类路径就是一些包含类文件的目录, .jar, .zip 文件的

列表, 至于类具体怎么找, 因为牵扯到 package 的问题, 下面将会说到, 暂时可认为
只要包含了这个类就算找到了这个类. 根据平台的不同分隔符略有不同, 类 unix 的系
统基本上都是 ":", windows 多是 ";". 其可能的来源是:


    * ".", 即当前目录, 这个是缺省值.
    * CLASSPATH 环境变量, 一旦设置, 将缺省值覆盖.
    * 命令行参数 -cp 或者 -classpath, 一旦指定, 将上两者覆盖.
    * 由 -jar 参数指定的 .jar 档案包, 就把所有其他的值覆盖, 所有的类都来自这个指
定的档案包中. 由于生成可执行的 .jar 文件, 还需要其他一些知识, 比如 package, 
还有特定的配置文件, 本文的最后会提到. 可先看看 jdk 自带的一些例子.
    我们举个 HelloWorld 的例子来说明. 先做以下假设:
    * 当前目录是 /HelloWorld (或 c:/HelloWorld, 以后都使用前一个)
    * jdk 版本为 1.2.2 (linux 下的)
    * PATH 环境变量设置正确. (这样可以在任何目录下都可以使用工具)
    * 文件是 HelloWorld.java, 内容是:


    public class HelloWorld
    {
        public static void main(String[] args)
        {
            System.out.println("Hello World!/n");
            System.exit(0);
        }
    }


    首先这个文件一定要写对, 如果对 c 熟悉的话, 很有可能写成这样:
    public static void main(int argc, String[] argv)
    {
        ....
    }
    这样是不对的, 不信可以试一试. 由于手头没有 java 的规范, 所以
作如下猜想: java 的 application 程序, 必须以 public static void main(String[])
开始, 其他不一样的都不行.
    到现在为止, 我们设置方面只设置了 PATH.


    1, 当前路径就是指你的 .class 文件在当前目录下,
       [HelloWorld]$ javac HelloWorld.java  //这一步不会有多大问题,
       [HelloWorld]$ java HelloWorld        // 这一步可能就会有问题.


    如果出了象开头那样的问题, 首先确定不是由于敲错命令而出错. 如果没有敲错命
令,那么接着做:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值