Александр Белокрылов. java 8: create the future
TRANSCRIPT
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 1
Java 8: Create The Future
Александр Белокрылов
@gigabel
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 3
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 4
Включайтесь!
Вступайте в OTN – http://oracle.com/otn
JUG Belarus – http://www.belarusjug.org/
Adopt a JSR – http://adoptajsr.java.net
Канал Java на YouTube – http://youtube.com/java
Читайте бесплатный журнал – http://www.oracle.com/javamagazine
Follow Java Twitter – http://twitter.com/java
Будьте частью сообщества
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 5
Java 8
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 6
Java 8
Лямбда выражения
Групповые операции
Nashorn – движок Javascript
Аннотации типов
Новый API даты и времени
Сompact profiles
New UI controls, Modena, 3D – Java FX
http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 7
Java 8
Лямбда выражения
Групповые операции
Аннотации типов
Новый API даты и времени
Сompact profiles
New UI controls, Modena, 3D – Java FX
http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 8
Type annotations
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 9
Анотации в Java
@Stateless @LocalBean public class GalleryFacade {
@EJB private GalleryEAO galleryEAO;
@TransactionAttribute(SUPPORTS)
public Gallery findById(Long id) { ... }
@TransactionAttribute(REQUIRED)
public void create(String name) { … }
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 10
Аннотации в Java
Появились в Java 5
Built-in
@Override
@Deprecated
@SupressWarning
Custom
Широко используются
JavaEE
Test harnesses
@
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 11
Аннотации в Java 7 и раньше
Declarations only
– Class
– Method
– Field
– Parameter
– Variable
@A public class Test {
@B private int a = 0;
@C public void m(@D Object o) {
@E int a = 1;
...
}
}
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 12
Custom annotations
Определить
Использовать в коде
Использовать в runtime
– Reflection
Использовать в compile-time
– Annotation processor
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 13
Аннотации в Java 8
Типы могут быть проаннотированы
повторяющиеся аннотации
@
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 14
JSR 308: Annotations on Java Types (1)
method receivers
public int size() @Readonly { ... }
generic type arguments
Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;
arrays
Document[][@Readonly] docs2 = new Document[2] [@Readonly 12];
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 15
JSR 308: Annotations on Java Types (2)
typecasts
myString = (@NonNull String)myObject;
type tests
boolean isNonNull = myString instanceof @NonNull String;
object creation
new @NonEmpty @Readonly List(myNonEmptyStringSet)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 16
JSR 308: Annotations on Java Types (3)
type parameter bounds
<T extends @A Object, U extends @C Cloneable>
class inheritance
– class UnmodifiableList implements @Readonly List<@Readonly T> { ... }
throws clauses
– void monitorTemperature() throws @Critical TemperatureException { ... }
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 17
Аннотации в Java 8
Используются в типах
Анализ во время компиляции
И что?
Огромная работа по верификации во время компиляции
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 18
JSR 305: Annotations for Software Defect Detection
Nullness
Check return value
Taint
Concurrency
Internationalization
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 19
Checkers framework. Type checkers.
Nullness
IGJ (Immutability Generics Java)
Lock
Property file
Units
Typestate
@
http://types.cs.washington.edu/checker-framework/
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 20
IGJ (Immutability Generics Java) checkers
@Immutable
@Mutable
@ReadOnly
@Assignable
@AssignFields
javac -processor org.checkerframework.checker.igj.IGJChecker IGJExample.java
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 21
Новый API даты и времени
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 22
LocalDate
Год-Месяц-День (2014-04-16)
Хранит даты: День рождения, начальная/конечная дата, праздник
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 23
LocalDate Пример
LocalDate current = LocalDate.now();
LocalDate programmerDay = LocalDate.of(2014,
Month.SEPTEMBER, 13);
if (current.isEqual(programmerDay))
System.out.println("Congratulate friends");
String str = current.toString(); // 2014.05.17
boolean leap = current.isLeapYear(); // false
int daysInMonth = current.lengthOfMonth(); // 30
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 24
LocalDate
Методы для увеличения, уменьшения и установки даты
Immutable
Изменяем дату
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 25
LocalDate Изменяем дату
LocalDate date = LocalDate.now();
date = date.plusMonths(2).minusDays(15);
date = date.withDayOfMonth(9);
date = date.with(Month.MAY);
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 26
LocalDate Изменяем дату по-человечески
date = date.with(TemporalAdjuster.firstDayOfNextMonth());
date = date.with(firstDayOfNextMonth());
date = date.with(next(DayOfWeek.MONDAY));
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 27
LocalTime Пример
LocalTime current = LocalTime.now();
LocalTime time = LocalTime.of(12, 35);
String str = time.toString(); //12:35
time = time.plusHours(1).minusMinutes(45).withSecond(30);
// 12:35:30
time = time.truncatedTo(ChronoUnit.MINUTES); // 12:50
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 28
LocalDateTime Пример
LocalDateTime current = LocalDateTime.now();
LocalDateTime arrival =
LocalDateTime.of(2014, Month.MAY, 16, 21, 00);
LocalDateTime departure =
arrival.plusDays(1).plusHours(21).minusMinutes(35);
String str = departure.toString(); //2014-05-18T17:25
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 29
Instant миллисекунды с 01.01.1970
Instant timeStamp1 = Instant.now();
Instant timeStamp2 = Instant.now();
if (timeStamp1.isAfter(timeStamp2)) ... ;
Instant timeStamp3 = timeStamp2.plusSeconds(10);
эквивалент java.util.Date
24 октября 2014 года, 09:03:34 UTC, EPOCH = 14 14 14 14 14
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 30
Часовые пояса
Часовые пояса определяются политическими мотивами
Правила часовых поясов меняются
http://www.iana.org/time-zones
TimeZones
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 31
ZonedDateTime аналог java.util.GregorianCalendar
ZoneId moscow = ZoneId.of("Europe/Moscow");
ZoneId berlin = ZoneId.of("Europe/Berlin");
LocalDateTime dateTime =
LocalDateTime.of(2014, Month.MAY, 30, 7, 30);
ZonedDateTime moscowDateTime =
ZonedDateTime.of(dateTime, moscow);
//2014-05-04T07:30+04:00[Europe/Moscow]
ZonedDateTime berlinTime =
moscowDateTime.withZoneSameInstant(berlin);
//2014-05-04T05:30+02:00[Europe/Berlin]
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 32
Интервалы Время
Duration myTalkDuration = Duration.ofMinutes(45);
myTalkDuration = myTalkDuration.plusMinutes(5);
startTalk = LocalDateTime.of(2014, Month.May, 17, 11, 00);
endTalk = startTalk.plus(myTalkDuration);
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 33
Интервалы Дата
startArmy = LocalDate.of(2014, Month.May, 30);
Period armyPeriod = Period.ofYears(1);
endArmy = startArmy.plus(armyPeriod);
currentDate = LocalDate.of(2014, Month.NOVEMBER, 29);
Period tillDembel = Period.between(currentDate, endArmy);
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 34
Пользуйтесь на здоровье! New Date & Time API Java 8
LocalDate 2014-04-16
LocalTime 12:35:30
LocalDateTime 2014-04-16T22:55
ZonedDateTime 2014-05-04T07:30+04:00[Europe/Moscow]
Instant 1397216152942
Duration PT1H10M
Period P4M6D
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 35
Лямбда выражения
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 36
for (Orange o: orangebox) {
if (o.getColor() == GREEN)
o.setColor(ORANGE);
}
http://www.californiaoranges.com/40lb-box-bushel-organic-valencia-oranges.html
Common case
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 37
orangebox.forEach( o → {
if (o.getColor() == GREEN)
o.setColor(ORANGE);
})
http://www.californiaoranges.com/40lb-box-bushel-organic-valencia-oranges.html
Common case with Lambdas
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 38
Collection.forEach()
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 39
interface Collection<T> {
...
default void forEach(Block<T> action) {
for (T t: this)
action.apply(t);
}
}
Default methods
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 40
Маленький шаг для языка – гигантский скачок для библиотек
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 41
Stream API
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 42
Mary had a little lambda
Whose fleece was white and snow
And everywhere that Mary went
Lambda was sure to go!
Mary had a little Lambda
https://github.com/steveonjava/MaryHadALittleLambda
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 43
Iterating with Lambdas
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 44
Итерации с Лямбдами
Group cells = new Group(IntStream
.range(0, HORIZONTAL_CELLS)
.mapToObj(i-> IntStream
.range(0, VERTICAL_CELLS)
.mapToObj(j -> {
// Logic goes here
return rect;}))
.flatMap(s -> s)
.toArray(Rectangle[]::new));
Stream generation
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 45
Итерации с Лямбдами
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 46
Iterating with Lambdas
Stream.iterate(tail, lamb -> new SpriteView.Lamb(lamb))
.skip(1).limit(7)
.forEach(s.getAnimals()::add);
Stream iterate()
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 47
•Стрим из коллекции Collection.stream();
•Стрим объектов Stream.of(bananas, oranges, apples);
•Числовой дипапзон IntStream.range(0, 100);
•Итеративность Stream.iterate(tail, lamb -> new Lamb(lamb));
Итерации с Лямбдами
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 48
Фильтруем Стрим с Лямбдами
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 49
Фильтруем Стрим с Лямбдами
public void visit(Shepherd s) {
s.getAnimals().stream().filter(a -> a.getNumber() % 4 == 1)
.forEach(a -> a.setColor(null));
s.getAnimals().stream().filter(a -> a.getNumber() % 4 == 2)
.forEach(a -> a.setColor(Color.YELLOW));
s.getAnimals().stream().filter(a -> a.getNumber() % 4 == 3)
.forEach(a -> a.setColor(Color.CYAN));
s.getAnimals().stream().filter(a -> a.getNumber() % 4 == 0)
.forEach(a -> a.setColor(Color.GREEN));
}
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 50
Фильтруем Стрим с Лямбдами
public static Predicate<SpriteView> checkIfLambIs(Integer number) {
return lamb -> lamb.getNumber() % 4 == number;}
@Override
public void visit(Shepherd s) {
s.getAnimals().stream().filter(checkIfLambIs(1))
.forEach(a -> a.setColor(null));
s.getAnimals().stream().filter(checkIfLambIs(2))
.forEach(a -> a.setColor(Color.YELLOW));
s.getAnimals().stream().filter(checkIfLambIs(3))
.forEach(a -> a.setColor(Color.CYAN));
s.getAnimals().stream().filter(checkIfLambIs(0))
.forEach(a -> a.setColor(Color.GREEN));}
Predicate
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 51
Фильтруем коллекции с Лямбдами
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 52
Фильтруем коллекции с Лямбдами
static Function<Color, Predicate<SpriteView>> checkIfLambColorIs
= color -> {Predicate<SpriteView> checkIfColorIs =
lamb -> lamb.getColor() == color;
return checkIfColorIs; };
@Override
public void visit(Shepherd s) {
mealsServed.set(mealsServed.get() +
s.getAnimals()
.filtered(checkIfLambColorIs.apply(todayEatableColor))
.size());
s.getAnimals()
.removeIf(checkIfLambColorIs.apply(todayEatableColor)); }
Function
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 53
Фильтруем коллекции с Лямбдами
@Override
public void visit(Shepherd s) {
Function<Color, Predicate<SpriteView>> checkIfLambColorIs =
color -> lamb -> lamb.getColor() ==
color;
mealsServed.set(mealsServed.get() +
s.getAnimals()
.filtered(checkIfLambColorIs.apply(todayEatableColor))
.size());
s.getAnimals()
.removeIf(checkIfLambColorIs.apply(todayEatableColor))}
Function
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 54
•Removes all elements that match the predicate Collection.removeIf();
•Filtering and replacement Collection.replaceAll();
•Returns collection filtered by predicate ObservableCollection.filtered();
Фильтруем коллекции с Лямбдами
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 55
•OpenSource project to demonstrate
Lambda features
•Visual representation of streams, filters,
maps
•Created by Stephen Chin, @steveonjava
Mary had a little Lambda
https://github.com/steveonjava/MaryHadALittleLambda
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 56
Reading
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 57
Reading
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 58
Java SE Embedded 8
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 59
Java SE 8 Embedded Platforms
JDK ARM SE
Linux ARM VFP hard float ABI
JRE SE Embedded Compact Profile Platforms
Linux x86
Linux ARM soft float
Linux ARM VFP soft float ABI
Linux ARM VFP hard float ABI
Linux Power PC e600
Linux Power PC e500v2
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 60
Java SE 8 Compact Profiles Profiles standardization
SE Full JRE
Hotspot VM
Lang & Util Base Libraries
Other Base Libraries
Integration Libraries
UI & Toolkits
Optional Components
Hotspot VM
Base Compact1 Classes
SE 8 Compact Profiles
Compact2 Class libraries
Compact3 Class libraries
1
2
3
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 61
Java SE 8 APIs java.io
java.lang
java.lang.annotation
java.lang.invoke
java.lang.ref
java.lang.reflect
java.math
java.net
java.nio
java.nio.channels
java.nio.channels.spi
java.nio.charset
java.nio.charset.spi
java.nio.file
java.nio.file.attribute
java.nio.file.spi
java.security
java.security.cert
java.security.interfaces
java.security.spec
java.text
java.text.spi
java.time
java.time.chrono
java.time.format
java.time.temporal
java.time.zone
java.util
java.util.concurrent
java.util.concurrent.atomic
java.util.concurrent.locks
java.util.function
java.util.jar
java.util.logging
java.util.regex
java.util.spi
java.util.stream
java.util.zip
javax.crypto
javax.crypto.interfaces
javax.crypto.spec
javax.net
javax.net.ssl
javax.script
javax.security.auth
javax.security.auth.callback
javax.security.auth.login
javax.security.auth.spi
javax.security.auth.x500
javax.security.cert
java.rmi
java.rmi.activation
java.rmi.dgc
java.rmi.registry
java.rmi.server
java.sql
javax.rmi.ssl
javax.sql
javax.transaction
javax.transaction.xa
javax.xml
javax.xml.datatype
javax.xml.namespace
javax.xml.parsers
javax.xml.stream
javax.xml.stream.events
javax.xml.stream.util
javax.xml.transform
javax.xml.transform.dom
javax.xml.transform.sax
javax.xml.transform.stax
javax.xml.transform.stream
javax.xml.validation
javax.xml.xpath
org.w3c.dom
org.w3c.dom.bootstrap
org.w3c.dom.events
org.w3c.dom.ls
org.xml.sax
org.xml.sax.ext
org.xml.sax.helpers
java.lang.instrument
java.lang.management
java.security.acl
java.util.prefs
javax.annotation.processing
javax.lang.model
javax.lang.model.element
javax.lang.model.type
javax.lang.model.util
javax.management
javax.management.loading
javax.management.modelmbean
javax.management.monitor
javax.management.openmbean
javax.management.relation
javax.management.remote
javax.management.remote.rmi
javax.management.timer
javax.naming
javax.naming.directory
javax.naming.event
javax.naming.ldap
javax.naming.spi
javax.security.auth.kerberos
javax.security.sasl
javax.sql.rowset
javax.sql.rowset.serial
javax.sql.rowset.spi
javax.tools
javax.xml.crypto
javax.xml.crypto.dom
javax.xml.crypto.dsig
javax.xml.crypto.dsig.dom
javax.xml.crypto.dsig.keyinfo
javax.xml.crypto.dsig.spec
org.ietf.jgss
java.applet
java.awt .**(13 packages)
java.beans
java.beans.beancontext
javax.accessibility
javax.activation
javax.activity
javax.annotation
javax.imageio
javax.imageio.event
javax.imageio.metadata
javax.imageio.plugins.bmp
javax.imageio.plugins.jpeg
javax.imageio.spi
javax.imageio.stream
javax.jws
javax.jws.soap
javax.print
javax.print.attribute
javax.print.attribute.standard
javax.print.event
javax.rmi
javax.rmi.CORBA
javax.sound.midi
javax.sound.midi.spi
javax.sound.sampled
javax.sound.sampled.spi
javax.swing.** (18 packages)
javax.xml.bind
javax.xml.bind.annotation
javax.xml.bind.annotation.adapters
javax.xml.bind.attachment
javax.xml.bind.helpers
javax.xml.bind.util
javax.xml.soap
javax.xml.ws
javax.xml.ws.handler
javax.xml.ws.handler.soap
javax.xml.ws.http
javax.xml.ws.soap
javax.xml.ws.spi
javax.xml.ws.spi.http
javax.xml.ws.wsaddressing
org.omg.** (28 packages)
compact1
compact1 compact2
compact2 compact3
compact3
Full Java SE
http://openjdk.java.net/jeps/161
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 62
Java SE 8 Embedded Profiles Linux x86_32 JRE static footprint comparison
compact1 Profile classes
Compact1
Embedded
JRE
Extensions (fx, nashorn, locales,... )
11Mb Client or Server Hotspot VM
Full JRE profile classes
Full JRE SE
Embedded
JRE SE
156Mb
Web start
Plugin
Control Panel
Deploy
49Mb
Client and Server Hotspot VM
Full JRE profile classes
Commercial features (JFR) Commercial features (JFR)
Minimal* Hotspot VM
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 63
Java SE 8 Embedded Profiles Graphics Footprint Savings over traditional SE Embedded
Swing/AWT/Java2D Classes
Hotspot VM
SE Embedded Runtime
Swing/AWT App
SE Embedded Graphics Stack
Minimal Hotspot VM
Compact1 Profile
Embedded Java FX App
FX Embedded Stack
X Server
Desktop/Window/Session Managers
Native Toolkit & X11 Libraries
Linux Kernel + Framebuffer driver
OpenGLES2 Library
Linux Kernel + Framebuffer driver
52MB 21MB
Java FX
graphics Java FX controls
EGL FB Direct FB
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 64
NetBeans
http://wiki.netbeans.org/JavaSEEmbeddedPlan
http://wiki.netbeans.org/JavaSEEmbeddedHowTo
http://wiki.netbeans.org/CompactProfiles
http://docs.oracle.com/javase/8/embedded/develop
-applications/develop-apps-in-netbeans.htm
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 65
Java SE 8 Embedded Compact Profiles Process used to create custom Java Embedded 8 Runtimes
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 66
JavaFX 8
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 67
JavaFX 8 New Stylesheet
Caspian vs Modena
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 68
JavaFX 8
New API for printing
– Currently only supported on desktop
Any node can be printed
Printing Support
PrinterJob job = PrinterJob.createPrinterJob(printer);
job.getJobSettings().setPageLayout(pageLayout);
job.getJobSettings().setPrintQuality(PrintQuality.HIGH);
job.getJobSettings().setPaperSource(PaperSource.MANUAL);
job.getJobSettings().setCollation(Collation.COLLATED);
if (job.printPage(someRichText))
job.endJob();
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 69
JavaFX 8
DatePicker
TreeTableView
New Controls
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 70
JavaFX 8
Gestures
– Swipe
– Scroll
– Rotate
– Zoom
Touch events and touch points
Touch Support
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 71
JavaFX 8
Predefined shapes
– Box
– Cylinder
– Sphere
User-defined shapes
– TriangleMesh, MeshView
PhongMaterial
Lighting
Cameras
3D Support
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 72
Резюме
Java SE 8
– Lambda выражения, streams и functions
– Type annotations
– Date & Time API
– Новые контролы, стили и поддержка 3D в JavaFX
NetBeans 8, IDE для Java 8
– Lambda, Embedded
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 73
А что дальше?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 74
Java SE Roadmap
2015 2013 2014 2016
JDK 8 (Q1 2014) • Lambda
• JVM Convergence
• JavaScript Interop
• JavaFX 8
• 3D API
• Java SE Embedded support
• Enhanced HTML5 support
7u40 • Java Flight Recorder
• Java Mission Control 5.2
• Java Discovery Protocol
• Native memory tracking
• Deployment Rule Set
JDK 9 • Modularity – Jigsaw
• Interoperability
• Cloud
• Ease of Use
• JavaFX JSR
• Optimizations
NetBeans IDE 7.3 • New hints and refactoring
• Scene Builder Support
NetBeans IDE 8 • JDK 8 support
• Scene Builder 2.0 support
Scene Builder 2.0 • JavaFX 8 support
• Enhanced Java IDE support
NetBeans IDE 9 • JDK 9 support
• Scene Builder 3.0 support
Scene Builder 3.0 • JavaFX 9 support
7u21
• Java Client Security Enhancements
• App Store Packaging tools
JDK 8u20 • Deterministic G1
• Java Mission Control 6.0
• Improved JRE installer
• App bundling
enhancements
JDK 8u40
Scene Builder 1.1 • Linux support
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. 75