Getting started 4 lessons
1
Getting Started with Java: JDK, JShell and Your First Program
Install the JDK, try code instantly in JShell, and write, run and understand your first Java program.
2
Variables, Data Types and Strings
Store values in variables, pick the right data type, do arithmetic without surprises, and work with Strings and text blocks.
3
Control Flow: if, switch and Loops
Make decisions with if and the modern switch expression, and repeat work with for, for-each and while loops.
4
Methods: Writing Reusable Code
Package logic into methods with parameters and return values, overload them, accept any number of arguments and understand recursion.
Object-oriented Java 3 lessons
5
Classes and Objects
Model real things as classes, create objects with constructors, protect their data with encapsulation and understand static members.
6
Inheritance, Interfaces and Polymorphism
Share behaviour with inheritance, define contracts with interfaces, and write code that works with many types at once through polymorphism.
7
Exceptions: Handling Errors Gracefully
Catch and throw exceptions, clean up with finally and try-with-resources, and create meaningful custom exceptions.
Collections and generics 2 lessons
8
Collections: List, Set and Map
Store groups of objects in Lists, Sets and Maps, choose the right implementation, and avoid the classic collection mistakes.
9
Generics: Type-Safe, Reusable Code
Understand the <T> in Java code — write generic classes and methods, add bounds, and read wildcards like <? extends Number>.
Modern Java (functional programming) 9 lessons
10
Functional Interfaces: The Foundation of Modern Java
Learn the single-method interfaces behind every lambda — Predicate, Function, Supplier, Consumer and friends — and compose them like building blocks.
11
Lambda Expressions: Code You Can Pass Around
Write lambdas in every form, replace anonymous classes, sort and filter with them, and pass behaviour into your own methods.
12
Method References: Lambdas, Even Shorter
Use the :: operator to turn existing methods and constructors into functions — and learn the four kinds of method reference.
13
Closures in Java: Capturing Variables and "Effectively Final
Understand how lambdas capture variables, why Java requires them to be effectively final, and how to build functions that remember their configuration and state.
14
Optional: Say Goodbye to NullPointerException
Model "maybe there's no value" explicitly with Optional — create, transform and unwrap it safely, and learn when not to use it.
15
Streams API: The Basics
Process collections declaratively with streams — filter, map, sort and summarise data in readable pipelines, and understand laziness.
16
Advanced Streams: Collectors, groupingBy and flatMap
Turn streams into reports — group and count with groupingBy, split with partitioningBy, flatten nested data with flatMap, and reduce, join and summarise in one pass.
17
Records, Sealed Types and Pattern Matching
Model data with records, close type hierarchies with sealed interfaces, and take them apart safely with pattern matching in switch (Java 21).
18
CompletableFuture: Asynchronous Java
Run slow work in parallel and combine the results with CompletableFuture — chaining, combining, waiting for many, handling errors and timeouts.