There was a time when your choices for Java IDEs were Eclipse, NetBeans, or IntelliJ IDEA. It has changed somewhat. Among other innovations, Visual Studio Code now offers good support for editing, running, and debugging Java code through a set of Java-specific extensions.
Along with the idea of being lightweight and getting started quickly, Visual Studio Code has IntelliSense code completion for imported variables, methods, and modules. graphical debugging; fluff, multi-cursor editing, parameter hints and other powerful editing features; elegant code navigation and refactoring; and integrated source control, including Git support. Much of this was adapted from Visual Studio technology.
Visual Studio Code extensions can use the Language Server Protocol, which defines the protocol used between an editor or IDE and a language server that provides language features like auto-completion, go to definition, find all references, etc. A language server is intended to provide language-specific intelligence and communicate with development tools via a protocol that enables inter-process communication.
Additionally, extensions can use the Debug Adapter Protocol (DAP), which defines the abstract protocol used between a development tool (such as an IDE or editor) and a debugger. The debug adapter protocol allows you to implement a generic debugger for a development tool that can communicate with different debuggers through debug adapters.