java 7 workshop

30
Java 7 Anything new under the Sun ?

Upload: dennis-laumen

Post on 04-Jul-2015

675 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Java 7 workshop

Java 7Anything new under the Sun?

Page 2: Java 7 workshop

Java 7Hands-onJava 8+

Page 3: Java 7 workshop

VersionsJDK 1.0 Jan, 1996JDK 1.1 Feb, 1997J2SE 1.2 Dec, 1998J2SE 1.3 May, 2000J2SE 1.4 Feb, 2002J2SE 5.0 Sep, 2004Java SE 6 Dec, 2006Java SE 7 Jul, 2011

Page 4: Java 7 workshop

Plans

Plan A

JDK 7As currently planned

Mid 2012

Page 5: Java 7 workshop

Plans

Plan A

JDK 7As currently planned

Mid 2012

Plan BPlan B

JDK7minus Lambda,

Jigsaw, and part of Coin

JDK8Lambda, Jigsaw, and rest of Coin

Mid 2011 End 2012

Page 6: Java 7 workshop

Platform FeaturesAPI Features

Language Features

Page 7: Java 7 workshop

Dynamic Language Support

JVM has no support for dynamic languages:

• Existing JVM instruction set is statically typed

• Limited support for dynamically modifying existing classes and methods

Page 8: Java 7 workshop

Dynamic Language Support

Java 7 adds:

• a new invokedynamic instruction at the JVM level

• ability to change classes and methods at runtime dynamically in a production environment.

Page 9: Java 7 workshop

Other Platform Features

• JVM performance enhancements

• Upgrade class-loader architecture

• Garbage-First Collector

• New JavaDoc layout

Page 10: Java 7 workshop

Platform FeaturesAPI Features

Language Features

Page 11: Java 7 workshop

Fork/Join

Page 12: Java 7 workshop

NIO.2

• The FileVisitor API• Directory watching• File attributes• Custom filesystem providers (ZIP)

Page 13: Java 7 workshop

Other API Features• Updated XML stacks• JDBC 4.1• MethodHandles• Unicode 6.0 and Locale enhancements• Elliptic-curve cryptography• Enhanced MBeans

Page 14: Java 7 workshop

Platform FeaturesAPI Features

Language Features

Page 15: Java 7 workshop

Strings in switchString line = in.readLine();

switch (line) { case "hello":   System.out.println("hello world!");    return;  case "cafe":   System.out.println("cafebabe!");    return;  default:   System.out.println("wrong...");}

Page 16: Java 7 workshop

Literals

int binary = 0b1001_0000_1111_0010;System.out.println(binary);System.out.println(Integer.toBinaryString(binary));

int readableMillion = 1_000_000;System.out.println(readableMillion);

int readableBillion = 1_000_000_000;System.out.println(readableBillion);

Page 17: Java 7 workshop

Multi-catch/* Java 6 and older */} catch (IOException e) { logger.log(e); throw e;} catch (SQLException e) { logger.log(e); throw e;}

/* Java 7 */} catch (IOException | SQLException e) { logger.log(e); throw e;}

Page 18: Java 7 workshop

Precise rethrowpublic void preciseRethrow() throws IOException {    try {        new SimpleDateFormat("yyyyMMdd").parse("foo");        new FileReader("file.txt").read();    } catch(ParseException e) {        System.out.println(e.getMessage());    } catch(Exception e) {        System.out.println(e.getMessage());        throw e;    }}

Page 19: Java 7 workshop

“Diamond”

/* Java 5 & 6 */Map<String, List<String>> myMap = new HashMap<String, List<String>>();

/* Java 7 */Map<String, List<String>> myMap = new HashMap<>();

/* Be warned, the compiler still generates an unchecked conversion warning! */Map<String, List<String>> myMap = new HashMap();

Page 20: Java 7 workshop

Try-with-resources

File file = new File("input.txt"); try (InputStream is = new FileInputStream(file)) { // do something with this input stream } catch (FileNotFoundException ex) { System.err.println(file.getAbsolutePath()); }

Page 21: Java 7 workshop

Java 7Hands-onJava 8+

Page 22: Java 7 workshop

IMDb

We’re building an application which reads IMDb data and parses it to determine which actor has made the best films.

Page 23: Java 7 workshop

Read files

• Open project SequentialWithoutIO• Update root field in class IMDB• Find method readFilms() and

readActors() in class IMDB• Implement!

Page 24: Java 7 workshop

NIO.2 Hints

/** Read a UTF-16 file like ratings-clean.txt **/try (BufferedReader reader = Files.newBufferedReader( file, Charset.forName(“UTF-16”)))

/** Read all actor files in a directory **/try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, “actor*.txt”))

/** Read all lines in file **/Files.readAllLines(entry, Charset.forName(“UTF-8”));

Page 25: Java 7 workshop

Parse files• Open project SequentialParserWithIO

(or continue with your previous project)• Update root field in class IMDB• Find method compute() in classes

ActorParseTask and FilmParseTask• Implement!

Page 26: Java 7 workshop

Fork/Join Hints/** Start computing with checking if the work is small enough to do sequentially **/

/** Fork! **/Collection<ParseTask> completedForks = invokeAll( /** give a list work packages **/);

/** Join! **/for (ParseTask task : completedForks)/** Join all the results of the tasks and return this collection **/

Page 27: Java 7 workshop

Java 7Hands-onJava 8+

Page 28: Java 7 workshop

Features• Project Coin 2

• List literals: [1, 2, 3]• Map literals: [“a”: 1, “b”: 2, “c”: 3]

• Project Lambda: (x, y) => x + y• Type annotations: List<@NonNull Object>• Superpackages

Page 29: Java 7 workshop

Features• Project Jigsaw

• JDK modularity• Modular and versioned applications

• Joda Time• Project HotRockit• Porting JDeveloper to Netbeans

Page 30: Java 7 workshop

Java 8 workshopDecember 2012

Hopefully...