J2SE Version 5.0
Code named Tiger and released on September 30, 2004.- Generic— enhance compile time type checking and eliminates the need for casting every time we get an object out of Collections.
- Autoboxing/unboxing— eliminates need of manual conversion between primitive types (such as int) and wrapper types (such as Integer), improves readability.
- Enhanced For loop— eliminates error-proneness of iterators, Improves readability, reducing of writing unnecessary codes and it works with both arrays as well as objects that expose an iterator.
- Static import— improves utility functions, relieve need for implementing a Constant Interface
- Varargs — allows to improve API usability and Variable args allow formatted I/O.
- Typesafe enums— enumeration is a list of named constants, it improves readability and organization of constants.
- Metadata—allows programmers to avoid writing boiler unnecessary codes and gives the opportunity to developers for declarative programming.
- Instrumentation
- StringBuilder class in jdk 1.5 (java.lang package)
- Swing: new skinnable look and feel, called synth and Ocean, a new theme for Metal- beyond look and feels.
- Automatic stub generation for rmi objects.
- Scanner class for parsing data from various input streams and buffers.
- Three new interfaces have been added to the Collection framework which is Queue, BlockingQueue, and ConcurrentMap. Queue is intorduce in java.util package where as BlockingQueue, and ConcurrentMap is available in java.util.concurrent package.
The Queue implementation classes are
AbstractQueue,
PriorityQueue,
ConcurrentLinkedQueue where as
BlockingQueue
implementation classes are
ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue.
C
oncurrentHashMap is the implementation of ConcurrentMap.- Special purpose List and Set implementations are added like CopyOnWriteArrayListand CopyOnWriteArraySet. For example refer : - http://javatechtipssharedbygaurav.blogspot.in/2012/10/copyonwritearraylist-and.html
Demo exampleof Generics, Autoboxing/unboxing, Enhanced For loop and Static import
package com.gaurav.jdk5features;
import static java.lang.System.out;
import java.util.ArrayList;
import java.util.List;
public class ImplementaionOfJava5Features {
public static void main(String[] args) {
Integer testAutoboxing = 500; // demo of autoboxing, I am assigning int value
out.println("integer Value is - " + testAutoboxing); // Use of Static Import
int testUnBox = testAutoboxing; // demo of auto-unboxing
out.println("int value is - " + testUnBox); // Use of Static Import
List<String> lst = new ArrayList<String>(0); // Use of Generics
lst.add("Kumar");
lst.add("Gaurav");
lst.add("Shivam");
for (String str : lst) // Use of Enhanced For loop
out.println("Added elements are-" + str); // Use of Static Import
}
}
Demo example of Varargs(Variable Arguments):-
package com.gaurav.jdk5features;
import static java.lang.System.out;
public class ImplementaionOfJava5FeatureVarargs {
static void variableArgumetTestForInt(int... num) { //Use of Varargs
out.println("the variable length ->" + num.length);
for (int number : num) {
out.println("int arguments are-" + number);
}
}
static void variableArgumetTestForBoolean(boolean... flag) { //Use of Varargs
out.println("boolean variable length ->" + flag.length);
for (boolean f : flag) {
out.println("boolean arguments are-" + f);
}
}
public static void main(String args[]) {
variableArgumetTestForInt(1, 2); //Use of Varargs
variableArgumetTestForInt(11, 28, 56); //Use of Varargs
variableArgumetTestForBoolean(true, false); //Use of Varargs
}
}
Demo example of Typesafe enums
package com.corejava.gaurav.examples;
public class ImplementaionOfJava5FeatureEnumType {
public static void main(String args[]) {
System.out.println("Gaurav Age is - " + Name.Gaurav.getAge());
}
enum Name { // Use of enum type
Gaurav(33), Kumar(19), Raju(45);
private int age;
Name(int ageVal) {
age = ageVal;
}
int getAge() {
return age;
}
}
}
Demo example of Metadata(Annotations)
package com.gaurav.jdk5features;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Method;
@Retention(RetentionPolicy.RUNTIME)
// Use of Metadata(Annotations)
@interface MyFirstAnnotation {
String strTestValue();
double doubleTestval();
}
public class ImplementaionOfJava5FeatureAnnotation {
@MyFirstAnnotation(strTestValue = "Two Parameters", doubleTestval = 3.275)
public static void annotationUseMethod() {
ImplementaionOfJava5FeatureAnnotation annotationsTest = new ImplementaionOfJava5FeatureAnnotation();
// obtaining the annotation for the method annotationUseMethod()
// displaying the values of the annotated members.
try {
Method m = annotationsTest.getClass().getMethod(
"annotationUseMethod");
MyFirstAnnotation anno = m.getAnnotation(MyFirstAnnotation.class);
System.out.println("String value is - '" + anno.strTestValue()
+ "' and double value is - " + anno.doubleTestval());
} catch (NoSuchMethodException nex) {
System.out.println(nex.getMessage());
}
}
public static void main(String args[]) {
annotationUseMethod();
}
}
No comments:
Post a Comment