![Page 1: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/1.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 1
![Page 2: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/2.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 2
JDK7 In Action
Using New Core Platform Features
In Real Code
Joe Darcy @jddarcy
Mike Duigou @mjduigou
Stuart Marks @stuartmarks
Oracle JDK Team
![Page 3: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/3.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 3
Program Agenda
Project Coin — Small Language Features
NIO.2 File System APIs
Fork/Join Framework
Core Library Morsels
![Page 4: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/4.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 4
Audience Poll
Which JDK version are you using?
– pre-1.4.2
– 1.4.2
– 5
– 6
– 7
– 8 preview builds
Uptake of 7 features?
Which IDE?
![Page 5: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/5.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 5
Project Coin
![Page 6: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/6.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 6
Project Coin is a suite of
language and library changes
to make things programmers
do every day easier.
![Page 7: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/7.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 7
Project Coin Benefits
Remove extra text to make programs more readable
Encourage writing programs that are more reliable
Integrate well with past and future changes
Enjoy improved free code flow today!
![Page 8: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/8.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 8
Coin Constraints
Small language changes
– Specification
– Implementation
– Testing
No JVM changes!
Coordinate with forthcoming larger language changes
Beware the hazards of language interactions!
![Page 9: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/9.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 9
The Six Coin Features and How They Help
Consistency and clarity
– 1. Improved literals
– 2. Strings in switch
Easier to use generics
– 3. SafeVarargs (removing varargs warnings)
– 4. Diamond
More concise error handling
– 5. Multi-catch and precise rethrow
– 6. Try-with-resources
![Page 10: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/10.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 10
1. Improved Literals
![Page 11: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/11.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 11
Improved Literals
Binary integral literals
– new “0b” prefix
Underscores in numeric literals
– can have multiple underscores between digits
![Page 12: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/12.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 12
Integral Binary Literals
// An 8-bit 'byte' value: byte aByte = (byte)0b00100001; // A 16-bit 'short' value: short aShort = (short)0b1010000101000101; // Some 32-bit 'int' values: int anInt1 = 0b10100001010001011010000101000101; int anInt3 = 0B101; // The B can be upper or lower case. // A 64-bit 'long' value. Note the "L" suffix: long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;
![Page 13: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/13.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 13
Underscores in Literals
long creditCardNumber = 1234_5678_9012_3456L; long socialSecurityNumber = 999_99_9999L; long hexWords = 0xCAFE_BABE; long maxLong = 0x7fff_ffff_ffff_ffffL; byte nybbles = 0b0010_0101; long bytes = 0b11010010_01101001_10010100_10010010;
![Page 14: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/14.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 14
Underscores in Literals
Grammar changes a bit tricky to get right;
multiple underscores between digits:
Digits:
Digit
Digit DigitsAndUnderscoresopt Digit
DigitsAndUnderscores:
DigitOrUnderscore
DigitsAndUnderscores DigitOrUnderscore
![Page 15: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/15.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 15
Implication of Multiple Underscores
// Courtesy Josh Bloch int bond = 0000_____________0000________0000000000000000__000000000000000000+ 00000000_________00000000______000000000000000__0000000000000000000+ 000____000_______000____000_____000_______0000__00______0+ 000______000_____000______000_____________0000___00______0+ 0000______0000___0000______0000___________0000_____0_____0+ 0000______0000___0000______0000__________0000___________0+ 0000______0000___0000______0000_________000+__0000000000+ 0000______0000___0000______0000________0000+ 000______000_____000______000________0000+ 000____000_______000____000_______00000+ 00000000_________00000000_______0000000+ 0000_____________0000________000000007;
Do we want this to be allowed?
![Page 16: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/16.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 16
2. Strings in Switch
![Page 17: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/17.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 17
Strings in Switch
switch (name) { case "Athos": case "Porthos": case "Aramis": System.out.println("One of the Three Musketeers"); break; case "d’Artagnan": System.out.println("Not a Musketeer"); break; default: throw new IllegalArgumentException(); }
![Page 18: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/18.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 18
Strings in Switch Specification
JLS §14.11 The switch Statement
“The type of the switch expression must be char, byte, short,
int, Character, Byte, Short, Integer, String, or an enum
type (§8.9), or a compile-time error occurs.”
![Page 19: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/19.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 19
Strings in Switch Specification
What does switching on a null do? (NullPointerException)
Can null be a case label? (No.)
Case-insensitive comparisons? (No.)
Implementation
– relies on a particular algorithm be used for String.hashCode
– on average faster than if-else chain with >3 cases
What is there to discuss?
![Page 20: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/20.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 20
3. Safe Varargs
![Page 21: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/21.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 21
Safe Varargs
List<String> list1 = ... List<String> list2 = ... List<String> list3 = ... Set<List<String>> setOfLists = new HashSet<List<String>>(); Collections.addAll(setOfLists, list1, list2, list3); ^ warning: [unchecked] unchecked generic array creation of type java.util.List<java.lang.String>[] for varargs parameter
![Page 22: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/22.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 22
“If your entire application has been compiled without unchecked warnings, it is type safe.”
Generics Tutorial Extra http://docs.oracle.com/javase/tutorial/extra/generics/index.html
Gilad Bracha, Computational Theologist (emer.)
![Page 23: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/23.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 23
Safe Varargs
Desirable to have a sound system of warnings
– No missed cases (no false negatives)
– But may have false positives
Background
![Page 24: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/24.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 24
Unchecked Warnings & Heap Pollution
“To make sure that potential violations of the typing rules are always
flagged, some accesses to members of a raw type will result in compile-
time unchecked warnings.” — JLS §4.8 Raw Types
“Heap pollution can only occur if the program performed some operation
involving a raw type that would give rise to a compile-time unchecked
warning or if the program aliases an array variable of non-reifiable
element type through an array variable of a supertype which is either raw
or non-generic.” — JLS §4.12.2 Variables of Reference Type
![Page 25: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/25.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 25
Unchecked Warnings and Soundness
Unchecked warnings are intended to be a sound analysis
From a certain point of view, it would be correct (but unhelpful!) to
always emit an unchecked warning
Pre-JDK 7, all callers always got an unchecked warning when calling
certain varargs library methods (e.g., Collections.addAll)
– Bad, and complicated interaction between generics and arrays
– But usually nothing actually dangerous happens!
![Page 26: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/26.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 26
The @SafeVarargs Annotation
Added to the problematic library calls in Java 7
– java.util
Arrays.asList
Collections.addAll
EnumSet.of
– javax.swing
SwingWorker.publish
Shuts off annoying warnings to the callers of these methods
– No changes necessary to callers!
![Page 27: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/27.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 27
@SafeVarargs Design Considerations
Annotations on methods are not inherited
@SafeVarargs can therefore only be applied to
– Static methods
– Constructors
– final instance methods
Additional checks on varargs status, etc.
Runtime retention policy
![Page 28: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/28.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 28
4. Diamond <>
![Page 29: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/29.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 29
Diamond <>
Set<List<String>> setOfLists = new HashSet<List<String>>(); Set<List<String>> setOfLists = new HashSet<>();
the type in the diamond is
inferred from the declaration
![Page 30: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/30.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 30
Diamond Use: Variable Initializer
Set<List<String>> setOfLists = new HashSet<>();
![Page 31: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/31.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 31
Diamond Use: Assignment Statement
List<Map<String,Integer>> listOfMaps; ... ... ... listOfMaps = new ArrayList<>();
![Page 32: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/32.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 32
Diamond Use: Return Statement
public Set<Map<BigInteger,BigInteger>> compute() { ... ... ... return new Set<>();
}
![Page 33: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/33.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 33
Diamond <>
Diamond uses type inference to figure out types so the programmer
doesn’t have to write them
Primary input to type inference is the target type
– Determined the context within which the expression occurs
Type inference is a constraint satisfaction problem
– What are the constraints?
– How can they be satisfied?
Want a unique answer returned by the algorithm
![Page 34: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/34.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 34
More Than One Facet
Two inference schemes proposed, differing in how they gathered
constraints
Each sometimes more useful than the other
Use quantitative analysis to help resolve the issue
– Prototype both schemes
– Analyze results on millions of files of code
![Page 35: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/35.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 35
Quantitative Results
Both schemes equally effective
– Each could eliminate a different 90% of the explicit type parameters to
constructor calls
– Verified diamond was a worthwhile feature!
Choose inference scheme with better evolution and maintenance
properties
Language designer's notebook: Quantitative language design http://www.ibm.com/developerworks/java/library/j-ldn1/
![Page 36: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/36.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 36
5. Multi-Catch and
Precise Rethrow
![Page 37: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/37.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 37
Multi-Catch and Precise Rethrow
Multi-catch:
– ability to catch multiple exception types in a single catch clause
try {
...
} catch (FirstException | SecondException) { ... }
Precise rethrow:
– change in can-throw analysis of a catch clause
![Page 38: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/38.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 38
Multi-Catch and Precise Rethrow
Java’s checked exceptions must either:
– Be handled by a catch clause; or
– Be declared in the throws clause of the containing method.
Where do checked exceptions come from?
– The throw statement
– The throws clause of called methods
Can-throw analysis
– Determines what exceptions can be thrown by a block of code
![Page 39: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/39.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 39
Multi-Catch and Precise Rethrow
The can-throw analysis for a catch block has changed
Java 6 and earlier:
– the declared type of the exception variable
Java 7 and later:
– If the exception variable is effectively final (not assigned),
– Only the checked exceptions that can be thrown by the try-block
![Page 40: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/40.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 40
Multi-Catch and Precise Rethrow
void exampleMethod(Future future) throws InterruptedException, ExecutionException, TimeoutException { Object result = future.get(5, SECONDS); }
How would we catch, clean up, and rethrow?
Declaration has: throws InterruptedException, ExecutionException, TimeoutException
![Page 41: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/41.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 41
Multi-Catch and Precise Rethrow
void exampleMethod(Future future) throws InterruptedException, ExecutionException, TimeoutException { try { Object result = future.get(5, SECONDS); } catch (InterruptedException ex) { cleanup(); throw ex; } catch (ExecutionException ex) { cleanup(); throw ex; } catch (TimeoutException ex) { cleanup(); throw ex; } }
Java 6: multiple catch clauses
![Page 42: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/42.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 42
Multi-Catch and Precise Rethrow
void exampleMethod(Future future) throws Exception { try { Object result = future.get(5, SECONDS); } catch (Exception ex) { cleanup(); throw ex; } }
Java 6: catch “wider” exception type (poor style)
![Page 43: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/43.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 43
Multi-Catch and Precise Rethrow
void exampleMethod(Future future) throws InterruptedException, ExecutionException, TimeoutException { try { Object result = future.get(5, SECONDS); } catch (InterruptedException | ExecutionException | TimeoutException ex) { cleanup(); throw ex; } }
Java 7: multi-catch
![Page 44: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/44.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 44
Multi-Catch and Precise Rethrow
void exampleMethod(Future future) throws InterruptedException, ExecutionException, TimeoutException { try { Object result = future.get(5, SECONDS); } catch (Throwable th) { cleanup(); throw th; } }
Java 7: precise rethrow (is this good style now?)
![Page 45: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/45.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 45
Precise Rethrow — Compatibility
try { throw new DaughterOfFoo(); } catch (Foo exception) { try { throw exception; // in JDK6, exception is Foo // in JDK7, exception is DaughterOfFoo } catch (SonOfFoo anotherException) { ; // Reachable? JDK6=yes, JDK7=no } }
Does it matter if this code doesn’t compile in JDK 7?
![Page 46: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/46.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 46
6. Try-with-resources
![Page 47: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/47.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 47
6. Try-with-resources
A variation of the try-catch-finally statement
Allows initialization of a resource variable
– Must be of type AutoCloseable
– Its close() method is called from a generated finally-block
– Exceptions thrown by close() added to suppressed exception list
Useful for avoiding leaks of external objects
– Files, channels, sockets, SQL statements, ...
– Many JDK classes retrofitted to be AutoCloseable
Largest of the Coins
![Page 48: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/48.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 48
Try-with-resources You type this:
try (Resource r = aa()) { bb(); } catch (Exception e) { cc(); } finally { dd(); }
Compiler generates this:
try { Resource r = null; try { r = aa(); bb(); } finally { if (r != null) r.close(); } } catch (Exception e) { cc(); } finally { dd(); }
It’s actually more complicated
because of the way exceptions
from close() are handled.
![Page 49: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/49.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 49
Project Coin Summary
Features add clarity, conciseness, and convenience
Methodical and quantitative design approach
– Decide today what needs to be decided today
– Consciously leave room for future decisions
Language + library co-evolution (but no VM changes)
Smooth transition to new features
– Widespread tool support
– Use of new features reads well
![Page 50: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/50.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 50
DEMO
![Page 51: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/51.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 51
NIO.2 File System API
![Page 52: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/52.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 52
Background and Motivation
The platform was long overdue something better than java.io.File
– Doesn’t work consistently across platforms
– Lack of useful exceptions when a file operation fails
– Missing basic operations, no file copy, move, ...
– Limited support for symbolic links
– Very limited support for file attributes
– No bulk access to file attributes
– Badly missing features that many applications require
– No way to plug-in other file system implementations
![Page 53: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/53.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 53
New File System API
Package java.nio.file
Also java.nio.file.attribute and java.nio.file.spi
Some additions to java.io and java.nio.channels
![Page 54: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/54.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 54
New File System API
Path – used to locate a file in a file system
Files – defines static methods to operate on files, directories and
other types of files
FileSystem
– Provides a handle to a file system
– Factory for objects that access the file system
– FileSystems.getDefault returns a reference to the default
FileSystem
FileStore – the underlying storage/volume
![Page 55: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/55.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 55
Path
Represents an absolute or relative path
Create from path String or URI or File.toPath()
Consists of one or more name elements, or a root component and
zero or more name elements
Immutable
Defines methods to access elements of the path
Defines methods to combine paths, return a new path
![Page 56: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/56.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 56
Creating a Path
Path path = FileSystems.getDefault().getPath("/foo");
![Page 57: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/57.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 57
Creating a Path
Path path = Paths.get("/foo");
![Page 58: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/58.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 58
Creating a Path
URI u = URI.create("file:///foo"); Path path = Paths.get(u);
![Page 59: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/59.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 59
Creating a Path
File f = new File("foo"); Path path = f.toPath();
![Page 60: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/60.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 60
Accessing Components
// foo/bar/gus/baz Path path = Paths.get("foo", "bar", "gus", "baz"); Path name = path.getFileName(); // baz Path parent = path.getParent(); // foo/bar/gus Path subpath = path.subpath(1,3); // bar/gus
![Page 61: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/61.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 61
Combining Paths
Path dir = Paths.get("/foo/bar"); Path gus = dir.resolve("gus"); // /foo/bar/gus Path baz = dir.resolveSibling("baz"); // /foo/baz
![Page 62: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/62.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 62
Testing Paths
Path dir = Paths.get("foo/bar"); boolean isAbsolute = dir.isAbsolute(); boolean isFoo = dir.startsWith("foo");
![Page 63: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/63.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 63
Other Methods
Path np = path.normalize(); Path rel = path.relativize(other); Path rp = path.toRealPath(); URI u = path.toUri();
![Page 64: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/64.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 64
Files class
Consists exclusively of static methods that operate on files
Most methods take a Path as a parameter to locate the file
Files.createFile(path);
![Page 65: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/65.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 65
Files class
In many cases the return value is a Path too
Path foo = Files.createDirectory(dir.resolve("foo"));
![Page 66: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/66.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 66
Files class
Methods that access the file system throw a useful IOException if they
fail
Defines range of methods for working with regular files, directories
![Page 67: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/67.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 67
Regular Files
• Simple operations Path path = ... byte[] bytes = Files.readAllBytes(path);
![Page 68: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/68.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 68
Regular Files
Simple operations
import static java.nio.charsets.StandardCharsets.*;
Path path = ...
List<String> lines = Files.readAllLines(path, UTF_8);
![Page 69: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/69.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 69
Text Files
import static java.nio.charsets.StandardCharsets.*; BufferedReader reader = Files.newBufferedReader(path, UTF_8); BufferedWriter writer = Files.newBufferedWriter(path, ISO_8859_1);
![Page 70: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/70.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 70
Input and Output Streams
Path = ... InputStream in = Files.newInputStream(path); OutputStream out = Files.newOutputStream(path);
![Page 71: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/71.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 71
Input and Output Streams
import java.nio.file.StandardOpenOption.*; Path = ... OutputStream out = Files.newOutputStream(path, CREATE, APPEND);
![Page 72: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/72.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 72
Channels
Files.newByteChannel to open file, returning channel
SeekableByteChannel
– ByteChannel that maintains a file position
– Channel equivalent of RandomAccessFile
import java.nio.file.StandardOpenOption.*; SeekableByteChannel sbc = Files.newByteChannel(path, READ, WRITE);
![Page 73: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/73.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 73
Channels
FileChannel for more advanced features
– memory mapped I/O, file locking, ...
– Implements SeekableByteChannel
– Now defines open methods to open a file directly
AsynchronousFileChannel class for asynchronous file I/O
– Supports asynchronous read, write, locking
![Page 74: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/74.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 74
Directories
DirectoryStream to iterate over entries
– Scales to large directories
– Uses less resources
– Smooth out response times for remote file systems
– Provides handle to open directory
– Extends Iterable and Closeable
Filtering
– Built-in support for glob and regex patterns
– Can also use custom filters
![Page 75: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/75.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 75
DirectoryStream
Path dir = ... DirectoryStream<Path> stream = Files.newDirectoryStream(dir);
![Page 76: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/76.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 76
DirectoryStream
Path dir = ... try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) { for (Path entry: stream) { System.out.println(entry.getFileName()); } }
![Page 77: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/77.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 77
DirectoryStream
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.java")) { }
![Page 78: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/78.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 78
DirectoryStream
DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() { public boolean accept(Path entry) throws IOException { return Files.size(entry) > 8192L; } }; try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, filter)) { }
![Page 79: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/79.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 79
Symbolic Links
Special file that is a reference to another file
Optionally supported based on long standing Unix semantics
Followed by default, with some exceptions (detete, move, ...)
![Page 80: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/80.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 80
Symbolic Links
Path path = ... boolean isSymLink = Files.isSymbolicLink(path);
![Page 81: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/81.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 81
Symbolic Links
Path link = ... Path target = ... Files.createSymbolicLink(link, target);
![Page 82: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/82.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 82
Symbolic Links
Path link = ... Path target = Files.readSymbolicLink(link);
![Page 83: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/83.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 83
Symbolic Links
Path path1 = ... Path path2 = ... boolean isSame = Files.isSameFile(path1, path2);
![Page 84: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/84.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 84
Symbolic Links
Path path = ... BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
![Page 85: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/85.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 85
Symbolic Links
import static java.nio.file.LinkOption.*; Path path = ... BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class, NOFOLLOW_LINKS);
![Page 86: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/86.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 86
Other File Operations
Path source = ... Path target = ... Files.copy(source, target);
![Page 87: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/87.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 87
Other File Operations
import static java.nio.file.StandardCopyOption.*; Path source = ... Path target = ... Files.copy(source, target, REPLACE_EXISTING);
![Page 88: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/88.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 88
Other File Operations
import static java.nio.file.StandardCopyOption.*; Path source = ... Path target = ... Files.copy(source, target, REPLACE_EXISTING, COPY_ATTRIBUTES);
![Page 89: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/89.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 89
Other File Operations
Path source = ... URI u = ... try (InputStream in = u.toURL().openStream()) { Files.copy(in, path); }
![Page 90: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/90.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 90
Other File Operations
Path source = ... Path target = ... Files.move(source, target);
![Page 91: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/91.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 91
File Attributes
Meta-data associated with file
Highly platform and file system specific
Many applications need access to
– File permissions
– File owner
– Timestamps
– Extended attributes
Long standing performance issues
![Page 92: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/92.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 92
File Attributes
Group related attributes
Define a view that provides
– Defines the attributes in the group (name and type)
– Provides bulk access where appropriate
– Provides type safe access
All implementations required to support a basic view
Implementation may support additional views.
![Page 93: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/93.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 93
Basic Attributes
import java.nio.file.attribute.BasicFileAttributes; BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class); long size = attrs.size(); boolean isDirectory = attrs.isDirectory(); FileTime lastModified = attrs.lastModifiedTime();
![Page 94: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/94.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 94
Basic Attributes
interface BasicFileAttributes { FileTime lastModifiedTime(); FileTime lastAccessTime(); FileTime creationTime(); long size(); boolean isRegularFile(); boolean isDirectory(); boolean isSymbolicLink(); boolean isOther(); Object fileKey(); }
![Page 95: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/95.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 95
File Attributes
API defines several other views
– POSIX
– ACL support based on NFSv4 ACL model (RFC 3530)
– User-defined attributes
Implementations may support additional views
FileStore defines supportsFileAttributeView method to test if attributes
are supported by underlying file store.
![Page 96: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/96.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 96
PosixFileAttributes attrs = Files.readAttributes(path, PosixFileAttributes.class); UserPrincipal owner = attrs.owner(); UserPrincipal group = attrs.group(); Set<PosixFilePermission> perms = attrs.permissions();
![Page 97: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/97.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 97
Setting Initial Attributes
Set<StandardOpenOption> opts = EnumSet.of(CREATE_NEW, WRITE); Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-r-----"); WritableByteChannel wbc = Files.newByteChannel(path, opts, PosixFilePermissions.asFileAttribute(perms);
![Page 98: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/98.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 98
Recursive Operations
Files.walkFileTree
– Internal iterator to walk a file tree from a given starting point
– FileVisitor invoked for each file/directory encountered
– SimpleFileVisitor with default behavior
– Depth first, invoked twice for each directory (pre/post)
– Return value controls iteration
– When following symbolic links then cycles are detected and reported
Most of the samples in the JDK samples directory use it
![Page 99: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/99.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 99
Path start = ... Files.walkFileTree(start, new SimpleFileVisitor<Path>() { });
![Page 100: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/100.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 100
Path start = ... Files.walkFileTree(start, new SimpleFileVisitor<Path>() { public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { System.out.println(file); return FileVisitResult.CONTINUE; } });
![Page 101: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/101.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 101
Path start = ... Files.walkFileTree(start, new SimpleFileVisitor<Path>() { public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) { System.out.format("%s/%n", dir); return FileVisitResult.CONTINUE; } public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { System.out.println(file); return FileVisitResult.CONTINUE; } });
![Page 102: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/102.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 102
File Change Notification
Watch files and directories for changes
Prime motivation is to eliminate the need to poll the file system
WatchService
– Watches registered objects for changes and events
– Makes use of native event notification facility where available
– Minimally required to support monitoring directories: events when files in
directory created, modified or deleted
– May support watching other types of objects or other events
– Deliberately a low-level interface to be used in different contexts
![Page 103: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/103.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 103
Registration
import static java.nio.file.StandardWatchEventKinds.*; WatchService watcher = FileSystems.getDefault().newWatchService(); Path dir = .. WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE);
![Page 104: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/104.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 104
Retrieving Events
for (;;) { WatchKey key = watcher.take(); key.reset(); }
![Page 105: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/105.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 105
Retrieving Events
for (;;) { WatchKey key = watcher.take(); for (WatchEvent<?> event: key.pollEvents()) { } key.reset(); }
![Page 106: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/106.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 106
Retrieving Events
for (;;) { WatchKey key = watcher.take(); for (WatchEvent<?> event: key.pollEvents()) { if (event.kind() == ENTRY_CREATE) { Path name = (Path)event.context(); System.out.format(“%s created%n”, name); } } key.reset(); }
![Page 107: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/107.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 107
Provider Interface
Use to develop and deploy custom file system implementations
FileSystemProvider is a factory for FileSystem instances
Deploy as JAR file on class path or install as extension
java.nio.file.FileSystems defines methods to create and obtain
references to custom file systems
Can replace default provider
Can interpose on default provider
![Page 108: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/108.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 108
ZIP Provider
Sample file system provider shipped with JDK 7
Treats the contents of zip or JAR file as a file system
Works out of the box
Also included as a demo
![Page 109: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/109.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 109
ZIP Provider
Path zipfile = Paths.get("foo.zip"); try (FileSystem zipfs = FileSystems.newFileSystem(zipfile, null)) { }
![Page 110: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/110.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 110
ZIP Provider
Path zipfile = Paths.get("foo.zip"); try (FileSystem zipfs = FileSystems.newFileSystem(zipfile, null)) { Path top = zipfs.getPath("/"); }
![Page 111: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/111.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 111
ZIP Provider
Path zipfile = Paths.get("foo.zip"); try (FileSystem zipfs = FileSystems.newFileSystem(zipfile, null)) { Path top = zipfs.getPath("/"); try (DirectoryStream stream = Files.newDirectoryStream(top)) { for (Path entry: stream) { System.out.println(entry.getFileName()); } } }
![Page 112: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/112.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 112
Wrap-up
The JDK finally gets a comprehensive interface to the file system
JDK 7 shipping last July so you can use it now
Easy to use, yet powerful
Extensible via the provider interface
![Page 113: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/113.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 113
Fork-Join Framework
![Page 114: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/114.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 114
Fork-Join Framework
Low overhead work stealing ExecutorService
“Large tasks should be split into smaller subtasks, usually via recursive
decomposition. If tasks are too big, then parallelism cannot improve
throughput. If too small, then memory and internal task maintenance
overhead may overwhelm processing.”
![Page 115: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/115.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 115
DEMO
![Page 116: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/116.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 116
Core Libraries Morsels
![Page 117: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/117.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 117
Core Libraries Morsels
“Coins” are small language features
Small library features are “morsels”
![Page 118: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/118.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 118
java.util.Objects
Utility class of static methods
– compare(obj1,obj2,comparator)
– requireNonNull(obj), requireNonNull(obj,msg)
– hashCode(obj), hash(Objects … objs)
– equals(obj1,obj2) deepEquals(obj1,obj2)
– toString(obj), toString(obj,nullDefault)
![Page 119: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/119.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 119
java.nio.charset.StandardCharsets
Constants for six standard charsets
– UTF8, UTF16, UTF16_BE, UTF16_LE, US_ASCII, ISO_8859_1
Key advantage is ability to use Charset variant methods
– No more constantly catching UnsupportedCharsetException!
![Page 120: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/120.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 120
Java Collections Framework
Collections.emptyIterator()
Collections.emptyListIterator()
Collections.emptyEnumeration()
New utilities
![Page 121: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/121.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 121
Java Collections Framework
TimSort
– Capitalizes on runs of partially sorted data
– Arrays of Object & ArrayList
– Contributed by Joshua Bloch
– Designed by Tim Peters
Dual Pivot Quicksort
– 0.8n*ln(n) average comparisons vs Quicksort n*ln(n)
– Arrays of primitive values
– Contributed by Vladimir Yaroslavskiy
– Designed by Vladimir Yaroslavskiy, Jon Bentley, and Joshua Bloch
Major Sorting improvements
![Page 122: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/122.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 122
TimSort Performance
Random 111%
Period(5) 49%
Random(3) 44%
Period(2) 40%
0
20
40
60
80
100
120
140
JDK 6
JDK 7
Results courtesy of Vladimir Yaroslavskiy
![Page 123: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/123.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 123
TimSort Performance
Ascending 19%
Descending 7%
Organ pipes 20%
All equal 20%
0
5
10
15
20
25
30
35
40
45
50
JDK 6
JDK 7
Results courtesy of Vladimir Yaroslavskiy
![Page 124: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/124.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 124
TimSort Summary
Benchmarking from Bentley’s Test Suite (n=1,000,000)
HotSpot JDK 6 (Merge) JDK 7 (TimSort)
Client 100% 43%
Server 100% 26%
Results courtesy of Vladimir Yaroslavskiy
![Page 125: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/125.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 125
Dual Pivot Quicksort Performance
Results courtesy of Vladimir Yaroslavskiy
Random 78% (70%)
Ascending 47% (3%)
Descending 51% (7%)
Organ pipes 62% (55%)
0
20
40
60
80
100
120
140
160
180
200
JDK 6
JDK 7
Pending
![Page 126: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/126.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 126
Dual Pivot Quicksort Performance
Results courtesy of Vladimir Yaroslavskiy
Period(5) 81% (50%)
Random(3) 72% (66%)
Period(2) 57% (54%)
All equal 52% (50%)
0
5
10
15
20
25
JDK 6
JDK 7
Pending
![Page 127: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/127.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 127
Dual-Pivot Quicksort Summary
Benchmarking from Bentley’s Test Suite (n=1,000,000)
HotSpot JDK 6 (Bentley) JDK 7 (Dual-Pivot)
Client 100% 43%
Server 100% 28%
Results courtesy of Vladimir Yaroslavskiy
![Page 128: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/128.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 128
Sorting Comparators
java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.TimSort.mergeHi(TimSort.java:868) at java.util.TimSort.mergeAt(TimSort.java:485) at java.util.TimSort.mergeCollapse(TimSort.java:408) at java.util.TimSort.sort(TimSort.java:214) at java.util.TimSort.sort(TimSort.java:173) at java.util.Arrays.sort(Arrays.java:659) at java.util.Collections.sort(Collections.java:217) ... your code ...
It was there all along
![Page 129: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/129.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 129
Sorting Comparators
class FooComparator implements Comparator<Foo> { public int compare(Foo o1, Foo o2) { return o1.serial – o2.serial; } }
Beware the overflow
o1.serial o2.serial Result Valid
1 1 0 ✔
1 2 -1 ✔
2 1 1 ✔
-1 -2 1 ✔
-2,000,000,000 -2,000,000,000 0 ✔
2,000,000,000 -2,000,000,000 -294967296 ✘
![Page 130: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/130.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 130
Sorting Comparators
class FooComparator implements Comparator<Foo> { public int compare(Foo o1, Foo o2) { return o1.serial – o2.serial; } }
o1 > o2 → o2 < o1
o1 == o2 → o2 == o1
o1 == o2 → compare(o2,o3) == compare(o1,o3)
o1 == o2 → o1.equals(o2) optional
Obey all signs
![Page 131: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/131.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 131
Alternative String Hashing
Hash based Map performance depends strongly upon hash code
quality
Hash code collisions can lead to O(n) or worse performance
Improved hashing for java.lang.String keys with HashMap,
LinkedHashMap, HashSet, Hashtable, WeakHashMap,
ConcurrentHashMap
Optional behaviour added in Java 7u6. Not optional in Java 8
Optional because iterator order becomes unpredictable
– Smaller the map more likely it’s iteration order is assumed
![Page 132: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/132.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 132
Wrap-Up
![Page 133: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/133.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 133
More Information — Java SE 7
Main Java page
– http://www.oracle.com/technetwork/java/index.html
Downloads
– http://www.oracle.com/technetwork/java/javase/downloads/index.html
Features and enhancements (including Project Coin)
– http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html
![Page 134: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/134.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 134
More Information — NIO
JavaTM Tutorials
http://download.oracle.com/javase/tutorial/essential/io/fileio.html
OpenJDK Project
http://openjdk.java.net/projects/nio
Mailing lists
![Page 135: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/135.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 135
Summary
JDK 7 is ready to use today!
– Many productivity benefits in the language and library
– Now on the Mac too
– Regular updates every few months
JDK 7 update releases
– http://jdk7.java.net/
– http://openjdk.java.net/projects/jdk7u/
![Page 136: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/136.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 136
Any Questions?
![Page 137: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/137.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 137
Graphic Section Divider
![Page 138: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/138.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 138
The preceding is intended to outline our general product direction. It is intended
for information purposes only, and may not be incorporated into any contract.
It is not a commitment to deliver any material, code, or functionality, and should
not be relied upon in making purchasing decisions. The development, release,
and timing of any features or functionality described for Oracle’s products
remains at the sole discretion of Oracle.
![Page 139: 1 Copyright © 2012, Oracle and/or its affiliates. All ... · Java 6 and earlier: ±the declared type of the exception variable Java 7 and later: ±If the exception variable is effectively](https://reader035.vdocument.in/reader035/viewer/2022070813/5f0cbe9b7e708231d436eb53/html5/thumbnails/139.jpg)
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Information Protection Policy Classification from Slide 13 139