在 java 语言中,每种原始类型具有一个对应的包装类,可以使用它将该类型作为对象而不是作为原始类型来处理。每个包装类具有一个构造函数,允许您根据原始类型中的数据创建该包装类型的一个实例。在 Visual Basic .NET 中,您可以隐式地将对应的类型转换为 Object 的一个实例,因此不需要在这种情形下使用包装类。清单 2 中的例子突出了它们之间的区别。
清单 2. 原始类型和它们的包装类
Visual Basic .NET Java
Module Foo public class Foo
{
Sub someMethod(ByRef arg As Object) private void someMethod(Object arg) {
' do something with arg // do something with arg
end Sub }
Sub Main() public static void main(String[] args) {
Dim i = 0 As Integer int i=0;
Foo x = new Foo();
someMethod(i); x.someMethod(new Integer(i));
End Sub }
End Module }
清单 2 中的 Java 原始类型被显式地包装在 Object 的一个派生类中,而在 Visual Basic .NET 中,这种转换是隐式的。
注意在 Java 语言中,原始类型是按值传递的。对象实例内部地使用指针来表示,这些指针也是按值传递的(也就是指针的值,而不是指针所指向的内容)。在 Visual Basic .NET 中,默认的行为是值类型按值传递,引用类型按引用传递。Java 语言中没有等价于 Visual Basic .NET ByRef 和 ByVal 的关键字。表 2 显示了等价于 Visual Basic .NET 类型但是没有映射到 Java 原始类型的 Java 语言类型。
表 2 常用的 Java 系统类和它们在 Visual Basic .NET 中的等价类型
Java 类描述等价的 Visual Basic .NET 类描述
java.lang.Object任何非原始类型都是 Object 的派生类Object每种类型都是 Object 的派生类
java.lang.StringUnicode 字符StringUnicode 字符
java.math.BigDecimal可调整进位制的 32 位小数Decimal可调整进位制的 32 位小数
java.util.Date日期(排除时间部分)Date日期(排除时间部分)
Java 语言与 Visual Basic .NET 不同,它没有结构和模块。所有 Java 代码都必须是某个类或接口的一部分。如果要移植包含模块和结构的 Visual Basic .NET 代码,您必须将它们改写为 Java 类。
继承和接口
两种语言都仅允许单继承,但是都允许实现多个接口。这在两种语言中的实现方式有所不同。例如,清单 3 显示了如何从一个名为 Parent 的类派生子类并实现两个分别名为 IOne 和 ITwo 的接口。
清单 3 派生子类并实现接口
Visual Basic .NET Java
Public Class Child public class Child extends Parent implements IOne, ITwo
Inherits Parent {
Implements IOne ...
Implements ITwo }
...
End Class
在 Java 语言中, extends 关键字表示继承, implements 关键字表示实现一个或多个接口,接口之间用逗号分隔。
¥498.00
¥299.00
¥29.00
¥399.00