第二章 Java程序编译与运行环境
2.1 JDK环 境Java不 仅 提?copy;了 一 个 丰 富 的 语 言 和 运 行 环 境, 而 且 还提?copy;了 一 个 免 费 的Java开 发 工 具 集(Java Developers Kits, 简称JDK)。 编 程 人 员 和 最 终 用 户 可 以 利 用 这?copy;工 具 来 开 发java程序 或 调 用Java 内 容。JDK包 括 以 下 工 具: javac Java语 言 编 译 器,输 出 结 果 为Java字 节 码 java Java字 节 码 解 释 器 javap Disassembeler: Java字 节 码 分 解 程 序, 本 程 序 返 回Java程 序 的 成 员 变 量 及 方法 等 信 息。 javaprof 资 源 分 析 工 具, 用 于 分 析Java程 序 在 运 行过 程 中 调 用 了 哪?copy;资 源, 包 括 类 和 方 法 的 调 用 次 数 和时 间, 以 及 各 数 据 类 型 的 内 存 使 用 情 况 等。 javah C代 码 处理 工 具, 用 于 从Java类 调 用C++代 码 java Applet Viewer 小 应 用 程序 浏 览 工 具, 用 于 测 试 并 运 行Java小 应 用 程 序 java Debugger API Java调 试 工 具API Prototype Debugger Java调 试 工 具 原 型
Java开 发 环 境 还 包 括Java类 库(包 括I/O类 库、 用 户 界 面 类 库、网 络 类 库 等)和HotJava WWW 浏 览 器。 其 中,HotJava浏 览 器 提?copy;了在WWW环 境 下 运 行Java代 码 的 一 个 运 行 系 统, 而 且 还 为WWW开 发人 员 提?copy;了 一 个Java开 发 框 架。Java解 释 器 是 面 向 Java程 序的 一 个 独 立 运 行 系 统, 它 可 以 一 种 稳 定、 高 性 能 方 式 运 行那?copy;独 立 于 平 台 的Java字 节 码,Java编 译 器 则 用 于 生 成 这?copy;字节 码。
2.1.1 Java程 序 的 编 译Java程 序 的 编 译 程 序 是javac.exe。javac命 令 将Java程 序 编 译 成字 节 码, 然 后 你 可 用java解 释 器java命 令 来 解 释 执 行 这?copy;Java字节 码。Java程 序 源 码 必 须 存 放 在 后 缀 为.java的 文 件 里。Java 程序 里 的 每 一 个 类,javac都 将 生 成 与 类 相 同 名 称 但 后 缀 为.class文件。 编 译 器 把.class文 件 放 在.java文 件 的 同 一 个 目 录 里, 除 非你 用 了-d选 项。 当 你 引 用 到 某?copy;自 己 定 义 的 类 时, 必 须指 明 它 们 的 存 放 目 录, 这 就 需 要 利 用 环 境 变 量 参 数 CLASSPATH。环 境 变 量CLASSPATH是 由 一?copy;被 分 号 隔 开 的 路 径 名 组 成。 假如 传 递 给javac编 译 器 的 源 文 件 里 引 用 到 的 类 定 义 在 本 文 件和 传 递 的 其 它 文 件 中 找 不 到, 则 编 译 器 会 按 CLASSPATH定 义的 路 径 来 搜 索。 例 如:
CLASSPATH = .;C:javaclasses 则 编 译 器 先 搜 索 当 前 目 录, 假如 没 搜 索 到, 则 继 续 搜 索C:javaclasses目 录。 注 意, 系 统 总是 将 系 统 类 的 目 录 缺 省 地 加 在CLASSPATH后 面, 除 非 你 用 -classpath选项 来 编 译。 javac_g 是 一 个 用 于 调 试 的 未 优 化 的 编 译 器, 功能 与 用 法 和javac一 样。 javac的 用 法 如 下:
javac [-g][-O][-debug][-depend][-nowarn][-verbose][-classpath path][-nowrite][-d dir] file.java...
以 下 是 每 个 选 项 的 解 释。
选 项 解 释:
-classpath path 定 义javac搜 索 类 的 路 径。 它 将 覆 盖 缺 省 的CLASSPATH环境 变 量 的 设 置。 路 径 是 由 一?copy;由 逗 号 隔 开 的 路 径 名 组成, 一 般 格 式 如 下: .;your_path 例 如: .;C:javadocclasses;C:oolsjavaclasses 表 示 编 译 器 遇 到 一 个 新 类, 它 先 在 本 文 件 中 查 找 它 的 定义, 如 果 没 有, 则 在 本 文 件 所 处 目 录 下 其 它 文 件 中 查 找 它的 定 义, 如 果 还 没 有, 则 继 续 搜 索C:javadocclasses目 录 中 的所 有 文 件, 以 此 类 推。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)-d Directory 指 明 类 层 次 的 根 目 录, 格 式 如 下:
javac -d my_dir MyProgram.java
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)这 样 将MyProgram.java程 序 里 的 生 产 的.class文 件 存 放 在my_dir目录 里.
-g 带 调 试 信 息 编 译, 调 试 信 息 包 括 行 号 与 使 用java调 试工 具 时 用 到 的 局 部 变 量 信 息。 如 果 编 译 没 有 加 上-O优 化 选项, 只 包 含 行 号 信 息。
-nowarn 关 闭 警 告 信 息, 编 译 器 将 不 显 示 任 何 警 告 信 息。
-O 优 化 编 译static,final,private函 数, 注 意 你 的 类 文 件 可能 更 大。