Java a programming language provides platform independence, what does it mean? It means the same Java program can be run on any platform or operating system like Windows, Linux or Solaris without any change. This is a great benefit for someone coming from a platform-dependent programming language like C or C++ whose code needs to be ported for every single platform because they use native libraries, which differ in every platform. Now the question comes how Java achieves platform independence, what makes Java programs running on every platform without any change?
This is one of the most basic questions Java programmers ask when they start learning the Java programming language. If you read further you will come to know about class files, bytecode, and Java virtual machine which together provide platform independence to Java.
One of the simplest analogies I can associate with platform independence is the person taking the red carpet with him and instead of walking on the floor, he always walks on the red carpet, no matter where he is walking.
That red carpet is the JVM, your Java program runs on JVM rather than on any particular platform or machine.
Java Compilation and execution
For those who don't know Java is both the compiler and interpreter language. When you compile a Java program creates a .class file which is a collection of byte code, these byte codes are not machine instructions instead they are instructions which Java a virtual machine can understand.
Since every Java program runs on Java virtual machine, the same byte code can be run on any platform. the key is byte code is not machine instruction they are platform-independent instruction to JVM.
On another hand, JVM or Java virtual machine is platform-dependent because it converts byte code into machine level instruction which is platform-specific and that's why you have a different version of JDK and JRE for windows and Linux because both JDK and JRE come with Java virtual machines. if you are confused between JVM, JRE and JDK then read my post on the difference between JDK, JRE, and JVM in Java.
Byte code is created when you compile Java program using Java compiler "javac" and byte code runs on JVM which is created by running the "java" command. In detail when you run "java" command it creates Java virtual machine, loads Main class specified in the command line and calls the standard main method in java.
In summary combination of byte code and JVM makes the Java program platform-independent. Write once run everywhere was Java’s mantra when it started ruling the programming world in the mid and late ’90s.
Always remember, Java programs are platform independent but JVM is not. That's why you have different JVM and JRE installations for different platforms like Mac, Windows, Linux, or Solaris. Similarly, there are different JVM for 32-bit and 64-bit machines.