WEB开发网
开发学院软件开发Java 走上开放之路: Windows 开发人员的 Java Web 支持... 阅读

走上开放之路: Windows 开发人员的 Java Web 支持基础(上)

 2009-11-08 00:00:00 来源:WEB开发网   
核心提示:本文是走上开放之路系列文章的第二部分,这个系列一共包括三部分,走上开放之路: Windows 开发人员的 Java Web 支持基础(上),目的是帮助 .NET、Windows 客户机-服务器以及 ASP 开发人员快速转换到 Java 平台上,在走上开放之路系列文章中,这些新类可以对所继承的类进行扩展,也可以重载所继承

本文是走上开放之路系列文章的第二部分。这个系列一共包括三部分,目的是帮助 .NET、Windows 客户机-服务器以及 ASP 开发人员快速转换到 Java 平台上。在走上开放之路系列文章中,作者将帮助您充分利用现有的开发知识,简化您通往基于开放标准的编程之路。对于那些使用 Visual Basic 6 或 C++,而对 Java 语言或 J2EE 技术并不熟悉,但却对在基于 Java 和 J2EE 的 Web 应用程序中支持 Web 的 Windows 客户机-服务器的应用程序非常感兴趣的 Windows 开发人员来说,高级软件工程师 Mark Weber 和高级电子商务体系结构师 David Carew 为他们指出了一条道路,并帮助他们了解由 IBM 或其他地方提供的最有用的一些工具、技术以及在线资料。您可以在相应的论坛中与作者或其他读者分享您对这些文章的想法。

您需要对现有的 Windows 客户机-服务器应用程序或应用程序组件提供 Web 访问权限吗?您曾经考虑过将这些应用程序部署成基于 Java 技术或基于 J2EE 技术的 Web 应用吗?如果您曾经这样考虑过,那么这份指南就可以引您入门。本文重点阐述如何将现有的 Windows 客户机-服务器的应用程序和应用程序组件移植到 Java 和 J2EE 平台上,并着重介绍为了实现这个目的所采用的一些工具、技术和体系结构方法。在对 Java 技术进行简要介绍之后,我们会向您介绍更多一些资源,这些资源可以帮助您学习 Java 语言和 J2EE 技术、将 Windows 应用程序和应用程序组件集成到 Java 和 J2EE 应用程序中,并对这些应用程序提供 Web 访问权限。我们还会向您介绍一些集成应用所需要的部署环境,包括 IBM WebSphere 系列产品。

为什么要使用 Java 技术来实现 Web 支持?

Java 平台既是一种应用程序编程语言,又是一个执行环境。它在语法上类似 C++,并具有类似 SmallTalk 的执行环境。Sun Microsystems 在 1994 年首次发布了 Java 语言,Internet 浏览器的广泛应用使得 Java 语言非常流行。现在业界对于 Java 语言的认可已经非常普遍。计算机和软件供应商以及数百家商业公司都已经对 Java 技术非常认可。

Java 语言是一种简单易用的面向对象语言,它是基于上一代面向对象编程语言(SmallTalk 和 C++)最好的一些特性而开发出来的。Java 语言与体系结构无关,具有良好的可移植性、安全性、稳定性,它是一种分布式的、解释性的动态语言,对于目标应用程序来说性能很高。Java 还语言包括一个完整的应用程序执行环境。这些特性综合作用形成以下三个主要的优点:

Java 语言在源代码和二进制文件两个层次上都是与平台无关的;您只需编写一次 Java 代码就可以在任何地方运行这些代码。

Java 语言的面向对象的基本特性可以大力支持重用,并能让您构建现代的应用程序和组件。

Java 语言的标准 API 集可以让您将应用程序部署到由多个不同供应商所提供的执行环境中。

J2EE 的优点

J2EE 是分布式企业级的 Java 应用程序平台。J2EE 的标准环境可以让您分布式地部署应用并重用应用程序组件。J2EE 中基于组件的现代应用程序体系结构可以大力倡导代码的重用,简化应用程序及组件的开发与维护,为部署提供充分的灵活性,允许使用负载均衡和分布组件提高性能,并为应用程序提供更高的可扩展性。

由于 J2EE 的基础是 Java 技术,而 J2EE 本身就是一种标准,因此它具有良好的可移植性。很多 J2EE 的服务器、供应商以及组件都遵循 J2EE 开放标准,这样就为您的开发和部署环境提供了一种选择。Java 和 J2EE 应用程序都是面向网络的,而且是分布式的,这一特性可以允许您编写基于 Web 的瘦客户机应用程序。与原来的 Windows 应用程序或 Windows 客户机-服务器应用程序相比,这种体系结构提供了很多优点,其中包括:

对 Web 浏览器、各种移动计算设备以及其他应用程序提供统一的访问程序的方法

使用完整的 Java 客户机程序访问相同的应用程序可以获得更丰富的交互性和外观

升级应用程序到新版本非常容易,因为终端用户不需要更新或安装任何代码

可以与采用 Java 语言或 J2EE 应用的现代组件的外部应用程序很好地集成,这样可以提高重用性以及应用程序的灵活性

Java 编程基础

在我们潜心研究为应用程序增加 Web 功能之前,首先请您深入了解一下 Java 编程语言。使用 Java 语言,您既可以编写服务器端的应用程序,也可以编写具有 GUI 的客户机应用程序。本文假设您希望使用 Java 语言在服务器端实现一个基于 Web 的界面,因此我们就忽略 GUI 编程环境,并着重介绍 Java 平台非可视化的部分。我们首先简要介绍一下 Java 软件开发包(SDK),然后向您介绍一下如何使用 Java 语言编写一个久负盛名的“Hello World”程序。接下来,我们向您揭示 Visual Basic 6 与 Java 语言之间的区别。

Java SDK

Java SDK 是您在编写和运行 Java 程序时所需要的一组命令行工具和包。Java 程序会首先使用 JIT 编译器编译成一个与平台无关的字节码,然后这个字节码会在运行时再被编译成专用的代码。最重要的工具是 Java 编译器(javac.exe)和 Java 解释器(java.exe),后者用来运行 Java 程序。SDK 还包括一些基本的类(称为 Java 平台),这些类提供了您开始编写应用程序所需要的基本功能和 API.

Sun Microsystems 已经为它的 5 个主要的 Java 平台发行版各自发布发布了一个 SDK。对于本文来说,我们建议您下载最新的 SDK(Java 1.4.2)。Java SDK 是免费的。如果您现在还没有 SDK,可以立即去下载。

您可以参考 Java 2 标准版(J2SE)API 的在线文档。这些资料是一些 HTML 文档,您可以使用标准的 Web 浏览器进行查看。API 文档是一份必备的参考手册,您可能会频繁地使用这份手册。

Java SDK 基本步骤

使用可以支持长文件名的文本编辑器用普通的 ASCII 码格式编写源代码。

将源代码保存为一个扩展名为 .java 的文件。

所有的 Java 关键字都是小写的。对于变量名和方法名来说,您可以任意使用大小写,但是在一个类中使用时必须保持一致。

在一个命令行提示符中使用 javac 编译器对程序进行编译,javac 是 SDK 中提供的。此时通常应该指定 .java 扩展名。

在命令行提示符中使用随 SDK 一起提供的 Java 解释器运行 Java 程序。此时 不要指定 .class 扩展名。

如果需要,就对代码进行调试。在编译或运行 Java 程序时,可能会出现错误。

安装 SDK

下载 SDK 之后,您需要将其安装到自己的机器上。安装过程非常简单明了。如果在安装过程中提示您选择“典型安装”或“定制安装”,那么您可以选择“典型安装”。(只有当您清楚地了解自己要做什么,并且知道自己不想向机器上安装什么内容时,才应该选择“定制安装”。)安装程序通常会让您选择将标准的 Java 平台类的源代码也安装到机器上。如果您的机器上有足够的磁盘空间,我们建议您接受这个选项。这些文件可以提供一个机会,让您了解构成 Java 语言和标准的 API 的类是如何实现的。这些类的设计和实现通常都非常精巧,您可以从中学到很多知识。

当您安装好 SDK 之后,可能需要对其进行配置,这样才能在您的系统中正确使用。应该如何配置 SDK 取决于您的操作系统和正在使用的 SDK 的版本。SDK 中包括了完整的安装和配置提示。

第一个 Java 程序

现在,您可以编写自己的第一个 Java 程序了—— 也就是闻名于世的“Hello World”。打开您的文本编辑器,然后输入清单1 中的源代码。


清单 1. Hello World 程序
public class HelloWorld { 
  public static void main(String[] args) { 
   System.out.println("Hello World"); 
  } 
} 

Java 语言是大小写敏感的,而诸如 class 和 public 之类的关键字通常都是小写。对于您自己的变量名和方法名,您可以任意使用大小写,只要在一个类中使用时保持一致即可。当您输入完源代码时,将这些代码保存到一个 HelloWorld.java 文件中。当源代码被保存为这个文件时,我们没有任何选择。Java 源代码使用一个 .java 扩展名,每个 Java 源代码文件的文件名都 必须 与该文件中定义的类同名。我们无论怎么重申这一点都不过分:大小写非常重要,因此诸如 HELLOWORLD.JAVA 和 Helloworld.java 之类的文件名都会导致一个编译错误。您可以将 HelloWorld.java 保存到机器中的任何目录中。但是您在使用命令行工具时,需要进入这个目录,因此应该确保文件保存的位置比较方便。

编译程序

现在您已经准备好编译 HelloWorld 程序了。随 SDK 一起提供的 Java 编译器是一个名为 javac.exe 的命令行程序。要编译一个 Java 源代码文件,您可以简单地向 javac.exe 程序传递一个名为 .java 的文件。要编译 HelloWorld 程序,请打开一个命令行提示符,然后将当前目录切换到您刚才将 HelloWorld.java 保存到的目录中。接下来执行下面的命令:

javac HelloWorld.java 

与 Visual Basic 的编译器类似,Java 编译器可能会产生很多错误。通常,在 Java 编译器成功编译 HelloWorld 程序之前,您需要首先改正这些错误。一次成功的编译会生成一个名为 HelloWorld.class 的文件。这个文件代表您要在 Java 解释器中运行的可执行文件。

运行程序

与 SDK 一起提供的 Java 解释器是一个名为 java.exe 的命令行程序。要运行一个 Java 字节码可执行程序,您可以简单地向 Java 解释器传递一个 Java 程序名。当您使用 Java 解释器时,请不要指定 .class 扩展名。解释器只希望接受类文件,因此如果添加上 .class 扩展名会导致产生错误。要运行您的 HelloWorld 程序,请打开一个命令行提示符,然后将当前目录切换到您刚才编译 HelloWorld.java 文件所在的地方。您的字节码可执行文件 HelloWorld.class 应该就在这个目录中。然后,执行下面的命令:

java HelloWorld 

Java 解释器试图执行 HelloWorld 程序的 main() 方法。返回类型为 void 的 Java 方法等价于 Visual Basic 中的 Sub 。返回其他类型的 Java 方法等价于 Visual Basic 中的 Function 。

Java 解释器可能会报告一个运行时错误,这通常会中断程序的执行。像在 Visual Basic 中一样,Java 运行时错误比编译时错误更难调试,但是出现的频率也比后者少。当运行时错误发生时,您可以从容地处理这些错误,因为 Java 程序是在一个受控的环境中执行的,这样可以减少那些“肆意运行的代码”导致整台机器崩溃的可能性。

非常感谢 Scott Stricker 对于本节和下一节的贡献,这两节中的内容改编自他编写的指南“Java programming for C/C++ developers” 。

Visual Basic 角度的 Java 101

现在,您对 Java 代码的大概样子以及应该如何在您的测试机器上编译并运行 Java 程序有了一个基本的概念,已经准备好开始深入了解 Java 语言的结构和语法了,包括 Java 编程环境和 Java 中标准的数据类型。由于您已经对 Visual Basic 中的编程非常熟悉,因此我们将通过对 Java 和 Visual Basic 进行比较来学习 Java 编程的知识。我们将通过对 Java 平台上的基本组件与 Visual Basic 编程框架中相应组件的对应关系及其区别对 Java 平台上的基本组件进行介绍。如果您是一个 C/C++ 程序员,就可以跳过本节,转而参考免费的 developerWorks中的“ Java programming for C/C++ developers”指南。

Visual Basic 执行环境

Visual Basic 是一种高级编程语言;其目的是简化人类开发计算机程序的过程。计算机并不能理解高级语言;它们只能理解低级的机器语言——即可以直接在计算机的处理器上执行的二进制指令序列。出于这个原因,使用高级语言编写的程序在计算机上运行之前必须被转换成机器语言的程序——即可执行程序。不同的计算机使用的机器语言也不同。在一台计算机上可以运行的可执行程序在其他使用不同机器语言的机器上可能无法运行。

将高级编程语言的可执行程序转换成机器语言的可执行程序有两种方法:编译和解释。编译是将使用高级语言编写的程序全部转换成一个完整的机器语言程序,后者就完全可以执行了。解释是将一个高级程序逐行转换成机器指令;每一行指令都是在下一行指令之前被翻译并执行的。编译和解释在逻辑上是等价的,但是编译后的程序的执行速度比解释后的程序速度更快。Visual Basic 程序使用一个称为编译器的程序编译成机器语言可执行程序。

Java 执行环境

与 Visual Basic 程序一样,Java 程序也会被编译。但是 Java 程序有一点与 Visual Basic 程序不同:Java 程序并不会被编译成与平台相关的机器语言。相反,Java 程序被编译成一种与平台无关的语言,称为 字节码。虽然字节码与机器语言非常类似,但是字节码并不是被设计用来在真正的物理机器上运行的。相反,它被设计用来通过一个名为 Java 虚拟机(JVM)的程序运行,JVM 模拟了一台真正的机器。

简单来说,JVM 是一个解释器,负责将 Java 字节码转换成真正的机器语言指令,后者可以在底层的物理机器上执行。更具体一点说,术语 Java 虚拟机通常就用来表示执行 Java 类文件的任何程序。Java 解释器程序 java.exe 就是 JVM 的一个特定实现。

Java 平台使用虚拟机器层来确保使用 Java 语言编写的程序是与平台无关的。Java 程序一旦被编译成字节码之后,就可以在具有 JVM 的任何系统上运行。这些系统包括 UNIX、Linux、Windows 以及其他很多系统。使用其他语言编写的程序必须对每一种要在其上执行的平台都重新进行编译,而 Java 程序只需要编译一次即可。

数据类型

Java 语言有两种不同类型的数据:类定义(或将其作为 SDK 或第三方类库的一部分使用)和“原始的”(primitive)类型( boolean , char , byte , short , int , long , float 和 double ),Java 运行库可以直接理解后者。大部分 Java 原始类型在 Visual Basic 中都有等价的类型,用户定义的类与 Visual Basic 中的类大部分都非常相似。表 1 列出了 Java 语言中的原始数据类型及其在 Visual Basic 中等价的类型。

表 1. Java 语言的原始数据类型及其在 Visual Basic 中对应的数据类型

Java 原始类型 范围 Visual Basic 类型 说明
booleantrue, falseBooleanbooleans 类型的合法值只有 true 和 false 。
char0 - 65535String (长度为 1) Java 语言使用 Unicode 对字符进行编码。
byte8位整数(有符号)Byte?
short16位整数(有符号)Integer?
int32位整数(有符号)Long?
long64位整数(有符号)N/A?
float32位浮点数Single?
double64位浮点数Double?
N/A?VariantJava 语言没有 Variant 类型。
N/A?DateJava 语言没有对应的原始数据类型。您可以使用 Date 类。
N/A?CurrencyJava 语言没有对应的原始数据类型。您可以使用 BigDecimal 类。

清单 2 给出了在两种语言中声明原始数据类型的一些例子。


清单 2. 声明原始数据类型
  Visual Basic                Java 
Option Explicit                 // Note that all Java 
Dim LetterJ As String, I As Integer, x As Byte  // variables must be declared 
Dim Point1 As Single, Point2 As Double      // before they can be used 
Dim IsEmpty As Boolean               char letterJ = 'j'; 
LetterJ = "j"                   int i = 0; 
I = 0                       byte x = 12 
X = 12                       boolean isEmpty = false; 
IsEmpty = False                  float point1 = 1.1F; 
Point1 = 1.1                    double point2 = 0.0025; 
Point2 = 0.0025 
    

操作符

在 Visual Basic 和 Java 语言中,操作符具有很多共同点,也有很多关键的区别。Java 语言使用的操作符集与 C 和 C++ 使用的操作符集完全相同。表 2 类出了在这两种语言中最常使用的一些操作符。


表 2. Visual Basic 和 Java 语言中的操作符

Java 操作符 说明 用法 Visual basic 操作符 说明
++自增++num
num++
N/A这个一元操作符允许对一个非浮点数字执行自增运算。
--自减--num
num--
N/A这个一元操作符允许对一个非浮点数字执行自减运算。
*
/

num * num
num / num
*
/
?
/整除num/num\Java 语言对于整除和数学除使用同样的操作符。如果操作符是整数,那么就执行整除运算。
%取模num % numMod?
+
-

num + num
num - num
+
-
?
+字符串拼接str + str&?
<
<=
Less小于 than
Less 小于或等于than or equal
expr < expr
expr <= expr
<
<=
?
>
>=
大于
大于或等于
expr > expr
expr >= expr
>
>=
?
!=不等于expr != expr<>?
==等于(基本类型)expr == expr=?
==等于(对象)obj == objIs?
!逻辑非!booleanNotVisual Basic 对整数执行的位反和对布尔表达式所执行的逻辑非运算使用相同的操作符,而 Java 则不是。
~位非~intNot?
&位 AND
布尔 AND
int & int
expr & expr
And?
|位 OR
布尔 OR
int | int
expr | expr
Or?
^位 XOR
布尔 XOR
int ^ int
expr ^ expr
Xor?
&&条件 ANDif (expr &&expr)...AndJava 语言对条件与和逻辑布尔与使用不同的操作符。
||条件 ORif (expr || expr) ...OrJava 语言对条件或和逻辑布尔或使用不同的操作符。
N/A模式匹配str Like patternLike您可以使用 Java 中 String 对象的方法来实现 Visual Basic 中这个操作符的功能。

Visual Basic 的函数和子过程与 Java 方法的比较

在 Visual Basic 中您可以定义函数和子过程。函数与子过程之间的主要区别是子过程没有返回值,而函数有返回值。在 Java 术语中,函数被称为 方法 。Java 语言中没有与 Visual Basic 中的子过程等价的概念。然而,在 Java 语言中,您可以使用关键字 void 定义一个没有返回值的方法,这基本上就等价于一个子过程。您可以将 Java 方法声明为类的成员;但是不能在一个 Java 类之外定义方法。清单 3 给出了一个具有返回值的 Java 方法和一个没有返回值的 Java 方法。


清单 3. Java 方法的返回类型
 public class MyClass { 
 
 // This method doesn't return a value 
  public void myMethod1(String arg) { 
    ... 
  } 
   
   
 // This method returns an integer 
 
  public int myMethod2(String arg) { 
   int i; 
    
   ... 
    
   return i ;  
  } 


数组

在 Java 语言中,数组是具有很多属性的对象,其中最重要的是 length 属性,您可以使用这个属性来确定数组的大小。Java 数组通常是从 0 开始索引的,并且数组声明的大小中就包含了第 0 个元素。因此,大小为 100 的数组就意味着其有效的索引值是从 0 到 99。还有,方括号([ ])标记用来说明数组的类型,而不是数组名。Java 语言允许您将数组初始化为预设的一组值。清单 4 给出了一些例子。


清单 4. 数组
  Visual Basic           Java 
'An array with 100 integers      // An array of 100 integers 
Dim a(99) As Integer         int[] a = new int[100]; 
            
'An array of Strings initialized   // An array of Strings initialized 
b = Array("Tom","Dick", "Harry")   String[] b = {"Tom","Dick", "Harry"}; 
   
'Iterating through an array      // Iterating through an array of length 100 
' of length 100            int [] c = new int [100]; 
Dim c(99) As Integer         for (int i = 0; i <.length; i++) {  
For i=0 To UBound(c)           c[i] = i;        
  c(i) = i              }             
Next                  
    

字符串

Visual Basic 有一个 String 数据类型来表示字符串。您可以使用 String 类来表示 Java 中的字符串。Visual Basic 和 Java 中的字符串都可以表示成使用引号括起来的一系列字符。在 Java 语言中,您有两种方法可以创建一个 String 对象:您可以使用一个字符串声明,也可以使用一个 构造函数。 String 对象是不可变的,这就是说一旦您为一个 String 对象赋了一个初值,就不能再修改它了。换而言之,如果您希望修改一个 String 引用对象的值,就必须为这个引用分配一个新的 String 对象。由于 Java 中的字符串就是对象,因此您必须使用 String 类中定义的 接口才能与其进行交互。 String 类具有非常丰富的接口,其中提供了一些非常有用的方法。

清单 5 向我们展示了一些最常用的方法。请尝试编译并运行这个例子。记住将源文件命名为 StringTest.java,不要忘记文件名的大小写是非常重要的。


清单 5. Java 语言中的字符串
/* 
 * The StringTest class simply demonstrates 
 * how Java Strings are created and how 
 * String methods can be used to create 
 * new String objects. Notice that when you 
 * call a String method like toUpperCase() 
 * the original String is not modified. To 
 * actually change the value of the original 
 * String, you have to assign the new 
 * String back to the original reference. 
 */ 
public class StringTest { 
  public static void main(String[] args) { 
    String str1 = "Hi there"; 
    String str2 = new String("Hi there"); 
    // Display true if str1 and str2 have the value 
    System.out.println(str1.equals(str2)); 
    // A new uppercase version of str1 
    System.out.println(str1.toUpperCase());  
    // A new lowercase version of str2 
    System.out.println(str1.toLowerCase()); 
    System.out.println(str1.substring(1,4));  
    // A new version of str1 w/o any trailing whitespace chars 
    System.out.println(str1.trim());      
    // Display true if str1 start with "Hi" 
    System.out.println(str1.startsWith("Hi")); 
    // Display true if str1 ends with "there" 
    System.out.println(str1.endsWith("there")); 
    // Replace all i's with o's 
    System.out.println(str1.replace('i', 'o')); 
  } 
} 

main() 方法

要在命令行中作为应用程序运行的 Java 类必须定义一个 main() 方法才能运行。在 Java 代码中, main() 方法遵循一个严格的命名约定。您可以按照下面的方式声明 main() 方法:

public static void main(String[] args) 

注意: 您可以保留 public 和 static 修饰符,您也可以将 String 数组命名为任何您喜欢的名字。然而要记住上面的格式是常规的用法。并不是所有的类都需要一个 main() 方法 —— 只有那些从命令行中运行的程序才需要。一个典型的 Java 应用程序有一个具有 main() 方法的类和其他几个没有 main() 方法的支持类。

像 Java 这种面向对象的语言有助于促进类的重用。由于大部分程序员在自己的类中都使用非常简单的描述性名字(例如 Invoice 或 User ),因此在重用他人提供的资源时命名发生冲突的可能性就会很高。Java 语言通过让每一个类都属于一个 包 来解决这个问题。您可以同时使用不同包中的同名类。要将一个类与一个包关联在一起,您必须在类的源代码中的第一行就使用 package 语句进行声明。下面是一个例子:

package com.ibm.training; 

按照约定,您的包名的前缀要采用 Internet 域名反转的形式(例如 com.yourco.somepackage )。要使用其他包中的类,您有两种选择。第一种选择是使用该类的全名,其中包括包名。清单 6 给出了一个例子。


清单 6. 使用完整的类名
public class PackDemo1 { 
public static void main(String[] args) { 
  Java.util.Date today = new java.util.Date(); 
  System.out.println("The date is " + today); 
} 

另外一种方法是在源代码文件中对其他包中的类使用一个 import 语句。这样就不再需要全名了,如清单 7 所示。


清单 7. 使用 import 语句
import java.util.Date; 
public class PackDemo1 { 
public static void main(String[] args) { 
  Date today = new Date(); 
  System.out.println("The date is " + today); 
} 

您可以使用通配符来导入一个包中的所有类。如果您需要使用同一个包中的多个类,这种功能就会非常有用,如清单 8 所示。


清单 8. 使用带有通配符的 import 语句
import java.util.*; 
public class PackDemo1 { 
public static void main(String[] args) { 
  Date now = new Date(); 
  System.out.println("The date is " + today); 
} 

包的重用

在 Visual Basic 中,您可以先编写一些代码,并将其编译为动态链接库(DLL),所谓动态链接库就是文件系统中一个扩展名为 .dll 的文件。其他程序可以通过引用这些 DLL 来使用其中包含的代码。Java 语言还允许您将多个类文件打包成称为 Java 档案包(JAR)的文件,以便易于重用。具有 .jar 扩展名的文件是一种标准的压缩文件,可以使用 WinZip 或其他压缩工具进行维护。然而,为了方便起见,Java SDK 包含了一个名为 jar.exe 的工具(在 Windows 平台上),您可以使用这个工具将多个类打包到一个 .jar 文件中。

在我们向您介绍一个使用 jar.exe 工具的例子之前,重要的一点是您需要理解包名与 Java 平台用来构建类并在运行时装入类时所使用的目录结构有关。考虑一个名为 Test 的类,其源代码文件名为 Test.java。如果您将 Test.java 定义成包 com.mycompany.test 的一部分,那么编译器就为生成的 .class 模块创建一个目录树。这个目录树是根据包名生成的,在本例中这个目录树是 com\mycompany\test,其中包名中的小数点被转换为一级级的目录。

现在,请打开一个命令提示符,并创建一个目录(例如 c:\javapack)。然后将当前路径切换到该目录中( cd javapack ),并使用您喜欢的文本编辑器将清单 9 中的代码添加到一个名为 Test.java 的新文件中。


清单 9. 使用包的例子
package com.mycompany.test; 
public class Test 
{ 
  public static void main(String[] args) { 
    System.out.println("In test"); 
  } 
} 

现在,使用下面的命令编译 Test.java( -d 选项应该指向您刚才为本例创建的目录):

java -d c:\javapack Test.java 

现在在 c:\javapack 目录中应该已经有了一个名为 com 的子目录。实际上,您可以看到 comTest.class 文件的完整名,该文件是在对 Test.class 编译时产生的。注意包名( com.mycompany.test )如何被转换成相应的目录结构(com\mycompany\test),该目录结构相对于您刚才使用 -d 选项指定的目录。

现在,我们将向您展示 Test.class 如何才能更易于其他类重用。在 c:\javapack 目录中运行这个命令:

jar -cvf Test.jar com 

这个命令会创建一个文件,文件名为 Test.jar,其中包含了 com 子目录中的所有类。

运行下面这个命令,使用 Test.jar 文件中的类:

java -classpath Test.jar com.mycompany.test.Test 

注意您只能使用全名才能在命令行中运行这个命令,还要注意使用 -classpath 选项指向 Test.jar 的方法。另外,您可以将 Test.jar 文件加入 CLASSPATH 环境变量中, CLASSPATH 环境变量是一个使用冒号分割的列表,每一项的内容是 JAR 文件或目录,Java 编译器和 JVM 都会使用这个环境变量来查找要装载的类。

其他区别

我们已经了解了 Java 语言 与 Visual Basic 之间主要的一些语法区别,它们之间还有以下一些区别:

全局变量:与 Visual Basic 不同,Java 语言并不提供声明全局变量(或方法)的方法。

GoTo : 虽然 Java 语言保留了 goto 作为一个关键字,但是它并没有类似于一个 Visual Basic 用法的 Goto 语句。

自由放置变量:您根据需要可以在任何地方声明 Java 变量。您并不需要集中声明变量,但是在 Visual Basic 中必须如此。

继承:Visual Basic 并不会让您定义对其他类的功能进行扩展的类。Java 语言可以让您定义一个继承除超类私有成员之外的部分的类。这些新类可以对所继承的类进行扩展,也可以重载所继承的成员的一些行为。(在下一节中您将了解更多有关继承的内容。)

Tags:走上 开放 之路

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接