Before JDK1.7 - WordPress.com

Download Report

Transcript Before JDK1.7 - WordPress.com

Java 7.0 change summary
A view of possible small language changes
CHANGE BULLETIN BOARD
 Better Integer Literal
 Improved type inference


 Enum comparison
 String switch
Management

 Chained invocations &
Extension methods
 Improved catch clauses
 Array notation for Map, List
Self type(this)
Automatic Resource
New I/O 2 (NIO2)
Libraries

Fork Join Framework

Miscellaneous Things
•What is better Integer Literal ?

Before JDK1.7
Binary literals
Int mask=0b101010101010;

Proposed in JDK1.7
With underscores for clarity
int mask =0b1010_1010_1010 ;
long big =9_234_345_087_780L;
•Improved type inference?

Proposed in Jdk1.7

Constructors
 Before JDK1.7

Constructors
Map<String,
List<String>> anagrams
= new HashMap<String,
List<String>>();
Map<String, List<String>>
anagrams = new
HashMap<>();
•Improved type inference(cont)
 Before JDK1.7

 Argument Positions

public <E> Set<E> emptySet() { … }
void timeWaitsFor(Set<Man> people) {
…}
// * Won't compile!
timeWaitsFor(Collections.emptySet());
Proposed in Jdk1.7
Argument Positions
public <E> Set<E> emptySet() { … }
void timeWaitsFor(Set<Man> people) {
…}
// OK
timeWaitsFor(Collections.<Man>empt
ySet());
•What is new Enum Comparison?
 Before JDK1.7

enum Size { SMALL, MEDIUM, LARGE }
enum Size { SMALL, MEDIUM,
LARGE }
if (mySize.compareTo(yourSize) >= 0)
System.out.println(“
You can wear my pants.”);
Proposed in Jdk1.7
if (mySize > yourSize)
System.out.println(“Y
ou can wear my
pants.”);
What is new Switch Case?
 Before JDK1.7

static boolean
booleanFromString(String s)
{
if (s.equals("true"))
{
return true;
} else if (s.equals("false"))
{
return false;
} else
{ throw new
IllegalArgumentException(s);
}
}
static boolean
booleanFromString(String
s) {
switch(s) {
case "true":
return true;
case "false":
return false;
default:
throw new
IllegalArgumentException(
s);
}
}
Proposed in Jdk1.7
Chained invocations
 Before JDK1.7 (chained)
class Builder {
void setSomething(Something x)
{…}
void setOther(Other x) { … }
Thing result() { … }
}
Builder builder = new Builder();
builder.setSomething(something);
builder.setOther(other);
Thing thing = builder.result();

Proposed in Jdk1.7
class Builder {
void setSomething(Something x)
{…}
void setOther(Other x) { … }
Thing result() { … }
}
Thing thing = new Builder()
.setSomething(something)
.setOther(other)
.result();
Extension Methods
 Before JDK1.7
import java.util.Collections;
List<String> list = …;
Collections.sort(list);

Proposed in Jdk1.7
import static java.util.Collections.sort;
List<String> list = …;
list.sort();
•Improved catch clauses : Catching multiple types
 Before JDK1.7
try
{
return klass.newInstance();
}catch (InstantiationException e)
{
throw new AssertionError(e);
}catch (IllegalAccessException e)
{
throw new AssertionError(e);
}

Proposed in Jdk1.7
try {
return klass.newInstance();
} catch (InstantiationException |
IllegalAccessException e) {
throw new AssertionError(e);
}
•Improved catch clauses : rethrown exceptions
 Before JDK1.7

try {
// Throws several types
doable.doit();
}
catch (Throwable ex) {
logger.log(ex);
throw ex; // Error: Throwable not
declared
}
try {
// Throws several types
doable.doit();
}
catch (final Throwable ex) {
logger.log(ex);
throw ex;
// OK: Throws the same several types
}
Proposed in Jdk1.7
•Array notation for Map, List change
 Before JDK1.7
void swap(List<String>
list, int i, int j)
{
String s1 = list.get(i);
list.set(i,list.get(j));
list.set(j, s1);
}

Proposed in Jdk1.7
void swap(List<String>
list, int i, int j)
{
String s1 = list[i];
list[i] = list[j];
list[j] = s1;
}
•Array notation for Map, List change(cont)
 Before JDK1.7
Map<Input,Output> cache = …;
Output cachedComputation(Input in) {
Output out = cache.get(in);
if (out == null) {
out = computation(input);
cache.put(in, out);
}
return out;
}

Proposed in Jdk1.7
Map<Input,Output> cache = …;
Output cachedComputation(Input
in) {
Output out = cache[in];
if (out == null) {
out = computation(input);
cache[in] = out;
}
return out;
}
•What is Self type(this)?
 Before JDK1.7
class Buffer {
Buffer flip() { … }
Buffer position(int newPos) { … }
Buffer limit(int newLimit) { … }
}
class ByteBuffer extends Buffer {
ByteBuffer put(byte data) { … }
}
public static void main(String args) {

Proposed in Jdk1.7
class Buffer {
this flip() { … }
this position(int newPos) { … }
this limit(int newLimit) { … }
}
class ByteBuffer extends Buffer {
this put(byte data) { … }
}
ByteBuffer buf = ...;
public static void main(String args) {
buf.flip().position(12); // OK
ByteBuffer buf = ...;
buf.flip().put(12); // Error }
buf.flip().position(12); // OK
buf.flip().put(12); // is fine now}
•Why Automatic Resource Management?
 Before JDK1.7
InputStream in = new FileInputStream(src);
try
{
OutputStream out = new FileOutputStream(dest);
try
{
byte[] buf = new byte[8192];
int n;
while (n = in.read(buf)) >= 0)
out.write(buf, 0, n);
} finally {
out.close();
}} finally {
in.close();
}
•Why Automatic Resource Management?(cont)
 Proposed JDK1.7
try (InputStream in = new FileInputStream(src),
OutputStream out = new FileOutputStream(dest))
{
byte[] buf = new byte[8192];
int n;
while (n = in.read(buf)) >= 0)
out.write(buf, 0, n);
}
New superinterface java.lang.AutoCloseable
 All AutoCloseable and by extension java.io.Closeable types useable with try-withresources
 anything with a void close() method is a candidate
 JDBC 4.1 retrefitted as AutoCloseable too
What is New I/O 2 (NIO2) Libraries? (JSR 203)
Original Java I/O APIs presented challenges for developers
 Not designed to be extensible
 Many methods do not throw exceptions as expected
 rename() method works inconsistently
 Developers want greater access to file metadata
Java NIO2 solves these problems
Features of NIO2 (cont)
 Path is a replacement for File
 (Biggest impact on developers)
 Better directory support
 (list() method can stream via iterator)
 Entries can be filtered using regular expressions in API
 Symbolic link support
 java.nio.file.Filesystem

interface to a filesystem (FAT, ZFS, Zip archive, network,
etc)
 java.nio.file.attribute package Access to file metadata
Features of NIO2 (cont)
Path Class introduction
 Equivalent of java.io.File in the new API Immutable
 Have methods to access and manipulate Path
 Few ways to create a Path - From Paths and FileSystem
//Make a reference to the path
Path home = Paths.get(“/home/fred”);
//Resolve tmp from /home/fred -> /home/fred/tmp
Path tmpPath = home.resolve(“tmp”);
//Create a relative path from tmp -> ..
Path relativePath = tmpPath.relativize(home)
File file = relativePath.toFile();
Introuction Fork Join Framework
Goal is to take advantage of multiple processor
 Designed for task that can be broken down into smaller
pieces
Eg. Fibonacci number fib(10) = fib(9) + fib(8)
 Typical algorithm that uses fork join
if I can manage the task
perform the task
else
fork task into x number of smaller/similar task
join the results
Introuction Fork Join Framework (cont)
Key Classes
 ForkJoinPool
Executor service for running ForkJoinTask
 ForkJoinTask
The base class for forkjoin task
 RecursiveAction
A subclass of ForkJoinTask
A recursive resultless task
Implements compute() abstract method to perform
calculation
 RecursiveTask
Similar to RecursiveAction but returns a result
Introuction Fork Join Framework (cont)
ForkJoin Example – Fibonacci
public class Fibonacci extends RecursiveTask<Integer>
{
private final int number;
public Fibonacci(int n) { number = n; }
@Override protected Integer compute() {
switch (number) {
case 0: return (0);
case 1: return (1);
default:
Fibonacci f1 = new Fibonacci(number – 1);
Fibonacci f2 = new Fibonacci(number – 2);
f1.fork(); f2.fork();
return (f1.join() + f2.join());
}
}
}
Introuction Fork Join Framework (cont)
ForkJoin Example – Fibonacci
ForkJoinPool pool = new ForkJoinPool();
Fibonacci r = new Fibonacci(10);
pool.submit(r);
while (!r.isDone()) {
//Do some work
...
}
System.out.println("Result of fib(10) = "+ r.get());
•Miscellaneous Things








InvokeDynamic Bytecode
Security
 Eliptic curve cryptography
 TLS 1.2
JAXP 1.4.4
JAX-WS 2.2
JAXB 2.2
ClassLoader architecture changes
close() for URLClassLoader
Javadoc support for CSS