Java 7 workshop

Post on 04-Jul-2015

676 views 1 download

Transcript of Java 7 workshop

Java 7Anything new under the Sun?

Java 7Hands-onJava 8+

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

Plans

Plan A

JDK 7As currently planned

Mid 2012

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

Platform FeaturesAPI Features

Language Features

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

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.

Other Platform Features

• JVM performance enhancements

• Upgrade class-loader architecture

• Garbage-First Collector

• New JavaDoc layout

Platform FeaturesAPI Features

Language Features

Fork/Join

NIO.2

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

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

Platform FeaturesAPI Features

Language Features

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...");}

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);

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;}

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;    }}

“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();

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()); }

Java 7Hands-onJava 8+

IMDb

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

Read files

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

readActors() in class IMDB• Implement!

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”));

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!

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

Java 7Hands-onJava 8+

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

Features• Project Jigsaw

• JDK modularity• Modular and versioned applications

• Joda Time• Project HotRockit• Porting JDeveloper to Netbeans

Java 8 workshopDecember 2012

Hopefully...