// 
//     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.
//

= Обзор поддержки JDK 7 в IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Обзор поддержки JDK 7 в IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Обзор поддержки JDK 7 в IDE NetBeans

В IDE NetBeans реализована поддержка для новых языковых функций Java 7, таких как оператор diamond, оператор switch для перехода по переменным string, оператор multicatch и т.д. При использовании этих конструкций в коде, среда IDE распознает их, предлагает корректные классы при завершении кода, правильно выделяет ошибки и позволяет автоматически исправлять синтаксис. Таким образом, IDE NetBeans позволяет писать код, соответствующий 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="Содержимое на этой странице применимо к IDE NetBeans 7.4 и 8.0"]


*Для работы с этим учебным курсом требуются программное обеспечение и материалы, перечисленные в таблице ниже.*

|===
|Программное обеспечение или материал |Требуемая версия 

|link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |версия 7.4 или 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработчика на языке Java (JDK)+] |версия 7 или 8 
|===


== Проверка регистрации JDK 7 в IDE NetBeans

Проверка регистрации JDK 7 в IDE NetBeans:

1. В среде IDE выберите "Сервис" > "Платформы Java".
2. Проверьте, что в списке 'Платформы' в диалоговом окне 'Диспетчер платформ Java' выбрана версия JDK 1.7.

[.feature]
--
image::images/platform-small.png[role="left", link="images/platform.png"]
--


[start=3]
. Выберите "Close" (Закрыть).


== Проверка конфигурации проекта

Проверка пригодности конфигурации проекта для работы с зарегистрированной платформой JDK, включая компиляцию, запуск и отладку:

1. Создайте проект Java (выберите 'Файл > Создать проект', затем в списке 'Тип проекта' выберите 'Приложение Java').
2. Нажмите кнопку "Далее".
3. В качестве имени проекта введите  ``SwitchTest``  и укажите его местоположение.
4. Нажмите 'Готово'.
5. В окне 'Проекты' щелкните правой кнопкой мыши узел проекта  ``SwitchTest``  и выберите 'Свойства > Библиотеки'. Убедитесь, что в списке 'Платформы Java' на этой вкладке выбрана версия JDK 1.7.

[.feature]
--
image::images/props-libs-small.png[role="left", link="images/props-libs.png"]
--


[start=6]
. В окне 'Свойства проекта' перейдите на вкладку 'Исходный код'. В списке 'Исходный/двоичный формат' должна быть выбрана версия JDK 7.

[.feature]
--
image::images/props-sources-small.png[role="left", link="images/props-sources.png"]
--


[start=7]
. Нажмите кнопку "ОК" для закрытия диалогового окна "Свойства проекта". Ваш проект настроен для работы с компонентами языка Java 7.


== Использование новых языковых конструкций JDK 7: оператор переключения

JDK 7 содержит link:http://openjdk.java.net/projects/jdk7/features/[+множество новых функций и расширений+] в различных аспектах, в том числе при интернационализации, вводе-выводе, работе с сетью, безопасности и т.д. Для ознакомления с поддержкой JDK 7 в редакторе Java среды IDE проще всего продемонстрировать некоторые изменения, введенные в проекте Coin.

Одним из таких изменений является использование типа String в операторе switch. В предыдущих версиях Java аргументами оператора  ``switch``  могли быть только такие простейшие типы данных как  ``byte`` ,  ``short`` ,  ``char`` ,  ``int``  и  ``enum`` . Начиная с JDK 7, аргументы типа  ``String``  также можно использовать в выражении оператора  ``switch`` .

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 для выполнения повторного форматирования.


[start=2]
. В окне 'Проекты' щелкните правой кнопкой мыши узел проекта и выберите 'Запустить файл'. На экране отобразится вывод приложения, который представляет собой код RGB для красного цвета. 
Таким образом, сборка выполнена успешно, а приложение успешно работает при указании целевой платформы и исходного формата JDK 7.

image::images/output.png[]


[start=3]
. Вернемся к JDK 6 и проверим компилирование приложения с помощью компилятора JDK 6. 
В окне 'Проекты' щелкните правой кнопкой мыши узел проекта и выберите 'Свойства'. В категории 'Источники' в списке 'Исходный/двоичный формат' выберите  ``JDK 6``  и нажмите ОК.
Сразу видно, что синтаксический анализатор JDK6 не распознает синтаксис. Компиляция завершается с ошибкой из-за несовместимого типа переменной.

[.feature]
--
image::images/error-small.png[role="left", link="images/error.png"]
--


[start=4]
. Теперь перепишите код, используя оператор  ``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`` , которая использовалась ранее.


== Поддержка JDK 7: дополнительные примеры

Чтобы проиллюстрировать возможности распознавания и автоматического исправления кода в редакторе Java среды IDE для обеспечения совместимости со спецификациями языка JDK 7, воспользуемся фрагментом кода, который не имеет смысла, но содержит все основные улучшения.

При анализе этого фрагмента кода и применении подсказок редактора будут продемонстрированы следующие возможности.

* Автоматический вывод типов, при котором компилятор Java определяет тип общего экземпляра без необходимости его явного указания. Так называемый _оператор "бубна"_ позволяет отметить случаи вывода типа.
* Улучшенная обработка исключений или _мультизахват_, при котором один блок  ``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();
            }
        }
    }
}
 
----

[start=2]
. Обратите внимание, что в среде IDE отображаются подсказки по оптимизации кода в соответствии со спецификациями JDK 7. Щелкните подсказки и выберите предложенные действия. 

[start=3]
. По принятии всех предложений будет создан код, совместимый с 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 и IDE NetBeans см.:

* link:http://www.oracle.com/pls/topic/lookup?ctx=nb7400&id=NBDAG465[+Настройка целевого JDK+] в документе _Разработка приложений с помощью NetBeans IDE_
* link:http://download.oracle.com/javase/tutorial/essential/io/fileio.html[+Учебные курсы по Java: ввод-вывод файлов+] — раздел учебных курсов Java, содержащий многочисленные примеры об изменениях JDK 7 во вводе-выводе.
* link:http://download.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html[+Учебные курсы по Java: ветвление и объединение+] — описание новой платформы ветвления и объединения в JDK7.

Дополнительные сведения о разработке приложений в IDE NetBeans см. следующие ресурсы:

* link:javase-intro.html[+Разработка общих приложений, написанных на Java+]
* link:../../trails/java-se.html[+Учебная карта по общим сведениям о разработке на Java+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG366[+Создание проектов Java+] в документе _Разработка приложений в IDE NetBeans_
