-
Introduction
Introduction
Java is widely used staticly typed programming language which is founded over 25 years back. It's almost everywhere from home appliances, mobile devices to industry scale systems. Java is evolving over the time and from Java 8 onwards there were major changes introduced to the language. Below are the list of all the changes on each version.
Imperative vs Declarative Programming
Imperative approach is defining step by step on HOW we are going to achieve the end result. Declarative approach is describing WHAT we want as the output. Simple example would be a classical for loop in Java which we can call as imperative programming and a select query in sql as declarative programming. Still didn't get it? Following examples will help you to understand more
Imperative Style in Java
int sum = 0;for(int i=0; i<5; i++){sum +=i;System.out.print("sum is: "+sum);}
Declarative Style in Java
int sum = IntStream.of(1,2,3,4,5).sum();Declarative Style in SQL
select * from table1 where a=1;
Now you get the idea!Course Breakdown
[TO BE UPDATED]Windows/Mac - Java Install
[TO BE UPDATED]Intelij Install
[TO BE UPDATED]Configurations
[TO BE UPDATED]Git repo link
[TO BE UPDATED]Dev Env Setup
[TO BE UPDATED]
-
Java 8 Features
-
Lambda Expressions
What is Lambda?
A lambda expression is an anonymous function. It's a function without a name and does not belong to any class
Lambda vs java method
method in Java has three main parts
-Name
-Parameter List
-Body
-return type
lambda expression in Java has three main parts
-No name (since lambda is anonymous function)
-Parameter List
-Body
-No return type (no return type required)Lambda Expressions
[TO BE UPDATED]Runnable Example with Lambda
[TO BE UPDATED]Callable Example with Lambda
[TO BE UPDATED]
-
Functional Interfaces and Lambdas
Functional Interfaces
[TO BE UPDATED]Consumer Functional Interfaces
[TO BE UPDATED]IntConsumer, LongConsumer, DoubleConsumer
[TO BE UPDATED]BiConsumer Functional Interface
[TO BE UPDATED]Predicate Functional Interface
[TO BE UPDATED]IntPredicate, LongPredicate, DoublePredicate
[TO BE UPDATED]Predicate & BiConsumer
[TO BE UPDATED]Function
[TO BE UPDATED]BiFunction
[TO BE UPDATED]Unary Operator
[TO BE UPDATED]Binary Operator
[TO BE UPDATED]Supplier
[TO BE UPDATED]Method Reference
[TO BE UPDATED]Constructor Reference
[TO BE UPDATED]
-
Lambda Variable Scope
Variable scope, Final & Effectively Final
[TO BE UPDATED]
-
Realworld Example Using Lambda
Bank Transfer Example
[TO BE UPDATED]
-
Streams
Introduction
[TO BE UPDATED]Inside Streams
[TO BE UPDATED]Collections vs Streams
[TO BE UPDATED]Debugging Stream
[TO BE UPDATED]
-
Stream Operations
map()
[TO BE UPDATED]flatMap()
[TO BE UPDATED]distinct(), count(), sorted(), allMatch(), anyMatch(), nonMatch()
[TO BE UPDATED]Customized sort using comparator
[TO BE UPDATED]filter()
[TO BE UPDATED]reduce()
[TO BE UPDATED]map() + filter() + reduce()
[TO BE UPDATED]min() with stream and reduce
[TO BE UPDATED]limit() and skip()
[TO BE UPDATED]findAny() and findfirst()
[TO BE UPDATED]
-
Stream Generators
Generating Stream with of(), iterate(), generate()
[TO BE UPDATED]
-
Numeric Streams
Introduction
[TO BE UPDATED]IntStream, LongStream, DoubleStream
[TO BE UPDATED]sum(), max(), min(), average()
[TO BE UPDATED]Boxing, Unboxing
[TO BE UPDATED]mapToObj(), mapToLong(), mapToDouble()
[TO BE UPDATED]
-
Collectors Operations
joining()
[TO BE UPDATED]counting()
[TO BE UPDATED]mapping()
[TO BE UPDATED]minBy(), maxBy()
[TO BE UPDATED]summingint(), averageint()
[TO BE UPDATED]groupingBy
[TO BE UPDATED]maxBy(), minBy(), collectingAndThen(), summarizingint()
[TO BE UPDATED]partitioningBy()
[TO BE UPDATED]
-
Parallel Streams
Introduction
[TO BE UPDATED]Sequential vs Parallel
[TO BE UPDATED]
-
Optional
Introduction
[TO BE UPDATED]empty(), ofNullable(), of()
[TO BE UPDATED]orElse(), orElseGet(), orElseThrow()
[TO BE UPDATED]ifPresent(), isPresent()
[TO BE UPDATED]
-
Default & State Methods of Interfaces
Introduction
[TO BE UPDATED]Default Methods
[TO BE UPDATED]Creating an Interface with Default/Static Methods
[TO BE UPDATED]Multiple Inheritance
[TO BE UPDATED]Conflicts in Multiple Inheritance
[TO BE UPDATED]
-
New DateTime API
Introduction
[TO BE UPDATED]LocalDate - get and create
[TO BE UPDATED]LocalDate - modify
[TO BE UPDATED]LocalTime - get and create
[TO BE UPDATED]LocalTime - modify
[TO BE UPDATED]LocalDateTime - get, create and modify
[TO BE UPDATED]LocalDate and LocalTime from LocalDateTime
[TO BE UPDATED]Duration
[TO BE UPDATED]Instant
[TO BE UPDATED]TimeZones - ZonedDateTime, ZonedId
[TO BE UPDATED]LocalDateTime to ZonedDateTime
[TO BE UPDATED]Convert java.util.date & java.sql.date to LocalDateTime/LocalDate
[TO BE UPDATED]
-
-
Java 9 Features
-
Java Shell(REPL)
Introduction
[TO BE UPDATED]Java Environment Variable Setup
[TO BE UPDATED]Getting Started with JShell
[TO BE UPDATED]Snippet, List and Drop
[TO BE UPDATED]JShell Shortcuts
[TO BE UPDATED]Creating Classes
[TO BE UPDATED]InteliJ ID Shell
[TO BE UPDATED]
-
Module System
Introduction
[TO BE UPDATED]Example
[TO BE UPDATED]Creating Module
[TO BE UPDATED]Modular Application and Maven
[TO BE UPDATED]
-
Factory Methods for Collection
Collections Factory Methods
[TO BE UPDATED]
-
Try-with-resources
Try-with-resources
[TO BE UPDATED]
-
-
Java 10 Features
-
Type Interferences with var
var type with Examples
[TO BE UPDATED]
-
GCI Improvements
GC first algorithm Improvements
[TO BE UPDATED]
-
-
Java 11 Features
-
var with Lambda
Adding var to Lambda
[TO BE UPDATED]
-
Epsilon GC
Epsilon GC
[TO BE UPDATED]
-
New HttpClient
HttpClient API
[TO BE UPDATED]
-
-
Java 12 Features
-
Switch Expression
Switch Expression intro with Example
[TO BE UPDATED]Switch Expression with action in cases
[TO BE UPDATED]
-
-
Java 13 Features
-
Switch Expression Enhancements
Switch Expression with Yield
[TO BE UPDATED]
-
TextBlocks
Multiline TextBlocks
[TO BE UPDATED]
-
In this page, I listing down all JDK changes from JDK 1.x to Java SE 12, sequentially. Though I have tried to cover as much as information I can gather, though if you know something which I missed below, please let me know and I will add that information.
Java 12 Features
Java 12 (released on March 19, 2019) is latest version available for JDK. Let’s see the new features and improvements, it brings for developers and architects.
- Collectors.teeing() in Stream API
- String API Changes
- Files.mismatch(Path, Path)
- Compact Number Formatting
- Support for Unicode 11
- Switch Expressions (Preview)
Java 11 Features
Java 11 (released on September 2018) includes many important and useful updates. Let’s see the new features and improvements, it brings for developers and architects.
- HTTP Client API
- Launch Single-File Programs Without Compilation
- String API Changes
- Collection.toArray(IntFunction)
- Files.readString() and Files.writeString()
- Optional.isEmpty()
Java 10 Features
After Java 9 release, Java 10 came very quickly. Unlike it’s previous release, Java 10 does not have that many exciting features, still it has few important updates which will change the way you code, and other future Java versions.
- JEP 286: Local Variable Type Inference
- JEP 322: Time-Based Release Versioning
- JEP 304: Garbage-Collector Interface
- JEP 307: Parallel Full GC for G1
- JEP 316: Heap Allocation on Alternative Memory Devices
- JEP 296: Consolidate the JDK Forest into a Single Repository
- JEP 310: Application Class-Data Sharing
- JEP 314: Additional Unicode Language-Tag Extensions
- JEP 319: Root Certificates
- JEP 317: Experimental Java-Based JIT Compiler
- JEP 312: Thread-Local Handshakes
- JEP 313: Remove the Native-Header Generation Tool
- New Added APIs and Options
- Removed APIs and Options
Java 9 Features
Java 9 was made available on
September, 2017. The biggest change is the modularization i.e. Java modules.
Some important features/changes in Java 9 are:
- Java platform module system
- Interface Private Methods
- HTTP 2 Client
- JShell – REPL Tool
- Platform and JVM Logging
- Process API Updates
- Collection API Updates
- Improvements in Stream API
- Multi-Release JAR Files
- @Deprecated Tag Changes
- Stack Walking
- Java Docs Updates
- Miscellaneous Other Features
Please see the updated release info here.
Java 8 Features
Release Date :
March 18, 2014
Code name culture is dropped. Included features were:
- Lambda expression support in APIs
- Stream API
- Functional interface and default methods
- Optionals
- Nashorn – JavaScript runtime which allows developers to embed JavaScript code within applications
- Annotation on Java Types
- Unsigned Integer Arithmetic
- Repeating annotations
- New Date and Time API
- Statically-linked JNI libraries
- Launch JavaFX applications from jar files
- Remove the permanent generation from GC
Java SE 7 Features
Release Date :
July 28, 2011
This release was called “Dolphin”. Included features were:
- JVM support for dynamic languages
- Compressed 64-bit pointers
- Strings in switch
- Automatic resource management in try-statement
- The diamond operator
- Simplified varargs method declaration
- Binary integer literals
- Underscores in numeric literals
- Improved exception handling
- ForkJoin Framework
- NIO 2.0 having support for multiple file systems, file metadata and symbolic links
- WatchService
- Timsort is used to sort collections and arrays of objects instead of merge sort
- APIs for the graphics features
- Support for new network protocols, including SCTP and Sockets Direct Protocol
Java SE 6 Features
Release Date :
December 11, 2006
This release was called “Mustang”. Sun dropped the “.0” from the version number and version became Java SE 6. Included features were:
- Scripting Language Support
- Performance improvements
- JAX-WS
- JDBC 4.0
- Java Compiler API
- JAXB 2.0 and StAX parser
- Pluggable annotations
- New GC algorithms
J2SE 5.0 Features
Release Date :
September 30, 2004
This release was called “Tiger”. Most of the features, which are asked in java interviews, were added in this release.
Version was also called 5.0 rather than 1.5. Included features are listed down below:
- Generics
- Annotations
- Autoboxing/unboxing
- Enumerations
- Varargs
- Enhanced
for eachloop - Static imports
- New concurrency utilities in
java.util.concurrent Scannerclass for parsing data from various input streams and buffers.
J2SE 1.4 Features
Release Date :
February 6, 2002
This release was called “Merlin”. Included features were:
assertkeyword- Regular expressions
- Exception chaining
- Internet Protocol version 6 (IPv6) support
- New I/O; NIO
- Logging API
- Image I/O API
- Integrated XML parser and XSLT processor (JAXP)
- Integrated security and cryptography extensions (JCE, JSSE, JAAS)
- Java Web Start
- Preferences API (java.util.prefs)
J2SE 1.3 Features
Release Date :
May 8, 2000
This release was called “Kestrel”. Included features were:
- HotSpot JVM
- Java Naming and Directory Interface (JNDI)
- Java Platform Debugger Architecture (JPDA)
- JavaSound
- Synthetic proxy classes
J2SE 1.2 Features
Release Date :
December 8, 1998
This release was called “Playground”. This was a major release in terms of number of classes added (almost trippled the size). “J2SE” term was introduced to distinguish the code platform from J2EE and J2ME. Included features were:
strictfpkeyword- Swing graphical API
- Sun’s JVM was equipped with a JIT compiler for the first time
- Java plug-in
- Collections framework
JDK 1 Features
Release Date :
January 23, 1996
This was the initial release and was originally called Oak. This had very unstable APIs and one java web browser named WebRunner.
The first stable version, JDK 1.0.2, was called Java 1.
On February 19, 1997, JDK 1.1 was released havind a list of big features such as:
- AWT event model
- Inner classes
- JavaBeans
- JDBC
- RMI
- Reflection which supported Introspection only, no modification at runtime was possible.
- JIT (Just In Time) compiler for Windows

