Java is an object-oriented programming language (OOP). It has a syntax similar to C++ and is mainly used for to make server side apps (Backend apps), but also desktop apps in addition to native Android apps. To run, Java apps require a Java Runtime Environment (JRE) to be installed on the machine, while for developing them requires a Java Development Kit (JDK). The latter also includes the JRE.
The Java Virtual Machine (JVM) is an imaginary (virtual) machine that is able to run Java files (classes) written in bytecode. The JRE basically contains a JVM to run java programs and Java libraries (APIs).
The programmer writes files with the extension .java, compiles them with a compiler (which checks for errors at compilation time,
as syntax errors) and, if there are no errors, the JAVAC compiler (which is the standard compiler) turns .java files into .class files (written in bytecode).
Often these steps are automated with the help of a IDE, which is a program that helps to write and execute code,
reports compilation errors in realtime and automatically compiles Java classes (.java file) to run the program.
The fact that Java apps run on a JVM makes this language very powerful as it makes the apps portable, i.e. independent by the operating system on which they run (because they run not directly from the OS but from the JVM).
Tools used
JDK 8: https://www.oracle.com/it/java/technologies/javase/javase-jdk8-downloads.html
An IDE: I recommend IntelliJ Community Edition downloadable from this link:
https://www.jetbrains.com/idea/download/#section=windows