blob: 63b7c28b9f4e46f8c1f5caa1a6bb2656aad0144a [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<title>NetBeans IDE 中的 JDK 7 支持概述</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<link rel="stylesheet" type="text/css" href="../../../netbeans.css">
<meta name="KEYWORDS" content="NETBEANS, TUTORIAL, GUIDE, USER, DOCUMENTATION">
<meta name="description" content="A short guide to using JDK 7 features in NetBeans IDE.">
</head>
<body>
<h1>NetBeans IDE 中的 JDK 7 支持概述</h1>
<p>NetBeans IDE 支持 Java 7 语言功能,例如菱形运算符、switch 中的 String、multicatch 等。在代码中使用这些结构时,IDE 会识别它们,在代码完成中提供正确的类,正确突出显示错误并使您能够自动修复语法。因此,NetBeans IDE 可帮助您编写与 <a href="http://docs.oracle.com/javase/specs/jls/se7/html/index.html">Java 语言规范 Java SE 7 Edition</a> 兼容的代码。 </p>
<p>在本教程中,您将了解 IDE 如何处理 Java 7 语言结构。 </p>
<p><b>目录</b></p>
<img alt="此页上的内容适用于 NetBeans IDE 7.4 和 8.0" class="stamp" src="../../../images_www/articles/74/netbeans-stamp-80-74.png" title="此页上的内容适用于 NetBeans IDE 7.4 和 8.0">
<ul class="toc">
<li><a href="#platform">确保在 IDE 中注册 JDK 7</a></li>
<li><a href="#project">检查项目配置</a></li>
<li><a href="#switch">使用新的 JDK 7 语言结构:Switch 语句</a></li>
<li><a href="#more">JDK 7 支持:更多示例</a></li>
<li><a href="#see" title="后续步骤">后续步骤</a></li>
</ul>
<p><b>要学完本教程,您需要具备下表所列的软件和资源。</b></p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">软件或资源</th>
<th class="tblheader" scope="col">要求的版本</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
<td class="tbltd1">版本 7.4 或 8.0</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">Java 开发工具包 (JDK)</a></td>
<td class="tbltd1">版本 7 或 8</td>
</tr>
</tbody>
</table>
<h2><a name="platform"></a>确保在 NetBeans IDE 中注册 JDK 7</h2>
<p>要检查是否在 NetBeans IDE 中注册了 JDK 7,请执行以下操作:</p>
<ol>
<li>在 IDE 中,从主菜单中选择 "Tools"(工具)> "Java Platforms"(Java 平台)。</li>
<li>确保在 "Java Platforms Manager"(Java 平台管理器)对话框的 "Platforms"(平台)列表中选定 "JDK 1.7"。
<p class="align-center">
<a href="../../../images_www/articles/74/java/javase-jdk7/platform.png" rel="lytebox" title="注册的 Java 平台"> <img alt="注册的 Java 平台" border="1" src="../../../images_www/articles/74/java/javase-jdk7/platform-small.png"></a></p>
</li>
<li>单击 "Close"(关闭)。</li>
</ol>
<h2><a name="project"></a>检查项目配置</h2>
<p>要检查您的项目是否配置为使用注册的 JDK 进行编译、运行和调试,请执行以下操作:</p>
<ol>
<li>通过选择 "File"(文件)> "New Project"(新建项目),然后选择 "Java Application"(Java 应用程序)作为项目类型,来创建 Java 项目。</li>
<li>单击 "Next"(下一步)。</li>
<li>键入 <tt>SwitchTest</tt> 作为项目名称并指定其位置。 </li>
<li>单击 "Finish"(完成)。</li>
<li>在 "Projects"(项目)窗口中,右键单击 <tt>SwitchTest</tt> 项目节点,然后选择 "Properties"(属性)> "Libraries"(库)。在此标签上,确保在 "Java Platforms"(Java 平台)列表中选定 "JDK 1.7"。
<p class="align-center">
<a href="../../../images_www/articles/74/java/javase-jdk7/props-libs.png" rel="lytebox" title="选择为目标格式的 JDK 7"> <img alt="选择为目标格式的 JDK 7" border="1" src="../../../images_www/articles/74/java/javase-jdk7/props-libs-small.png"></a></p></li>
<li>切换到 "Project Properties"(项目属性)窗口的 "Sources"(源)标签,并确保选择 "JDK 7" 作为源代码/二进制格式。
<p class="align-center">
<a href="../../../images_www/articles/74/java/javase-jdk7/props-sources.png" rel="lytebox" title="选择为源格式的 JDK 7"> <img alt="选择为源格式的 JDK 7" border="1" src="../../../images_www/articles/74/java/javase-jdk7/props-sources-small.png"></a></p>
</li>
<li>单击“确定”。关闭“项目属性”对话框。您的项目配置为识别 Java 7 语言功能。<br>
</li>
</ol>
<h2><a name="switch"></a>使用新的 JDK 7 语言结构:Switch 语句</h2>
<p>JDK 7 在不同领域提供了一些<a href="http://openjdk.java.net/projects/jdk7/features/" target="_blank">新增功能和改进功能</a>,其中包括国际化、I/O 和网络、安全等。要说明 IDE 的 Java 编辑器提供的 JDK 7 支持,最好的方法是演示 Project Coin 引入的一些语言变化。 </p>
<p>其中一个变化是“switch 中的 String”。在早期版本的 Java 中,<tt>switch</tt> 的参数只能属于以下基本数据类型:<tt>byte</tt><tt>short</tt><tt>char</tt><tt>int</tt><tt>enum</tt>。从 JDK 7 开始,您可以在 <tt>switch</tt> 语句的表达式中使用 <tt>String</tt> 类型的参数。 </p>
<ol>
<li>打开 <tt>SwitchTest.java</tt>,并添加以下代码。该小样例显示几种颜色的 RGB 代码。<br> 对于 JDK 7,<tt>color</tt> 变量可以为 <tt>String</tt>
<pre class="examplecode">package switchtest;
public class SwitchTest {
public static void main(String[] args) {
String color = &quot;red&quot;;
String colorRGB;
switch (color.toLowerCase()) {
case &quot;black&quot;: colorRGB = &quot;000000&quot;; break;
case &quot;red&quot;: colorRGB = &quot;ff0000&quot;; break;
case &quot;green&quot;: colorRGB = &quot;008000&quot;; break;
case &quot;blue&quot;: colorRGB = &quot;0000ff&quot;; break;
default: colorRGB = &quot;Invalid color&quot;; break;
}
System.out.println(colorRGB);
}
}
</pre>
<p class="tips">如果在编辑器中错误地设置了粘贴的代码格式,请按 Alt-Shift-F 组合键以重新设置格式。</p>
</li>
<li>在 "Projects"(项目)窗口中,右键单击该项目节点并选择 "Run File"(运行文件)。此时将会看到应用程序输出,这是红色的 RGB 代码。<br> 如果目标平台和源格式为 JDK 7,您可以看到构建成功,并且应用程序正常工作。
<p class="align-center">
<img alt="运行项目的输出" border="1" src="../../../images_www/articles/74/java/javase-jdk7/output.png"></p></li>
<li>让我们改用以前的 JDK 6,并测试如何使用 JDK 6 编译器编译应用程序。<br> 在 "Projects"(项目)窗口中,右键单击该项目节点并选择 "Properties"(属性)。在 "Sources"(源)类别中,将源代码/二进制格式设置为 <tt>JDK 6</tt>,然后单击 "OK"(确定)。<br> 您可以立即看到 JDK6 解析器无法识别语法。编译将失败,因为变量类型不兼容。
<p class="align-center">
<a href="../../../images_www/articles/74/java/javase-jdk7/error.png" rel="lytebox" title="错误"> <img alt="错误" border="1" src="../../../images_www/articles/74/java/javase-jdk7/error-small.png"></a></p>
</li>
<li>现在,让我们使用 <tt>if-then-else</tt> 语句而非 <tt>switch</tt> 重新编写代码,如下所示:
<pre class="examplecode">package switchtest;
public class SwitchTest {
public static void main(String[] args) {
String color = &quot;red&quot;;
String colorRGB;
if (color.equals(&quot;black&quot;)) {
colorRGB = &quot;000000&quot;;
} else if (color.equals(&quot;red&quot;)) {
colorRGB = &quot;ff0000&quot;;
} else if (color.equals(&quot;green&quot;)) {
colorRGB = &quot;008000&quot;;
} else if (color.equals(&quot;blue&quot;)) {
colorRGB = &quot;0000ff&quot;;
} else {
colorRGB = &quot;Invalid color&quot;;
}
System.out.println(colorRGB);
}
}
</pre>
在将 JDK 7 作为源代码/二进制格式的情况下,IDE 将识别这种情况,并允许您将其转换为 <tt>switch</tt>,如下图中所示。
<p class="align-center">
<a href="../../../images_www/articles/74/java/javase-jdk7/convert.png" rel="lytebox" title="转换为 switch 提示"> <img alt="转换为 switch 提示" border="1" src="../../../images_www/articles/74/java/javase-jdk7/convert-small.png"></a></p>
单击该提示,<tt>if-then-else</tt> 结构将自动转换为 <tt>switch</tt>,这与我们以前使用的 switch 完全相同。</li>
</ol>
<h2><a id="more" name="more"></a>JDK 7 支持:更多示例</h2>
<p>要演示 IDE 的 Java 编辑器如何识别和自动修复代码,以便与 JDK 7 语言规范兼容,让我们使用一个虚拟代码片段,该代码片段本身没有什么意义,但它包含所有主要的语言改进功能。 </p>
<p>在逐步完成该虚拟代码片段并应用编辑器提示后,您将看到以下功能的操作方法示例: </p>
<ul>
<li>在 Java 编译器可以推断通用实例类型而无需明确指定该类型时,利用自动类型推断。使用所谓的<em>菱形运算符</em>来标记类型推断情况。 </li>
<li>在可以使用一个 <tt>catch</tt> 块处理几种类型的异常错误时,使用改进的异常错误处理或 <em>multi-catch</em><br>
</li>
<li>使用自动资源管理功能引入的资源关闭语句的新语法。 </li>
</ul>
<ol>
<li>将同一 <tt>SwitchTest.java</tt> 文件中的旧应用程序代码替换为以下代码:<br>
<pre class="examplecode">
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&lt;String&gt; list = new ArrayList&lt;String&gt;();
HashMap&lt;String, Integer&gt; map = new HashMap&lt;String, Integer&gt;();
HashMap&lt;String, Integer&gt; map2 = new HashMap&lt;String, Integer&gt;();
String a = &quot;ehlo&quot;;
try {
Method m = Object.class.getMethod(&quot;toString&quot;);
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(&quot;foo.txt&quot;);
int k;
while ((k = in.read()) != -1) {
System.out.write(k);
}
} finally {
if (in != null) {
in.close();
}
}
}
}
</pre>
</li>
<li>请注意,IDE 将显示一些说明如何优化代码以符合 JDK 7 规范的提示,如本教程中上面所述。只需单击每个提示并选择建议的操作即可。 <br>
</li>
<li>最后,接受了所有建议后,您就应该具有与 JDK 7 兼容的代码,如下所示。
<p class="align-center">
<a href="../../../images_www/articles/74/java/javase-jdk7/converted.png" rel="lytebox" title="已转换代码片段"> <img alt="已转换代码片段" border="1" src="../../../images_www/articles/74/java/javase-jdk7/converted-small.png"></a></p>
</li>
</ol>
<div class="indent"></div>
<div class="feedback-box"><a href="/about/contact_form.html?to=3&subject=Feedback: Overview of JDK 7 Support in NetBeans IDE">发送有关此教程的反馈意见</a></div>
<br style="clear:both;" >
<h2><a name="see"></a>另请参见</h2>
<p>有关 JDK 7 和 NetBeans IDE 的详细信息,请参见: </p>
<ul>
<li><i>使用 NetBeans IDE 开发应用程序</i>中的<a href="http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG465" target="_blank">设置目标 JDK</a></a></li>
<li><a href="http://download.oracle.com/javase/tutorial/essential/io/fileio.html" target="_blank">Java 教程:文件 I/O</a> - Java 教程中的一个部分,其中包含 JDK 7 中的一些 I/O 变化示例。</li>
<li><a href="http://download.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html" target="_blank">Java 教程:分支和结合</a> - 说明了 JDK7 中的新分支/结合框架。 </li>
</ul>
<p>有关在 NetBeans IDE 中开发 Java 应用程序的详细信息,请参见: </p>
<ul>
<li><a href="javase-intro.html">开发常规 Java 应用程序</a></li>
<li><a href="../../trails/java-se.html">常规 Java 开发学习资源</a></li>
<li><i>使用 NetBeans IDE 开发应用程序</i>中的<a href="http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG366" target="_blank">创建 Java 项目</a></a></li>
</ul>
</body>
</html>