| // |
| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| // |
| |
| = NetBeans IDE 中的 JDK 7 支持概述 |
| :jbake-type: tutorial |
| :jbake-tags: tutorials |
| :jbake-status: published |
| :icons: font |
| :syntax: true |
| :source-highlighter: pygments |
| :toc: left |
| :toc-title: |
| :description: NetBeans IDE 中的 JDK 7 支持概述 - Apache NetBeans |
| :keywords: Apache NetBeans, Tutorials, NetBeans IDE 中的 JDK 7 支持概述 |
| |
| NetBeans IDE 支持 Java 7 语言功能,例如菱形运算符、switch 中的 String、multicatch 等。在代码中使用这些结构时,IDE 会识别它们,在代码完成中提供正确的类,正确突出显示错误并使您能够自动修复语法。因此,NetBeans IDE 可帮助您编写与 link:http://docs.oracle.com/javase/specs/jls/se7/html/index.html[+Java 语言规范 Java SE 7 Edition+] 兼容的代码。 |
| |
| 在本教程中,您将了解 IDE 如何处理 Java 7 语言结构。 |
| |
| |
| image::images/netbeans-stamp-80-74.png[title="此页上的内容适用于 NetBeans IDE 7.4 和 8.0"] |
| |
| |
| *要学完本教程,您需要具备下表所列的软件和资源。* |
| |
| |=== |
| |软件或资源 |要求的版本 |
| |
| |link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |版本 7.4 或 8.0 |
| |
| |link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java 开发工具包 (JDK)+] |版本 7 或 8 |
| |=== |
| |
| |
| == 确保在 NetBeans IDE 中注册 JDK 7 |
| |
| 要检查是否在 NetBeans IDE 中注册了 JDK 7,请执行以下操作: |
| |
| 1. 在 IDE 中,从主菜单中选择 "Tools"(工具)> "Java Platforms"(Java 平台)。 |
| 2. 确保在 "Java Platforms Manager"(Java 平台管理器)对话框的 "Platforms"(平台)列表中选定 "JDK 1.7"。 |
| |
| [.feature] |
| -- |
| |
| image::images/platform-small.png[role="left", link="images/platform.png"] |
| |
| -- |
| |
| |
| |
| . 单击 "Close"(关闭)。 |
| |
| |
| == 检查项目配置 |
| |
| 要检查您的项目是否配置为使用注册的 JDK 进行编译、运行和调试,请执行以下操作: |
| |
| 1. 通过选择 "File"(文件)> "New Project"(新建项目),然后选择 "Java Application"(Java 应用程序)作为项目类型,来创建 Java 项目。 |
| 2. 单击 "Next"(下一步)。 |
| 3. 键入 ``SwitchTest`` 作为项目名称并指定其位置。 |
| 4. 单击 "Finish"(完成)。 |
| 5. 在 "Projects"(项目)窗口中,右键单击 ``SwitchTest`` 项目节点,然后选择 "Properties"(属性)> "Libraries"(库)。在此标签上,确保在 "Java Platforms"(Java 平台)列表中选定 "JDK 1.7"。 |
| |
| [.feature] |
| -- |
| |
| image::images/props-libs-small.png[role="left", link="images/props-libs.png"] |
| |
| -- |
| |
| |
| |
| . 切换到 "Project Properties"(项目属性)窗口的 "Sources"(源)标签,并确保选择 "JDK 7" 作为源代码/二进制格式。 |
| |
| [.feature] |
| -- |
| |
| image::images/props-sources-small.png[role="left", link="images/props-sources.png"] |
| |
| -- |
| |
| |
| |
| . 单击“确定”。关闭“项目属性”对话框。您的项目配置为识别 Java 7 语言功能。 |
| |
| |
| == 使用新的 JDK 7 语言结构:Switch 语句 |
| |
| JDK 7 在不同领域提供了一些link:http://openjdk.java.net/projects/jdk7/features/[+新增功能和改进功能+],其中包括国际化、I/O 和网络、安全等。要说明 IDE 的 Java 编辑器提供的 JDK 7 支持,最好的方法是演示 Project Coin 引入的一些语言变化。 |
| |
| 其中一个变化是“switch 中的 String”。在早期版本的 Java 中, ``switch`` 的参数只能属于以下基本数据类型: ``byte`` 、 ``short`` 、 ``char`` 、 ``int`` 或 ``enum`` 。从 JDK 7 开始,您可以在 ``switch`` 语句的表达式中使用 ``String`` 类型的参数。 |
| |
| 1. 打开 ``SwitchTest.java`` ,并添加以下代码。该小样例显示几种颜色的 RGB 代码。 |
| 对于 JDK 7, ``color`` 变量可以为 ``String`` 。 |
| |
| [source,java] |
| ---- |
| |
| package switchtest; |
| |
| public class SwitchTest { |
| |
| public static void main(String[] args) { |
| |
| String color = "red"; |
| String colorRGB; |
| switch (color.toLowerCase()) { |
| case "black": colorRGB = "000000"; break; |
| case "red": colorRGB = "ff0000"; break; |
| case "green": colorRGB = "008000"; break; |
| case "blue": colorRGB = "0000ff"; break; |
| default: colorRGB = "Invalid color"; break; |
| } |
| System.out.println(colorRGB); |
| } |
| } |
| |
| ---- |
| |
| 如果在编辑器中错误地设置了粘贴的代码格式,请按 Alt-Shift-F 组合键以重新设置格式。 |
| |
| |
| |
| . 在 "Projects"(项目)窗口中,右键单击该项目节点并选择 "Run File"(运行文件)。此时将会看到应用程序输出,这是红色的 RGB 代码。 |
| 如果目标平台和源格式为 JDK 7,您可以看到构建成功,并且应用程序正常工作。 |
| |
| image::images/output.png[] |
| |
| |
| |
| . 让我们改用以前的 JDK 6,并测试如何使用 JDK 6 编译器编译应用程序。 |
| 在 "Projects"(项目)窗口中,右键单击该项目节点并选择 "Properties"(属性)。在 "Sources"(源)类别中,将源代码/二进制格式设置为 ``JDK 6`` ,然后单击 "OK"(确定)。 |
| 您可以立即看到 JDK6 解析器无法识别语法。编译将失败,因为变量类型不兼容。 |
| |
| [.feature] |
| -- |
| |
| image::images/error-small.png[role="left", link="images/error.png"] |
| |
| -- |
| |
| |
| |
| . 现在,让我们使用 ``if-then-else`` 语句而非 ``switch`` 重新编写代码,如下所示: |
| |
| [source,java] |
| ---- |
| |
| package switchtest; |
| |
| public class SwitchTest { |
| |
| public static void main(String[] args) { |
| |
| String color = "red"; |
| String colorRGB; |
| if (color.equals("black")) { |
| colorRGB = "000000"; |
| } else if (color.equals("red")) { |
| colorRGB = "ff0000"; |
| } else if (color.equals("green")) { |
| colorRGB = "008000"; |
| } else if (color.equals("blue")) { |
| colorRGB = "0000ff"; |
| } else { |
| colorRGB = "Invalid color"; |
| } |
| System.out.println(colorRGB); |
| } |
| } |
| |
| ---- |
| 在将 JDK 7 作为源代码/二进制格式的情况下,IDE 将识别这种情况,并允许您将其转换为 ``switch`` ,如下图中所示。 |
| |
| [.feature] |
| -- |
| |
| image::images/convert-small.png[role="left", link="images/convert.png"] |
| |
| -- |
| |
| 单击该提示, ``if-then-else`` 结构将自动转换为 ``switch`` ,这与我们以前使用的 switch 完全相同。 |
| |
| |
| == JDK 7 支持:更多示例 |
| |
| 要演示 IDE 的 Java 编辑器如何识别和自动修复代码,以便与 JDK 7 语言规范兼容,让我们使用一个虚拟代码片段,该代码片段本身没有什么意义,但它包含所有主要的语言改进功能。 |
| |
| 在逐步完成该虚拟代码片段并应用编辑器提示后,您将看到以下功能的操作方法示例: |
| |
| * 在 Java 编译器可以推断通用实例类型而无需明确指定该类型时,利用自动类型推断。使用所谓的_菱形运算符_来标记类型推断情况。 |
| * 在可以使用一个 ``catch`` 块处理几种类型的异常错误时,使用改进的异常错误处理或 _multi-catch_。 |
| * 使用自动资源管理功能引入的资源关闭语句的新语法。 |
| |
| 1. 将同一 ``SwitchTest.java`` 文件中的旧应用程序代码替换为以下代码: |
| |
| [source,java] |
| ---- |
| |
| package switchtest; |
| |
| |
| import java.io.FileInputStream; |
| import java.lang.reflect.Method; |
| import java.io.IOException; |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| |
| public class SwitchTest { |
| |
| public void test() throws IOException { |
| List<String> list = new ArrayList<String>(); |
| HashMap<String, Integer> map = new HashMap<String, Integer>(); |
| HashMap<String, Integer> map2 = new HashMap<String, Integer>(); |
| String a = "ehlo"; |
| |
| try { |
| Method m = Object.class.getMethod("toString"); |
| m.invoke(this); |
| } catch(NoSuchMethodException e) { |
| e.printStackTrace(); |
| } catch(InvocationTargetException e) { |
| e.printStackTrace(); |
| } catch(IllegalAccessException e) { |
| e.printStackTrace(); |
| } |
| |
| FileInputStream in = null; |
| try { |
| in = new FileInputStream("foo.txt"); |
| |
| int k; |
| while ((k = in.read()) != -1) { |
| System.out.write(k); |
| } |
| } finally { |
| if (in != null) { |
| in.close(); |
| } |
| } |
| } |
| } |
| |
| ---- |
| |
| |
| . 请注意,IDE 将显示一些说明如何优化代码以符合 JDK 7 规范的提示,如本教程中上面所述。只需单击每个提示并选择建议的操作即可。 |
| |
| |
| . 最后,接受了所有建议后,您就应该具有与 JDK 7 兼容的代码,如下所示。 |
| |
| [.feature] |
| -- |
| |
| image::images/converted-small.png[role="left", link="images/converted.png"] |
| |
| -- |
| |
| link:/about/contact_form.html?to=3&subject=Feedback: Overview of JDK 7 Support in NetBeans IDE[+发送有关此教程的反馈意见+] |
| |
| |
| |
| == 另请参见 |
| |
| 有关 JDK 7 和 NetBeans IDE 的详细信息,请参见: |
| |
| * _使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG465[+设置目标 JDK+] |
| * link:http://download.oracle.com/javase/tutorial/essential/io/fileio.html[+Java 教程:文件 I/O+] - Java 教程中的一个部分,其中包含 JDK 7 中的一些 I/O 变化示例。 |
| * link:http://download.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html[+Java 教程:分支和结合+] - 说明了 JDK7 中的新分支/结合框架。 |
| |
| 有关在 NetBeans IDE 中开发 Java 应用程序的详细信息,请参见: |
| |
| * link:javase-intro.html[+开发常规 Java 应用程序+] |
| * link:../../trails/java-se.html[+常规 Java 开发学习资源+] |
| * _使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG366[+创建 Java 项目+] |