Java 12 introduces switch expressions. Together with a new lambda-style arrow syntax, this makes switch more expressive and less error-prone.
Java 13 introduces text blocks: string literals that span multiple lines. Learn about syntax, indentation, escape sequences, and formatting.
Tutorial for Java 11's new HTTP/2 API with HttpClient, HttpRequest, and HttpResponse at its center. Shows synchronous and asynchronous request handling.
@Test, Lifecycle, Assertions, Assumptions, And More#post
The Basics of JUnit 5: How to use
@AfterAll, assertions, and assumptions. How to disable, name, and tag tests.
Java 10 introduces the var keyword, which lets the compiler infer local variable types. Here's how var works, why it exists, how it impacts readability.
Tutorial of Java 9 module system basics: declare modules with module-info.java, compile, package, launch them, learn of module path and readability graph.
Java 9 introduces unified logging, a central mechanism configurable with -Xlog to observe class loading, threading, garbage collector, module system, etc.
JDeps is a dependency analysis tool for Java bytecode (class files and JARs). Learn how to use filters, aggregate results, and create diagrams.
So you wrote a nice equals implementation? Great! But now you have to implement hashCode as well. Let’s see how to do it correctly.
A fundamental aspect of any Java class is its definition of equality. It is determined by a class’s equals method. Let's see how to implement it correctly.
A list of the problems that make up JAR hell (classpath hell, dependency hell) and how they relate to development tools like Maven and OSGi.
Covering literally everything there is to know about Java 8's default methods.
An argument for using multiple return statements in a method (as opposed to adhering to the single return myth).