// 
//     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 8 в среде IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Видеоролик об интеллектуальном переносе в JDK 8 в среде IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Видеоролик об интеллектуальном переносе в JDK 8 в среде IDE NetBeans

|===
|Экранная демонстрация представляет собой руководство по ключевым функциям языковых усовершенствований в Java 8 (лямбда, функциональные операции и ссылки на методы) и возможностям использования IDE для переноса кода в Java 8.

Автор: Геерт-Ян Виленг (Geertjan Wielenga)
Продолжительность: 14:00

link:http://bits.netbeans.org/media/smart-migration-java8.mp4[+Загрузить / Смотреть видео целиком+] (60 МБ)

 

|
link:/about/contact_form.html?to=3&subject=Feedback: Smart Migration to JDK 8 in NetBeans IDE[+Отправить отзыв по этому учебному курсу+] 
|===


== Связанные ссылки

* link:http://openjdk.java.net/projects/jdk8/[+Страница проекта JDK 8+]
* link:https://netbeans.org/kb/docs/java/javase-jdk8.html[+Обзор поддержки JDK 8 в IDE NetBeans+]
* link:https://netbeans.org/features/java/index.html[+Страницы компонентов NetBeans: Java+]
* link:https://netbeans.org/kb/trails/java-se.html[+Учебная карта по общим сведениям о разработке Java в NetBeans+]
* link:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html[+Практические руководства по Java: лямбда-выражения+]
* link:http://apex.oracle.com/pls/apex/f?p=44785:24:114639602012411::::P24_CONTENT_ID,P24_PREV_PAGE:7919,24[+Oracle Learning Library: последовательности лямбда-выражений в Java SE 8+]
