Visual J# .NET 入门






2.75/5 (7投票s)
概述微软最新的 Java 语言工具。
引言
微软发布了 JUMP 计划的一项重要内容:Visual J# .NET。这是一套面向希望使用 Java 语言语法进行开发的新工具。“Java 语言语法”是这里的重点。它不是 Java — 它是 J#。
Visual J# .NET Beta 1 可在此处下载:这里。
Visual J# .NET Beta 1 已完全集成到 Visual Studio .NET Beta 2 中。它可用于开发 .NET 的应用程序、类库和 Web 服务,并且与其他 .NET 语言一样,以 .NET CLR 为目标,并使用基类库。此外,J# 还包含其他一流语言的特性,例如跨语言集成、安全性、版本控制和部署以及调试和性能分析支持。J# 的文档指出,即使您的计算机上未安装 Visual J# .NET,您仍然可以调试 Java 语言应用程序。
新工具包括
- J# 编译器,用于将您的 Java 语言源代码转换为 MSIL
- 一个转换器,用于将 Java 语言字节码转换为 MSIL(jbimp.exe)
- 类库,提供 Visual J++ 6.0 中包含的一些 JDK 1.1.4 包的功能
- WFC 和许多 com.ms.* 包(com.ms.lang, com.ms.dll, com.ms.com, com.ms.win32)
微软在 Java — Sun 的商标技术 — 和 Java 语言语法之间做出了非常明确的区分。包含 J# 语言的文件将具有扩展名 .jsl。 这种区分很重要,因为 Visual J# .NET 不 包含以下功能
- 创建 .class 字节码文件的能力
- 为浏览器开发 Java Applet 的能力
- 创建可在 JVM 中运行的应用程序的能力。
- 不支持 Java Native Interface 或 Remote Method Invocation
- 支持 sun.io.*, sun.net.* 和 netscape.* 包
升级 Visual J++ 6.0 项目。
要将 Visual J++ 6.0 项目升级到 Visual J# .NET,只需在 Visual Studio .NET IDE 中打开 VJ++ 项目,系统就会提示您进行升级。将为您的 J# 项目创建一个新的解决方案文件(.jshproj)。
升级会涉及一些问题,例如不支持生成前/后步骤,版本信息现在存储在程序集中,以及 VJ++ 6.0 的 CLASSPATH 功能不受支持。
Visual J# 不支持的 .NET 功能
Java 已与 C# 进行了广泛比较,但一旦您熟悉了其熟悉的语法,就会发现它们之间存在显著差异(请参阅C# 比较概述)。Visual J# 不 支持以下功能
- 用于定义属性、事件、值类型和委托的语法支持
- 用于使用属性和事件的语法。
- 运算符重载
- 使用 op_Implicit 和 op_Explicit 转换运算符在类型之间进行隐式和显式转换。
- Java 语言数据类型与 .NET Framework 数据类型之间的无缝强制转换。
CodeDOM 和 Visual J#
Visual J# 支持 .NET CodeDOM。CodeDOM,即 Code Document Object Model,提供了一种描述源代码结构的方式,该结构可以以多种语言呈现。它用于 ASP.NET 以呈现 HTML 页面、XML Web 服务代理、代码向导、设计器等,或用于动态编译。
COM 互操作和将 J# 组件公开给 COM
COM 互操作的支持方式与 Visual J++ 中基本相同(即,使用 JActiveX 工具),并且通过使用 .NET SDK 附带的 RegAsm 工具可以从非托管客户端使用 J# 组件。有关更多信息,请参阅在线文档。
Hello, World
显然,任何关于 J# 的入门文章都离不开 HelloWorld。代码与使用 C# 或 VB.NET 编写的代码非常相似,尽管存在足够的差异,可以清楚地表明这既不是 C# 也不是 VB.NET。
package WindowsApplication1; import System.Drawing.*; import System.Collections.*; import System.ComponentModel.*; import System.Windows.Forms.*; import System.Data.*; // Summary description for Form1. public class Form1 extends System.Windows.Forms.Form { private System.Windows.Forms.Button button1; // Required designer variable. private System.ComponentModel.Container components = null; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } // Clean up any resources being used. protected void Dispose(boolean disposing) { if (disposing) { if (components != null) { components.Dispose(); } } super.Dispose(disposing); } #region Windows Form Designer generated code // Required method for Designer support - do not modify // the contents of this method with the code editor. private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // button1 // this.button1.set_Location(new System.Drawing.Point(((int)96), ((int)32))); this.button1.set_Name("button1"); this.button1.set_TabIndex(((int)0)); this.button1.set_Text("Click Me!"); this.button1.add_Click( new System.EventHandler(this.button1_Click) ); // // Form1 // this.set_AutoScaleBaseSize(new System.Drawing.Size(((int)5), ((int)13))); this.set_ClientSize(new System.Drawing.Size(((int)272), ((int)93))); this.get_Controls().AddRange(new System.Windows.Forms.Control[] {this.button1}); this.set_Name("Form1"); this.set_Text("HelloWorld"); this.ResumeLayout(false); } #endregion // The main entry point for the application. /** @attribute System.STAThreadAttribute() */ public static void main(String[] args) { Application.Run(new Form1()); } private void button1_Click (System.Object sender, System.EventArgs e) { System.Windows.Forms.MessageBox.Show("Hello, World!"); } }
Visual J# .NET
Visual J# .NET 的设计宗旨是让开发人员能够尽可能无痛地从 Visual J++ 迁移到 J#。文档指出:“唯一新增的语法扩展是用于使用无符号字节的关键字 ubyte 和 @attribute 指令,后者可用于将自定义属性附加到生成的元数据。”
Visual J# .NET 允许开发人员使用 Java 语言语法编写完全托管的 .NET 应用程序,并将现有的 Java 语言应用程序迁移到 .NET,但对于开发 .NET 应用程序而言,这并不是首选语言。J# 是 RAD(快速应用程序开发)的,完全托管,并且包含 CodeDOM 支持,使其适用于 ASP.NET 和设计器(与当前版本的 Managed C++ 不同),但它缺乏对重要 .NET 功能的支持,如属性、值类型、委托和事件(与 MC++ 和 C# 不同)。
即便如此,随着 .NET 允许跨语言互操作和 COM 互操作,J# 将使希望迁移到 .NET 的 Java 开发人员能够保留其大部分遗留 Java 语言代码,同时继续 .NET 开发。