Transcript Java7

Busy Java Developer's Guide
to Java7
Ted Neward
Neward & Associates
http://www.tedneward.com | [email protected]
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