This illustration highlights the changes that were introduced with each major Java release.
Here is a more detailed break down of the changes.
JDK 1.0 (1996)
- Initial release
JDK 1.1 (1997)
- Inner classes added
- Java Beans introduced
- RMI (Remote Method Invocation) added
- Initial (Windows) JIT compiler
- Reflection introduced - to reflect upon Class methods and fields
- Object serialization for sending objects over the network
- AWT (Abstract Window Toolkit) retooling for GUI enhancements
- JDBC (Java Database Connectivity) to enable connectivity and SQL query support
- Security enhancements - digital signatures, key signatures, access control lists
J2SE 1.2 (1998)
A slight re-branding was made from JDK to J2SE to properly distinguish from J2EE and J2ME.- Collections framework added
- Keyword 'strictfp' added
- Real JIT compiler is included with JVM
- Swing API is integrated into core classes
- Java IDL (Interface description language) for CORBA interoperability
- Java plug-in added for Java applet support in web browsers
J2SE 1.3 (2000)
- HotSpot JVM included - encompassing JIT compilation and adaptive optimization to further improve performance
- Synthetic proxy classes - classes generated at runtime that are not in source code
- Java Naming and Directory Interface (JNDI) included in core libraries
- Java Platform Debugger Architecture (JPDA)
- RMI compatibility with CORBA
- JavaSound API
J2SE 1.4 (2002)
- JAXP (Java API for XML Processing) added; an XML parser and XSLT processor
- Regular expressions modeled after Perl
- Chained exceptions introduced
- IPv6 support added
- NIO (New I/O) introduced for intensive I/O operations
- Java Web Start
- Preferences API
- Logging API
J2SE 5.0 (2004)
- Generics added
- Annotations added
- Auto-boxing/unboxing added
- Enumerations - type safe, ordered list of values
- Varargs
- Enhanced for-each loop
- Static imports
- Scanner class: parses data from input streams and buffers
- Concurrency utilities
- Executor framework for invoking, scheduling and executing tasks
- Concurrent collections: concurrent implementations of Map, List, and Queue
- Atomic variable classes for atomically manipulating single variables
- Synchronizers: semaphores, mutexes, barriers, latches, and exchangers
Java SE 6 (2006)
Going forward, Sun renamed the library to Java SE.- JVM improvements: synchronization and compiler performance optimisations, garbage collection algorithms, and start-up performance
- GUI improvements
- Pluggable annotations allowing custom annotation processors
- JAXB v2.0 (XML Binding) and addition of StAX parser (pull streaming XML with write capability)
- JDBC v4.0 support
- JAX-WS (XML Web Services)
- Java Compiler API
- Scripting language support
Java SE 7 (2011)
- Strings in switch
- try-with-resources Statement for automatic close of resource
- Shorthand diamond operator <> for inferring generic type
- @SafeVarargs annotation for disabling compiler warning when vararg is a non-refiable
- Binary integer literals
- Underscores in numeric literals
Java SE 8 (2014)
- Lambda expressions (closures): an anonymous function that you can use to create delegates or expression tree types
- New Date and Time API
- Type annotations
- Repeating annotations
- Nashorn - lightweight high-performance JavaScript runtime
Read more at:
http://en.wikipedia.org/wiki/Java_version_history