65.9K
CodeProject 正在变化。 阅读更多。
Home

Visual J# .NET 入门

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.75/5 (7投票s)

2001年10月7日

CPOL

4分钟阅读

viewsIcon

289083

downloadIcon

2

概述微软最新的 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 开发。

© . All rights reserved.