现在在 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 环境变量中,该变量是分号分隔的 JAR 文件列表,以及 Java 编译器和 Java 虚拟机(Java virtual machine,JVM)用来寻找需要加载的类的目录列表。
访问修饰符
访问修饰符 public 、 private 和 protected 在两种语言中的工作方式大部分都是相同的。 在 Visual Basic .NET 中,默认的访问修饰符是 Friend 。在 Java 语言中,默认的访问权限是允许任何子类或相同包中的任何类访问当前类、字段或方法。这大致等价于 Visual Basic .NET 中的 Protected Friend 修饰符,该修饰符仅允许从相同程序集或从子类访问。
方法重载
Visual Basic .NET 中的子类如果要重载父内中的某个方法:
该方法一定 不 能在父类中使用 private 访问修饰符来声明。
该方法必须在父类中声明为 Overridable 。
子类中的方法必须与父类中的对应方法具有相同的名称、返回类型和参数签名。
子类中的方法必须使用 Overrides 关键字来声明。(您也可以使用 new 关键字,但是一般不推荐这样做。)
父类中的方法一定 不 能声明为 NotOverridable 。
Java 语言中方法重载的前提条件不太严格:
该方法一定 不 能在父类中使用 private 访问修饰符来声明。
子类中的方法必须与父类中的对应方法具有相同的名称、返回类型和参数签名。
父类中的方法一定 不 能声明为 final 。
这些区别的含义是,在 Java 代码中,子类中不可能包含与父类中的非私有方法具有相同名称和签名的方法而不会隐含地重载它。在 Visual Basic .NET 中,您必须显式地指明何时想要重载父类中的方法。还要注意,Java 语言中的 final 关键字或多或少地等价于 Visual Basic .NET 中的 NotOverridable 关键字。
异常处理
结构化的异常处理在两种语言中几乎完全相同。(两者都可以往后追溯到一份创始性的论文,即 Andrew Koenig 和 Bjarne Stroustrup 于 1990 年撰写的 Exception Handling for C++。) 两种语言都使用两种异常概念:应用程序生成的异常,以及系统运行库(Visual Basic .NET 的公共语言运行库,Java 语言的 JVM)生成的异常。 两种语言都具有 Exception 基类,应用程序异常和系统异常都是由它派生而来的。图 2 显示了每种语言中的 Exception 类层次。
图2. Java 语言和 Visual Basic .NET 中的 Exception 类
¥299.00
¥498.00
¥399.00
¥29.00