// 
//     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"]
--



. Выберите "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"]
--



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

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



. Нажмите кнопку "ОК" для закрытия диалогового окна "Свойства проекта". Ваш проект настроен для работы с компонентами языка 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 для выполнения повторного форматирования.



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

image::images/output.png[]



. Вернемся к JDK 6 и проверим компилирование приложения с помощью компилятора JDK 6. 
В окне 'Проекты' щелкните правой кнопкой мыши узел проекта и выберите 'Свойства'. В категории 'Источники' в списке 'Исходный/двоичный формат' выберите  ``JDK 6``  и нажмите ОК.
Сразу видно, что синтаксический анализатор 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`` , которая использовалась ранее.


== Поддержка 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();
            }
        }
    }
}
 
----


. Обратите внимание, что в среде 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 и 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_
