52、Java 2软件开发工具包编程指南

Java 2软件开发工具包编程指南

在Java编程的世界里,Java 2软件开发工具包(SDK)是一款强大且广泛使用的工具。它可以帮助开发者创建、编译和运行Java程序。下面将详细介绍SDK的各个方面。

SDK概述

虽然有数十种开发环境可用于创建Java程序,但最广泛使用的是Sun Microsystems的软件开发工具包(SDK)。它是一组用于使用Java语言开发软件的命令行工具。SDK受欢迎的主要原因有两个:
- 免费 :可以从Sun的官方Java网站(http://java.sun.com )免费下载。
- 领先支持 :每当Sun发布新的Java版本时,SDK总是最先提供支持该版本的工具。

SDK使用命令行(在Windows下也称为MS - DOS提示符、命令提示符或控制台,在Unix下称为shell提示符)。通过键盘输入命令,例如:

javac VideoBook.java

这个命令使用SDK编译器编译一个名为 VideoBook.java 的Java程序。命令由两部分组成:SDK编译器的名称 javac ,后面跟着要编译的程序名称 VideoBook.java ,两者用空格分隔。

每个SDK命令都遵循相同的格式:要使用的工具名称,后面跟着一个或多个指示工具应执行操作的元素,这些元素称为参数。例如:

java VideoBook add VHS “Bad Influence”

这个命令告诉Java解释器运行一个名为 VideoBook 的类文件,并带有三个命令行参数:字符串 add VHS Bad Influence

有些与SDK一起使用的参数会修改工具的功能,这些参数前面带有连字符,称为选项。例如:

java -version

这个命令告诉Java解释器显示其版本号,而不是尝试运行类文件。这是检查SDK是否已正确配置以在系统上运行Java程序的好方法。在配备SDK 1.4.0的系统上运行此命令的输出示例如下:

java version “1.4.0”
Java(TM) 2 Runtime Environment, Standard Edition (build1.4.0)
Java HotSpot(TM) Client VM (build 1.4.0, mixed mode)

在某些情况下,可以将选项与其他参数结合使用。例如,如果编译一个使用了已弃用方法的Java类,可以使用 -deprecation 选项来查看有关这些方法的更多信息:

javac -deprecation OldVideoBook.java
Java解释器(java)

Java解释器 java 用于从命令行运行Java应用程序。它接受要运行的类文件的名称作为参数,例如:

java BidMonitor

虽然Java类文件以 .class 扩展名结尾,但在使用解释器时不应指定此扩展名。

Java解释器加载的类必须包含一个名为 main() 的类方法,其形式如下:

public static void main(String[] arguments) {
    // 方法内容
}

简单的Java程序可能只由一个包含 main() 方法的类组成。在其他情况下,解释器会自动加载所需的任何其他类。

Java解释器运行字节码,即由Java虚拟机执行的编译指令。将Java程序保存为字节码的 .class 文件后,可以由不同的解释器运行而无需修改。如果编译了一个Java 2程序,它应该与任何完全支持Java 2的解释器兼容。

有趣的是,Java并不是创建Java字节码的唯一语言。NetRexx、JPython、JRuby、JudoScript等数十种语言可以通过特定的编译器编译成可执行字节码的 .class 文件。Robert Tolksdorf维护了这些语言的综合列表,可从http://grunge.cs.tu - berlin.de/~tolk/vmlanguages.html 查看。

指定Java解释器应运行的类文件有两种不同的方式:
- 非包类 :如果类不属于任何包,可以通过指定类名来运行它,如前面的 java BidMonitor 示例。
- 包内类 :如果类是包的一部分,必须使用其完整的包名和类名来指定类。例如,对于属于 com.prefect.auction 包的 SellItem 类,应使用以下命令运行:

java com.prefect.auction.SellItem

包名的每个元素对应一个子文件夹。Java解释器会在以下几个位置查找 SellItem.class 文件:
- 命令所在文件夹的子文件夹 :例如,如果命令是从 C:\J21work 文件夹发出的,那么如果 SellItem.class 文件位于 C:\J21work\com\prefect\auction 文件夹中,就可以成功运行。
- CLASSPATH设置中的任何文件夹的子文件夹 :如果创建自己的包,一个简单的管理方法是将一个文件夹添加到CLASSPATH中,作为创建的任何包的根文件夹,例如 C:\javapackages 。创建与包名对应的子文件夹后,将包的类文件放在正确的子文件夹中。

Java 2版本1.4支持断言,这是一项提高程序可靠性的新功能。要使用Java解释器运行包含断言的程序,使用 -ea 选项,例如:

java -ea Outline

Java解释器将执行应用程序类及其使用的所有其他类文件中的所有 assert 语句,但Java类库中的类除外。要使用所有断言,使用 -esa 选项。如果未指定启用断言功能的选项,解释器将忽略所有 assert 语句。

Java编译器(javac)

Java编译器 javac 将Java源代码转换为一个或多个可由Java解释器运行的字节码类文件。

Java源代码存储在扩展名为 .java 的文件中。可以使用任何能保存无特殊格式代码文档的文本编辑器或文字处理器创建这些文件。这些文件通常称为纯文本、ASCII文本、DOS文本等。

一个Java源代码文件可以包含多个类,但只能有一个类被声明为 public 。如果需要,一个类也可以完全不包含 public 类,但由于继承规则,小程序(applet)不能这样。

如果源代码文件包含一个已声明为 public 的类,文件的名称必须与该类的名称匹配。例如,名为 BuyItem 的公共类的源代码必须存储在名为 BuyItem.java 的文件中。

要编译文件,使用 javac 工具并将源代码文件的名称作为参数,例如:

javac BidMonitor.java

可以通过将每个单独的文件名作为命令行参数来编译多个源文件,例如:

javac BidMonitor.java SellItem.java

也可以使用通配符,如 * ? 。使用以下命令编译文件夹中的所有 .java 文件:

javac *.java

编译一个或多个Java源代码文件时,每个成功编译的Java类都会创建一个单独的 .class 文件。

如果编译一个使用断言的程序,必须使用 -source 1.4 选项,例如:

javac -source 1.4 Outline.java

1.4 参数指的是Java 2版本1.4,这是支持 assert 语句的第一个Java版本。如果不使用 -source 选项并尝试编译包含断言的程序, javac 会显示错误消息并拒绝编译文件。

运行编译器时另一个有用的选项是 –deprecation ,它会使编译器描述Java程序中使用的任何已弃用的方法。通常,如果编译器在程序中发现任何已弃用的方法,会发出一个警告。使用 –deprecation 选项会使编译器列出每个已弃用的方法,例如:

javac -deprecation SellItem.java

如果更关注Java程序的速度而不是其类文件的大小,可以使用 –O 选项编译其源代码。这将创建为更快性能进行了优化的类文件。静态、最终或私有方法可能会被内联编译,这种技术会使类文件变大,但会使方法执行得更快。

如果要使用调试器查找Java类中的错误,使用 -g 选项编译源代码,将所有调试信息(包括行号、局部变量和源代码的引用)放入类文件中。如果要排除这些信息,使用 -g:none 选项。

通常,Java编译器在创建类文件时不会提供很多信息。实际上,如果源代码成功编译且未使用任何已弃用的方法,根本不会看到编译器的任何输出。在这种情况下,没有消息就是好消息。

如果想查看 javac 工具在编译源代码时的更多信息,使用 –verbose 选项。更详细的编译器将描述完成不同功能所需的时间、正在加载的类以及所需的总时间。

小程序查看器(appletviewer)

小程序查看器 appletviewer 用于运行需要Web浏览器并作为HTML文档一部分呈现的Java程序。

小程序查看器接受一个HTML文档作为命令行参数,例如:

appletviewer NewAuctions.html

如果参数是Web地址而不是文件引用, appletviewer 将加载该地址的HTML文档。例如:

appletviewer http://www.javaonthebrain.com

appletviewer 加载HTML文档时,该文档上的每个小程序都会在自己的窗口中开始运行。这些窗口的大小取决于小程序HTML标签中设置的 HEIGHT WIDTH 属性。

与Web浏览器不同, appletviewer 不能用于查看HTML文档本身。如果想查看小程序相对于文档其他内容的布局,必须使用支持Java的Web浏览器。

当前版本的Netscape Navigator和Microsoft Internet Explorer不提供对Java小程序的内置支持,但可以从Sun Microsystems获取作为浏览器插件的Java支持。Sun的Java插件可用于在浏览器中运行Java 2小程序,代替浏览器的Java解释器。该插件可以与软件开发工具包一起安装,因此系统上可能已经存在。也可以从Sun的网站(http://java.sun.com/products/plugin/ )下载。

使用 appletviewer 相当简单,但可能对查看器运行小程序时可用的一些菜单选项不太熟悉。以下是 appletviewer 工具的“Applet”下拉菜单中的选项:
- Restart和Reload :用于重新启动小程序的执行。两者的区别在于, Restart 在重新启动前不会卸载小程序,而 Reload 会。 Reload 选项相当于关闭小程序查看器并在同一网页上再次打开它。
- Start和Stop :用于直接调用小程序的 start() stop() 方法。
- Clone :在自己的窗口中创建同一个小程序的第二个副本。
- Tag :显示程序的 <APPLET> <OBJECT> 标签,以及配置小程序的任何 <PARAM> 标签的HTML。
- Info :调用小程序的 getAppletInfo() getParameterInfo() 方法。程序员可以实现这些方法以提供有关小程序及其可以处理的参数的更多信息。 getAppletInfo() 方法应返回一个描述小程序的字符串, getParameterInfo() 方法应返回一个字符串数组的数组,指定每个参数的名称、类型和描述。

以下是一个展示这些方法使用的Java 2小程序示例:

import java.awt.*;

public class AppInfo extends javax.swing.JApplet {
    String name, date;
    int version;

    public String getAppletInfo() {
        String response = “This applet demonstrates the “
            + “use of the Applet’s Info feature.”;
        return response;
    }

    public String[][] getParameterInfo() {
        String[] p1 = { “Name”, “String”, “Programmer’s name” };
        String[] p2 = { “Date”, “String”, “Today’s date” };
        String[] p3 = { “Version”, “int”, “Version number” };
        String[][] response = { p1, p2, p3 };
        return response;
    }

    public void init() {
        name = getParameter(“Name”);
        date = getParameter(“Date”);
        String versText = getParameter(“Version”);
        if (versText != null)
            version = Integer.parseInt(versText);
    }

    public void paint(Graphics screen) {
        Graphics2D screen2D = (Graphics2D) screen;
        screen2D.drawString(“Name: “ + name, 5, 50);
        screen2D.drawString(“Date: “ + date, 5, 100);
        screen2D.drawString(“Version: “ + version, 5, 150);
    }
}

以下是一个用于加载 AppInfo 小程序的网页示例:

<applet code=”AppInfo.class” height=200 width=170>
<param name=”Name” value=”Rogers Cadenhead”>
<param name=”Date” value=”03/01/02”>
<param name=”Version” value=”3”>
</applet>

这些功能需要浏览器能够向用户提供这些信息。SDK的 appletviewer 通过“Info”菜单选项处理此问题,但目前像Internet Explorer这样的浏览器没有类似功能。

Java文档工具(javadoc)

Java文档创建工具 javadoc 接受 .java 源代码文件或包名作为输入,并生成HTML格式的详细文档。

为了让 javadoc 为程序创建完整的文档,程序的源代码中必须使用一种特殊类型的注释语句。Java还有一种更结构化的注释,可以被 javadoc 工具读取。这种注释用于描述程序元素,如类、变量、对象和方法,格式如下:

/** A descriptive sentence or paragraph.
* @tag1 Description of this tag.
* @tag2 Description of this tag.
*/

Java文档注释应紧放在它所描述的程序元素上方,并简要说明该程序元素是什么。例如,如果注释在类语句之前,它应该描述类的用途。

除了描述性文本外,还可以使用不同的标签来进一步记录程序元素。这些标签前面带有 @ 符号,后面跟着一个空格和描述性句子或段落。

以下是一个详细记录的 AppInfo 小程序版本 AppInfo2 的示例:

import java.awt.*;

/** This class displays the values of three parameters:
* Name, Date and Version.
* @author <a href=”http://java21dayspro.com”>Rogers Cadenhead</a>
* @version 3.0
*/
public class AppInfo2 extends javax.swing.JApplet {
    /**
    * @serial The programmer’s name.
    */
    String name;
    /**
    * @serial The current date.
    */
    String date;
    /**
    * @serial The program’s version number.
    */
    int version;

    /**
    * This method describes the applet for any browsing tool that
    * requests information from the program.
    * @return A String describing the applet.
    */
    public String getAppletInfo() {
        String response = “This applet demonstrates the “
            + “use of the Applet’s Info feature.”;
        return response;
    }

    /**
    * This method describes the parameters that the applet can take
    * for any browsing tool that requests this information.
    * @return An array of String[] objects for each parameter.
    */
    public String[][] getParameterInfo() {
        String[] p1 = { “Name”, “String”, “Programmer’s name” };
        String[] p2 = { “Date”, “String”, “Today’s date” };
        String[] p3 = { “Version”, “int”, “Version number” };
        String[][] response = { p1, p2, p3 };
        return response;
    }

    /**
    * This method is called when the applet is first initialized.
    */
    public void init() {
        name = getParameter(“Name”);
        date = getParameter(“Date”);
        String versText = getParameter(“Version”);
        if (versText != null)
            version = Integer.parseInt(versText);
    }

    /**
    * This method is called when the applet’s display window is
    * being repainted.
    */
    public void paint(Graphics screen) {
        Graphics2D screen2D = (Graphics2D)screen;
        screen.drawString(“Name: “ + name, 5, 50);
        screen.drawString(“Date: “ + date, 5, 100);
        screen.drawString(“Version: “ + version, 5, 150);
    }
}

使用以下命令从 AppInfo2.java 源代码文件创建HTML文档:

javadoc -author -version AppInfo2.java

Java文档工具将在与 AppInfo2.java 相同的文件夹中创建几个不同的网页。这些页面将以与Sun的Java 2类库官方文档相同的方式记录程序。

要查看 javadoc AppInfo2 创建的文档,在Web浏览器中加载新创建的网页 index.html

javadoc 工具生成的网页有大量超链接。浏览这些页面,查看文档注释和标签中的信息显示的位置。如果熟悉HTML标记,可以在文档注释中使用HTML标签,如 <A> <TT> <B> AppInfo2 程序的第5行使用 <A> 标签将文本“Rogers Cadenhead”转换为指向本书网站的超链接。

javadoc 工具还可以通过将包名作为命令行参数来记录整个包。将为包中的每个 .java 文件创建HTML文件,以及一个索引包的HTML文件。

如果希望在默认文件夹之外的其他文件夹中生成Java文档,使用 –d 选项,后面跟着空格和文件夹名称。例如:

javadoc -author -version -d C:\JavaDocs\ AppInfo2.java

以下是可以在Java文档注释中使用的其他标签:
- @deprecated text :表示此类、方法、对象或变量已被弃用。这会导致 javac 编译器在编译使用该功能的程序时发出弃用警告。
- @exception class description :用于抛出异常的方法,此标签记录异常的类名及其描述。

综上所述,Java 2 SDK提供了丰富的工具和功能,能够帮助开发者更高效地进行Java程序的开发、调试和文档编写。通过合理运用这些工具和选项,可以提高程序的可靠性、性能和可维护性。

Java 2软件开发工具包编程指南(续)

工具使用总结与对比

为了更清晰地了解Java 2 SDK中各个工具的特点和用途,下面通过表格进行总结对比:
| 工具名称 | 主要用途 | 输入参数 | 常用选项 | 输出结果 |
| — | — | — | — | — |
| java(解释器) | 从命令行运行Java应用程序 | 类文件名称(非包类直接写类名,包内类写完整包名和类名) | -ea(启用断言)、-esa(启用所有断言)、-version(显示版本号) | 运行Java程序 |
| javac(编译器) | 将Java源代码转换为字节码类文件 | 源代码文件名称(可多个或使用通配符) | -source 1.4(编译含断言程序)、–deprecation(显示已弃用方法)、–O(优化性能)、-g(添加调试信息)、-g:none(排除调试信息)、–verbose(详细输出) | 生成.class文件 |
| appletviewer(小程序查看器) | 运行作为HTML文档一部分的Java小程序 | HTML文档(文件路径或Web地址) | 无 | 运行小程序 |
| javadoc(文档工具) | 生成Java程序的HTML格式文档 | 源代码文件或包名 | -author(显示作者信息)、-version(显示版本信息)、–d(指定文档输出文件夹) | 生成HTML文档网页 |

通过这个表格,开发者可以快速根据自己的需求选择合适的工具,并了解每个工具的常用选项。

实际应用案例

下面通过一个简单的实际应用案例,展示如何综合使用这些工具来完成一个Java项目的开发、编译、运行和文档生成。

假设我们要开发一个简单的图书管理系统,包含两个类: Book 类用于表示图书信息, Library 类用于管理图书列表。

1. 编写源代码

首先,创建 Book.java 文件:

/**
 * 这个类表示一本图书,包含图书的名称、作者和ISBN。
 * @author John Doe
 * @version 1.0
 */
public class Book {
    /**
     * @serial 图书的名称
     */
    private String title;
    /**
     * @serial 图书的作者
     */
    private String author;
    /**
     * @serial 图书的ISBN
     */
    private String isbn;

    /**
     * 构造函数,初始化图书信息。
     * @param title 图书名称
     * @param author 图书作者
     * @param isbn 图书ISBN
     */
    public Book(String title, String author, String isbn) {
        this.title = title;
        this.author = author;
        this.isbn = isbn;
    }

    /**
     * 获取图书名称。
     * @return 图书名称
     */
    public String getTitle() {
        return title;
    }

    /**
     * 获取图书作者。
     * @return 图书作者
     */
    public String getAuthor() {
        return author;
    }

    /**
     * 获取图书ISBN。
     * @return 图书ISBN
     */
    public String getIsbn() {
        return isbn;
    }
}

然后,创建 Library.java 文件:

import java.util.ArrayList;
import java.util.List;

/**
 * 这个类表示一个图书馆,用于管理图书列表。
 * @author John Doe
 * @version 1.0
 */
public class Library {
    /**
     * @serial 图书馆中的图书列表
     */
    private List<Book> books;

    /**
     * 构造函数,初始化图书列表。
     */
    public Library() {
        books = new ArrayList<>();
    }

    /**
     * 添加一本图书到图书馆。
     * @param book 要添加的图书
     */
    public void addBook(Book book) {
        books.add(book);
    }

    /**
     * 获取图书馆中的所有图书。
     * @return 图书列表
     */
    public List<Book> getBooks() {
        return books;
    }

    public static void main(String[] args) {
        Library library = new Library();
        Book book1 = new Book("Java Programming", "Jane Smith", "123456789");
        library.addBook(book1);
        System.out.println("Library has " + library.getBooks().size() + " books.");
    }
}
2. 编译源代码

使用 javac 编译器编译这两个文件:

javac Book.java Library.java

如果要编译时显示已弃用方法信息,可以使用 –deprecation 选项:

javac –deprecation Book.java Library.java
3. 运行程序

使用 java 解释器运行 Library 类:

java Library

如果程序中使用了断言,并且要启用断言功能,可以使用 -ea 选项:

java -ea Library
4. 生成文档

使用 javadoc 工具为这个项目生成文档:

javadoc -author -version -d C:\LibraryDocs\ Book.java Library.java

然后在浏览器中打开生成的 index.html 文件,就可以查看详细的文档信息。

开发流程优化建议

在实际的Java开发过程中,为了提高开发效率和代码质量,可以遵循以下开发流程优化建议:
1. 代码编写阶段
- 养成良好的代码注释习惯,使用 javadoc 风格的注释,方便后续生成详细的文档。
- 合理设计类和方法,尽量遵循单一职责原则,提高代码的可维护性。
2. 编译阶段
- 定期使用 –deprecation 选项编译代码,及时发现并更新已弃用的方法。
- 在开发环境中使用 -g 选项添加调试信息,方便后续调试。
3. 运行和测试阶段
- 对于复杂的程序,使用 -ea 选项启用断言功能,帮助发现潜在的逻辑错误。
- 编写单元测试用例,使用测试框架(如JUnit)对代码进行全面测试。
4. 文档生成阶段
- 每次代码更新后,及时使用 javadoc 工具生成最新的文档,保持文档的准确性。

未来发展趋势

随着Java技术的不断发展,Java 2 SDK也在不断更新和完善。未来可能会有以下发展趋势:
1. 性能优化 :编译器和解释器会不断优化,提供更高效的代码执行方式,减少内存占用和执行时间。
2. 跨平台支持 :进一步加强在不同操作系统和硬件平台上的兼容性,方便开发者在各种环境下进行开发。
3. 集成开发环境(IDE) :SDK与IDE的集成会更加紧密,提供更便捷的开发体验,例如在IDE中直接调用SDK工具。
4. 新特性支持 :随着Java语言的发展,SDK会及时支持新的语言特性,如Lambda表达式、Stream API等。

总之,Java 2 SDK作为Java开发的重要工具包,在未来的软件开发中仍将发挥重要作用。开发者需要不断学习和掌握这些工具的使用,以适应不断变化的技术环境,提高自己的开发能力和竞争力。通过合理运用Java 2 SDK的各种工具和功能,能够开发出更可靠、更高效的Java程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值