然而,两种语言的编译器对您的代码如何处理异常具有不同的预期。在 Visual Basic .NET 中,您可以选择捕获异常,或让它们沿调用堆栈向上传播到类的方法的调用者(和/或构造函数)。java 语言允许同样的处理,但是对于未捕获的应用程序异常(也就是 java.lang.Exception 的子类),您必须显式地将它们作为方法声明的一部分来列出。因此 Java 编译器预期您或者自己捕获所有应用程序异常,或者告诉编译器关于未捕获的异常的信息。例如,假设 Foo 类的构造函数可能抛出一个应用程序异常,那么清单 6 中的 Visual Basic .NET 或 Java 代码对各自的编译器来说都不会有问题。
清单 6. 处理应用程序异常
Visual Basic .NET Java
... ...
Sub SomeMethod() public void someMethod() {
Try try {
Dim Foo X As New Foo() Foo x = new Foo();
}
Catch e As applicationException catch (Exception e)
{
... ...
End Try }
End Sub }
然而,如果改变代码以使其不捕获异常,那么您就必须改变 Java 方法声明(如清单 7 所示)以避免编译器错误。
清单 7. 未捕获的应用程序异常
Visual Basic .NET Java
... ...
Sub SomeMethod() public void someMethod() throws Exception {
Dim Foo X As New Foo(); Foo x = new Foo();
End Sub }
两种语言在这方面存在的另一个区别在于,在 Visual Basic .NET 中,每个捕获块的参数是可选的。如果省略它,那么所有异常都会被捕获。Java 语言不允许这样,而是允许一个等价功能( java.lang.Throwable ),它捕获所有异常类的父类,如清单 8 所示。
清单 8. 捕获所有异常
Visual Basic .NET Java
... ...
Sub SomeMethod() public void someMethod() {
Try try {
Dim Foo X As New Foo() Foo x = new Foo();
}
Catch catch (Throwable e)
{
... ...
End Try }
数组声明
Java 语言提供两种声明数组的方法;Visual Basic .NET 仅提供了一种方法。Java 数组工作起来很像 Visual Basic .NET 中的动态数组:必须通过一个显式的步骤来给它分配内存。清单 9 中的代码说明了这个区别。与在 Visual Basic .NET 中一样,Java 数组的下标从 0 开始。
清单 9. 声明数组
Visual Basic .NET Java
... ...
' This is how an array is // In Java the following
'declared in Visual Basic .NET // are both allowed
Dim MyArray() As Integer private int[] myArray;
// or
private int myArray[];
'Allocate some storage for the array // Allocate some storage
// for the array
ReDim MyArray(30) myArray = new int[30];
委托
Java 语言没有直接等价于 Visual Basic .NET 委托的结构。可以通过声明并实现一个具有单个方法定义的接口来模拟委托功能。
¥399.00
¥498.00
¥29.00
¥299.00