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

= Video of JDK 8 Support in NetBeans IDE 7.4
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Video of JDK 8 Support in NetBeans IDE 7.4 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Video of JDK 8 Support in NetBeans IDE 7.4

|===
|This screencast shows how to get started with JDK 8 in NetBeans IDE and how to use JDK 8 profiles and lambda expressions.

link:http://bits.netbeans.org/media/jdk8-gettingstarted.mp4[+Download / Watch full size+] (30 MB)

 

|
link:/about/contact_form.html?to=3&subject=Feedback: Getting Started with JDK 8 Support in NetBeans IDE 7.4[+Send Feedback on This Tutorial+] 
|===


== Related links

* link:http://openjdk.java.net/projects/jdk8/[+JDK 8 Project Page+]
* link:https://netbeans.org/kb/docs/java/javase-jdk8.html[+Overview of JDK 8 Support in NetBeans IDE+]
* link:https://netbeans.org/features/java/index.html[+NetBeans Feature Pages: Java+]
* link:https://netbeans.org/kb/trails/java-se.html[+General Java Development NetBeans Learning Trail+]
* link:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html[+The Java Tutorials: Lambda Expressions+]
* 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 Lambda Series+]
