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. Here’s all you need to know about syntax, indentation, escape sequences, formatting, and more.
Java 11 ships with a new, fluent HTTP/2 API. This tutorial explains the basic building blocks and how to send requests synchronously and asynchronously.
Get to know the basics of JUnit 5: @Test, lifecycle methods, assertions, and assumptions; how to disable, name, and tag tests; as well as previews on nesting, parameterization, and test interfaces. Let’s write some tests!
Java 10 introduces ‘var’ which lets the compiler infer local variable types. Here’s how it works, why it exists, and how it impacts readability.
Learn all the module system basics in this tutorial: how to declare modules with module-info.java, compile, package, and launch them and what role the module path and readability graph play.
Java 9 introduces unified logging, a central mechanism configurable with -Xlog to observe class loading, threading, the garbage collector, the module system, etc.
Hand in hand with a class’s definition of equality goes a matching implementation of hashCode. Again, there are a couple of things to be considered to get it right. Let’s check ’em out!
A fundamental aspect of any Java class is its definition of equality. It is determined by a class’s equals method and there are a couple of things to be considered for a correct implementation. Let’s check ’em out so we get it right!
A list of the problems that make up JAR hell and how they relate to modern development tools like Maven and OSGi.