You are on page 1of 20

Busy Java Developer's Guide to Java7

Ted Neward Neward & Associates http://www.tedneward.com | ted@tedneward.com

Credentials
Who is this guy?
Principal, Architect, Consultant and Mentor
ask me how I can help your project or your team

Microsoft MVP (F#, C#, Architect) JSR 175, 277 Expert Group Member Author
Professional F# 2.0 (w/Erickson, et al; Wrox, 2010) Effective Enterprise Java (Addison-Wesley, 2004) C# In a Nutshell (w/Drayton, et all; OReilly, 2003) SSCLI Essentials (w/Stutz, et al; OReilly, 2003) Server-Based Java Programming (Manning, 2000)

Blog: http://blogs.tedneward.com Papers: http://www.tedneward.com/writings


Twitter: @tedneward

Objectives
Peer into the crystal ball with me...
what will be in Java SE 7?

Peer into the Way-Back machine with me...


what the h*ll took so long?

Peer into the microscope with me...


what's in this thing?

Caveat

Raise your right hand...


you swear not to hold me, the conference, Sun, Mark Reinhold, Alex Miller (from whom much of this info was mined), my parents, my kids, or your pet tarantula responsible for anything that's said in the rest of this talk

None of this is guaranteed


JavaSE7 has a JSR, but last-second changes to JSR are always possible due to slips, deadlines, ...
the final word is in the OpenJDK source base, available for download at http://jdk7.dev.java.net or via the Mercurial repositories we do have the "JDK7 page"... but Oracle has said it is now "feature complete"

You have been warned!

Release

And now, a bit of the politics...


(this is one man's interpretation--not authoritative!) most of the "yes" votes in the JCP were "qualified" ones
in short, most of the JCP members were "disappointed in the licensing model" but didn't want to hold back Java7 Oracle basically declared it didn't care; it would ship Java7 regardless of how everybody voted

Is this the end of the Java Community Process?!?


(would anybody miss it if it were gone?)

Release

JSR 336: Java SE 7 Release Contents


JSR 203: More NIO ("NIO2") JSR 292: Dynamic Language support JSR 334: Minor Java language enhancements ("Coin") JSR 166y: Collections and concurrency improvements Other non-JSR contents:
JDBC 4.1 Unicode 6.0 Translucent and shaped windows Swing Nimbus look-and-feel Heavyweight/lightweight (GUI) component mixing Thread-safe concurrent classloaders Elliptic-curve cryptography

List

VM:
Compressed 64-bit object pointers JSR 292: VM support for non-Java languages (InvokeDynamic)

Lang:
JSR 334: Small language enhancements (Project Coin)

List

Core:
Modularization (Project Jigsaw) Upgrade class-loader architecture Method to close a URLClassLoader Unicode 6.0 Concurrency and collections updates (jsr166y) JSR 203: More new I/O APIs for the Java platform (NIO.2) SCTP (Stream Control Transmission Protocol) SDP (Sockets Direct Protocol) Elliptic-curve cryptography (ECC)

List

Client:
XRender pipeline for Java 2D Forward-port 6u10 features Create new platform APIs for forward-ported 6u10 features Swing updates

EE:
Update the XML stack

Project Coin Language Changes

Project COIN/JSR 334:


Binary integral literals and underscores in numeric literals Strings in switch Improved type inference for generic instance creation Multi-catch and more precise rethrow try-with-resources statement

Project Coin Language Changes


Binary integral literals and underscores in numeric literals
int thirdBitSet = 0b00000100; System.out.println(thirdBitSet); int bigNumber = 1_000_000_000; System.out.println(bigNumber);

Project Coin Language Changes


Strings in switch
String data = "Howdy, all"; switch (data) { case "Howdy, all": System.out.println("It works!"); default: System.out.println("No love"); }

Project Coin Language Changes


Improved type inference
Map<String, List<Integer>> anagrams = new HashMap<>();

Project Coin Language Changes


Multi-catch
try {

Class c = Example.class; Field f = c.getDeclaredField("field"); f.set(null, 12);


} catch (NoSuchFieldException | IllegalAccessException x) { x.printStackTrace(); }

Project Coin Language Changes


try-with-resources
try (FileReader fr = new FileReader("App.java"); BufferedReader br = new BufferedReader(fr)) { String line = null; while ((line = br.readLine()) != null) System.out.println(">> " + line); } catch (IOException ioEx) { ioEx.printStackTrace(); }

JSR 292
JSR 292: "Invokedynamic"
adds "exotic identifiers" more importantly, adds significant VM-level support for dynamic languages
such as MethodHandles

WARNING: ignore any literature referring to InvokeDynamic


this was dropped right before feature-freeze

WARNING: This will not compile in the latest builds (b141)


not sure if this is being officially dropped or not

(292) Language Changes


"Exotic identifiers"
public class #"Wow, this is different" { public static void main(String... args) { int #"This is a local variable" = 12; System.out.println("Using the local " + #"This is a local variable"); #"Strange method name"(); } public static int #"Field #1" = 12; public static void #"Strange method name" { System.out.println("Wow..."); } }

Library
NIO2 (a.k.a. "New New I/O")
Filesystem API Asynchronous I/O API WatchService & notifications

Summary
All of this is subject to change!
... but probably won't still, don't make any life-altering business decisions based on what you see here; until it ships, it's still malleable caveat emptor!
(remember, you swore an oath!)

Questions

You might also like