Java
5
&
6
Features
Jussi
Pohjolainen
Tampere
University
of
Applied
Sciences
Versions
and
Naming
• JDK
1.0
–
1996
• JDK
1.1
–
1997
–
JDBC,
RMI,
ReflecQon..
• J2SE
1.2
–
1998
–
Swing,
CollecQons..
• J2SE
1.3
-‐
2000
–
HotSpot
JVM..
• J2SE
1.4
–
2002
–
assert,
NIO,
Web
start..
• J2SE
5.0
(1.5)
–
2004
–
Generics,
Autoboxing..
• Java
SE
6
(1.6)
–
2006
–
Rhino,
JDBC
4.0
…
• Java
SE
7
(1.7)
–
2011
–
Small
language
changes,
API
Changes
New
Features
• Java
SE
5
– Generics
– Autoboxing
– Improved
looping
syntax
– AnnotaQons
– …
• Java
SE
6
– XML
Processing
and
Web
Services
– ScripQng
– JDBC
4.0
– Desktop
APIs
– …
Generics
ArrayList list = new ArrayList();
list.add("a");
list.add("b");
list.add(new Integer(22));
Iterator i = list.iterator();
while(i.hasNext()) {
System.out.println((String) i.next());
}
Result
Using
Generics
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add(new Integer(22));
Iterator<String> i = list.iterator();
while(i.hasNext()) {
System.out.println((String) i.next());
}
Result
Enhanced
for
-‐
loop
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
// Loop array or collection. Iteration used
// even without declaration! The list object
// must implement java.lang.Iterable interface
for(String alphabet : list) {
System.out.println(alphabet);
}
Java
1.4
import java.util.*;
class Main {
public static void main(String [] args) {
// Does not work, 5 is not a Object type!
someMethod(5);
}
public static void someMethod(Object a) {
System.out.println(a.toString());
}
}
Java
1.4:
SoluQon
import java.util.*;
class Main {
public static void main(String [] args) {
Integer temp = new Integer(5);
someMethod(temp);
}
public static void someMethod(Object a) {
System.out.println(a.toString());
}
}
Java
1.4:
Lot
of
Coding
Integer a = new Integer(5);
Integer b = new Integer(6);
int aPrimitive = a.intValue();
Int bPrimitive = b.intValue();
Autoboxing
Comes
to
Rescue!
class Main {
public static void main(String [] args) {
// Boxing
Integer a = 2;
// UnBoxing
int s = 5 + a;
}
}
Java
1.5
class Main {
public static void main(String [] args) {
// Works!
someMethod(5);
}
public static void someMethod(Object a) {
System.out.println(a.toString());
}
}
Java
1.5
import java.util.*;
class Main {
public static void main(String [] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(5);
list.add(new Integer(6));
list.add(7);
for(int number : list) {
System.out.println(number);
}
}
}
Enum
• An
enum
type
is
a
type
whose
fields
consist
of
a
fixed
set
of
constants
enum Color {
WHITE, BLACK, RED, YELLOW, BLUE;
}
Usage
enum Color {
WHITE, BLACK, RED, YELLOW, BLUE;
}
class Main {
public static void main(String [] args) {
System.out.println(Color.WHITE);
Color c1 = Color.RED;
System.out.println(c1);
}
Enum
• Enum
declaraQon
defines
a
class!
• Enum
can
include
methods
• Enum
constants
are
final
staQc
• Compiler
adds
special
methods
like
values
that
returns
an
array
containing
all
the
values
of
the
enum.
• Enum
class
extends
java.lang.enum
Enum
enum Color {
WHITE, BLACK, RED, YELLOW, BLUE;
}
class Main {
public static void main(String [] args) {
for (Color c : Color.values()) {
System.out.println(c);
}
}
}
StaQc
Import
(1/2)
class Main {
public static void main(String [] args) {
int x = Integer.parseInt("55");
int y = Integer.parseInt("56");
int x = Integer.parseInt("57");
}
}
StaQc
Import
(2/2)
import static java.lang.Integer.parseInt;
class Main {
public static void main(String [] args) {
int x = parseInt("55");
int y = parseInt("56");
int z = parseInt("57");
}
}
Metadata
• With
Java
5
it’s
possible
to
add
metadata
to
methods,
parameters,
fields,
variables..
• Metadata
is
given
by
using
annota,ons
• Many
annota.ons
replace
what
would
otherwise
have
been
comments
in
code.
• Java
5
has
built-‐in
annotaQons
Override:
Does
not
Compile!
class Human {
public void eat() {
System.out.println("Eats food");
}
}
class Programmer extends Human {
@Override
public void eatSomeTypo() {
System.out.println("Eats pizza");
}
}
class Main {
public static void main(String [] args) {
Programmer jack = new Programmer();
jack.eat();
}
}
Other
AnnotaQons
used
By
Compiler
• @Depricated
–
Gives
warning
if
when
depricated
method
or
class
is
used
• @SuppressWarnings
–
Suppress
all
warnings
that
would
normally
generate
System.out.format
import java.util.Date;
class Main {
public static void main(String [] args) {
Date d = new Date();
// Lot of format characters available!
System.out.format("Today is %TF", d);
}
}
Variable
Argument
List
class Main {
public static void printGreeting(String... names) {
for (String n : names) {
System.out.println("Hello " + n + ". ");
}
}
public static void main(String[] args) {
String [] names = {"Jack", "Paul"};
printGreeting("Jack", "Paul");
printGreeting(names);
}
}
User
Input:
Scanner
Scanner in = new Scanner(System.in);
int a = in.nextInt();
Java
6:
XML
&
Web
Services
• Easy
way
of
creaQng
Web
Services
• Expose
web
service
with
a
simple
annotaQon
Web
Service
package hello;
import javax.jws.WebService;
@WebService
public class CircleFunctions {
public double getArea(double r) {
return java.lang.Math.PI * (r * r);
}
public double getCircumference(double r) {
return 2 * java.lang.Math.PI * r;
}
}
Server
import javax.xml.ws.Endpoint;
class Publish {
public static void main(String[] args) {
Endpoint.publish(
"http://localhost:8080/circlefunctions",
new CircleFunctions());
}
Generate
Stub
Files
• Generate
stub
files:
– wsgen
–cp
.
hello.CircleFuncQons
Java
6:
Rhino
• Framework
to
connect
to
Java
programs
to
scripQng-‐language
interpreters.
• Rhino
JS
Engine
comes
with
Java
6
• To
ability
to
run
JS
from
Java
and
JS
from
command
line
• Rhino
is
wriken
in
Java
Example
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Main {
public static void main(String[] args) {
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
// Now we have a script engine instance that
// can execute some JavaScript
try {
engine.eval("print('Hello')");
} catch (ScriptException ex) {
ex.printStackTrace();
}
}
}
Java
6:
GUI
• Faster
Splash
Screens
• System
tray
support
• Improved
Drag
and
Drop
• Improved
Layout
• WriQng
of
Gif
-‐
files
Java
6:
DB
Support
• Java
6
comes
with
preinstalled
relaQonal
database,
Oracle
release
of
Apache
Derby
Project
• Java
DB
is
installed
automaQcally
as
part
of
the
Java
SE
Development
Kit
(JDK).
• For
a
Java
DB
installaQon,
set
the
DERBY_HOME
environment
variable
Java
7
• Using
Strings
in
switch
statements
• Syntax
for
automaQc
cleaning
of
streams
• Numeric
literals
with
underscores
• OR
in
excepQon
catches