| // |
| // 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 8 支持概述 |
| :jbake-type: tutorial |
| :jbake-tags: tutorials |
| :jbake-status: published |
| :icons: font |
| :syntax: true |
| :source-highlighter: pygments |
| :toc: left |
| :toc-title: |
| :description: NetBeans IDE 中的 JDK 8 支持概述 - Apache NetBeans |
| :keywords: Apache NetBeans, Tutorials, NetBeans IDE 中的 JDK 8 支持概述 |
| |
| 作者:Tomas Zezula 和 Alyona Stashkova |
| |
| NetBeans IDE 支持 link:http://openjdk.java.net/projects/jdk8/features/[+JDK 8 功能+],例如 lambda 表达式、可重复标注、精简配置文件等。在代码中使用这些结构时,IDE 会识别它们,正确突出显示错误并使您能够自动修复语法。因此,NetBeans IDE 可帮助您编写与 link:http://download.oracle.com/otndocs/jcp/java_se-8-edr-spec/index.html[+Java SE 8 发布内容早期草稿审查规范+]兼容的代码。 |
| |
| 在本教程中,您将了解如何在 NetBeans IDE 中开始使用 JDK 8,以及如何使用 IDE 对精简配置文件、lambda 表达式和重复标注等 Java SE 8 功能的支持。 |
| |
| |
| image::images/netbeans-stamp-80-74.png[title="此页上的内容适用于 NetBeans IDE 7.4 和 8.0 Beta"] |
| |
| |
| *要学完本教程,您需要具备下表所列的软件和资源。* |
| |
| |=== |
| |软件或资源 |要求的版本 |
| |
| |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)+] |版本 8 |
| |=== |
| |
| |
| == 在 NetBeans IDE 中启用 JDK 8 支持 |
| |
| 在系统上下载并安装 JDK 8 之后,需要将其注册在 IDE 中,如下所示: |
| |
| 1. 在 IDE 中,从主菜单中选择 "Tools"(工具)> "Java Platforms"(Java 平台)。 |
| 2. 在 "Java Platform Manager"(Java 平台管理器)对话框中单击 "Add Platform"(添加平台)。 |
| 3. 在 "Add Java Platform"(添加 Java 平台)对话框中,选择 "Java Standard Edition",然后单击 "Next"(下一步)。 |
| 4. 指定包含 JDK 的目录,然后单击 "Next"(下一步)。 |
| |
| [.feature] |
| -- |
| image::images/jdk8_small.png[role="left", link="images/jdk8.png"] |
| -- |
| |
| |
| |
| . 验证平台源 zip 文件和 API 文档的默认位置是否有效。单击 "Finish"(完成)以关闭 "Add Java Platform"(添加 Java 平台)对话框。 |
| JDK 8 作为平台注册在 IDE 中。 |
| |
| [.feature] |
| -- |
| image::images/jdk8registered_small.png[role="left", link="images/jdk8registered.png"] |
| -- |
| |
| |
| |
| . 确保在 "Platforms"(平台)列表中选择了 JDK 1.8,然后单击 "Close"(关闭)。 |
| |
| |
| == 配置项目以使用 JDK 8 |
| |
| 在 IDE 中注册 JDK 8 之后,需要将项目配置为使用 JDK 8 进行编译、运行和调试。 |
| |
| 首先,我们将使用 NetBeans IDE 附带的 Anagram Game 示例创建一个新的 Java SE 项目。 |
| |
| 1. 在 IDE 中,选择 "File"(文件)> "New Project"(新建项目)。 |
| 2. 在 "New Project"(新建项目)向导中,展开 "Samples"(样例)类别并选择 "Java"。 |
| 3. 在 "Projects"(项目)列表中选择 "Anagram Game"。然后,单击 "Next"(下一步)。 |
| 4. 在 "Name and Location"(名称和位置)面板中,保留 "Project Name"(项目名称)和 "Project Location"(项目位置)字段的默认值。 |
| 5. 单击 "Finish"(完成)。 |
| IDE 将在 "Projects"(项目)窗口中创建并打开 Java SE 项目。 |
| |
| *要配置项目以使用 JDK 8,请执行以下操作:* |
| |
| 1. 在 "Projects"(项目)窗口中右键单击 "AnagramGame" 项目,然后从上下文菜单中选择 "Properties"(属性)。 |
| 2. 在 "Project Properties"(项目属性)对话框中,选择 "Libraries"(库)类别,然后将 JDK 1.8 设置为 Java 平台。 |
| |
| [.feature] |
| -- |
| image::images/prj_jdk8_small.png[role="left", link="images/prj_jdk8.png"] |
| -- |
| |
| |
| |
| . 选择 "Sources"(源)类别,然后将源代码/二进制格式设置为 "JDK 8"。 |
| |
| [.feature] |
| -- |
| image::images/prj_source_jdk8_small.png[role="left", link="images/prj_source_jdk8.png"] |
| -- |
| |
| |
| |
| . 单击“确定”保存更改。 |
| 此时将设置项目以识别新的 JDK 8 语言功能。 |
| |
| |
| == 使用精简配置文件支持 |
| |
| Java SE 8 引入了可用于部署和运行不需要整个平台的应用程序的 link:http://openjdk.java.net/jeps/161[+Java SE 平台规范的子集配置文件+]。 |
| |
| 到目前为止已定义的三个配置文件名为 _compact1_、_compact2_ 和 _compact3_。每个配置文件都指定一组特定的 Java API 包并且包含小于自身的配置文件中的所有 API:_compact1_ 是 _compact2_ 的子集,后者是 _compact3_ 的子集,而再后者又是_完整 JRE_ 的子集。下表列出了每个配置文件中包含的包。 |
| |
| |=== |
| |Compact1 |Compact2 |Compact3 |完整 JRE |
| |
| |* java.lang |
| * java.io |
| * java.nio |
| * java.text |
| * java.math |
| * java.net |
| * javax.net |
| * java.util |
| * java.util.logging |
| * java.security |
| * javax.crypto |
| * javax.security |
| |_compact1_ 以及以下包: |
| |
| * java.sql |
| * javax.sql |
| * javax.xml |
| * org.w3c.dom |
| * org.xml.sax |
| * java.rmi |
| * javax.rmi |
| * javax.transaction |
| |_compact2_ 以及以下包: |
| |
| * java.lang.management |
| * javax.management |
| * javax.naming |
| * javax.sql.rowset |
| * javax.security.auth.kerberos |
| * org.ietf.jgss |
| * javax.script |
| * javax.xml.crypto |
| * java.util.prefs |
| * javax.security.sasl |
| * javax.security.acl |
| * java.lang.instrument |
| * javax.annotation.processing |
| * javax.lang.model |
| * javax.lang.model.element |
| * javax.lang.model.type |
| * javax.lang.model.util |
| * javax.tools |
| |_compact3_ 以及以下包: |
| |
| * corba |
| * awt |
| * swing |
| |
| |
| |=== |
| |
| IDE 允许您根据需要在配置文件和完整 JRE 之间切换。 |
| |
| *要为 Java SE 项目设置项目配置文件,请执行以下操作:* |
| |
| 1. 右键单击项目,然后从上下文菜单中选择 "Properties"(属性)。 |
| 2. 在 "Project Properties"(项目属性)对话框中,选择 "Sources"(源)类别。 |
| 3. 使用 "Profile"(配置文件)下拉列表指定您的应用程序将支持的 JDK 8 配置文件。 |
| |
| [.feature] |
| -- |
| image::images/prj_src_profile_small.png[role="left", link="images/prj_src_profile.png"] |
| -- |
| |
| |
| |
| . 单击 "OK"(确定)。 |
| |
| 要了解 IDE 如何检查项目中使用的类是否属于指定的配置文件,请选择 "Compact1" 作为 AnagramGame 项目的配置文件,然后单击 "OK"(确定)。 |
| IDE 将显示错误,以通知 AnagramGame 项目不符合 _compact1_ 配置文件。 |
| |
| [.feature] |
| -- |
| image::images/profile_small.png[role="left", link="images/profile.png"] |
| -- |
| |
| 您可以返回并将 AnagramGame 项目的配置文件设置为 Anagrams 应用程序支持的“完整 JRE”。 |
| |
| |
| == 使用 Lambda 表达式支持 |
| |
| link:http://openjdk.java.net/projects/lambda/[+Lambda 表达式+]通过更加简洁地表示匿名内部类的结构,解决庞大的匿名内部类问题。 |
| |
| lambda 表达式的一般语法包含一组参数、一个箭头标记和一个函数体(单个表达式或一个语句块): |
| |
| |
| [source,java] |
| ---- |
| |
| (int a, int b) -> a * a + b * b; |
| ---- |
| |
| NetBeans IDE 将检测预 lambda 表达式并在编辑器中显示提示,以建议将此类结构转变为 lambda 表达式。 |
| |
| 例如,AnagramGame 项目以 ``Anagrams.java`` 文件中的预 lambda 结构为特色,如下面的屏幕快照中所示。 |
| |
| [.feature] |
| -- |
| image::images/lambda_small.png[role="left", link="images/lambda.png"] |
| -- |
| |
| 在单击旁注中的电灯泡或按 Alt-Enter 组合键之后,IDE 将显示 "Use Lambda"(使用 Lambda)提示并提供一组选项: |
| |
| [.feature] |
| -- |
| image::images/lambda_clicked_small.png[role="left", link="images/lambda_clicked.png"] |
| -- |
| |
| 如果选择了 "Use Lambda"(使用 Lambda)提示,则 IDE 会将匿名内部类转换为 lambda 表达式。 |
| |
| [.feature] |
| -- |
| image::images/lambda_converted_small.png[role="left", link="images/lambda_converted.png"] |
| -- |
| |
| 如果选择 "Run Inspect on"(运行检查于)选项,则 IDE 将显示 "Inspect"(检查)对话框,您可以在该对话框中对指定的文件运行单个 "Convert to Lambda"(转换为 Lambda)检查。 |
| |
| *注:*有关在 IDE 中启动 "Inspect"(检查)操作的更多信息,请参见_使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG613[+在源代码分析和重构中使用提示+]。 |
| |
| [.feature] |
| -- |
| image::images/inspect_small.png[role="left", link="images/inspect.png"] |
| -- |
| |
| 在您按 "Inspect"(检查)按钮启动检查之后,IDE 将标识文件中的所有预 lambda 结构并将其显示在 "Inspector"(检查器)窗口中。 |
| |
| [.feature] |
| -- |
| image::images/lambda_inspection_small.png[role="left", link="images/lambda_inspection.png"] |
| -- |
| |
| 如果选择 "Run Inspect&Transform on"(运行检查和转换于)选项,则 IDE 将显示 "Inspect and Transform"(检查并转换)对话框,您可以在该对话框中对指定的代码运行单个 "Convert to Lambda"(转换为 Lambda)检查(或所选配置),并根据需要重构。 |
| |
| *注:*有关启动 "Inspect and Transform"(检查并转换)操作的更多信息,请参见_使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG613[+在源代码分析和重构中使用提示+]。 |
| |
| [.feature] |
| -- |
| image::images/lambda_transform_small.png[role="left", link="images/lambda_transform.png"] |
| -- |
| |
| |
| == 使用重复标注支持 |
| |
| Java SE 8 功能包含link:http://openjdk.java.net/jeps/120[+重复标注+],通过该功能,可以将相同类型的标注应用到单个程序元素,如以下代码示例中所示: |
| |
| |
| [source,java] |
| ---- |
| |
| @ProjectServiceProvider(service=Foo.class,"org-nebeans-modules-j2seproject") |
| @ProjectServiceProvider(service=Foo.class,"org-nebeans-modules-j2eeproject") |
| public class MyService extends Foo {} |
| |
| ---- |
| |
| NetBeans IDE 支持重复标注,允许您使用相同的标注编写代码,假定声明了重复标注类型和包含标注类型: |
| |
| * 必须使用 ``@Repeatable ()`` 标记可重复的标注类型,否则您在编译时会获得错误 |
| * 包含标注类型必须具有一个数组类型的 ``value`` 元素;该数组类型的组件类型必须是可重复的标注类型 |
| link:/about/contact_form.html?to=3&subject=Feedback:%20Overview%20of%20JDK%208%20Support%20in%20NetBeans%20IDE[+发送有关此教程的反馈意见+] |
| |
| |
| |
| == 另请参见 |
| |
| 有关 JDK 8 的更多信息,请参见: |
| |
| * link:http://jdk8.java.net/[+JDK 8 项目+] |
| * link:http://download.java.net/jdk8/docs/[+Java Platform Standard Edition 8 预览版文档+] |
| * link:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html[+Java SE 8:Lambda 快速入门 +] |
| * link:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html[+Java 教程:Lambda 表达式+] |
| * link:http://docs.oracle.com/javase/tutorial/java/annotations/repeating.html[+Java 教程:重复标注+] |
| |
| 有关在 NetBeans IDE 中开发 Java 应用程序的详细信息,请参见: |
| |
| * _使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG366[+创建 Java 项目+] |
| * link:javase-intro.html[+开发常规 Java 应用程序+] |
| * link:../../trails/java-se.html[+常规 Java 开发学习资源+] |