Before we get into the details of the linking process and what it can do for us, let's understand an important step that happens every time you compile and execute a modular Java application. This is a step called module resolution.
Traditionally (pre-Java 9), the Java compiler and Java runtime would to look at a set of folders and JAR files that form the classpath. The classpath is a configurable option that you pass to the compiler during compilation and to the runtimes during execution. In order to have any class file be under the purview of the compiler or runtime, you'd need to first place it in the classpath. Once it's there, every Java type is available for the compiler or the runtime.
Things are different with modules. We don't have to use the generic classpath anymore. Since every module defines its inputs and outputs, there...