The Java programming language is…
• General-purpose: It is designed to be used for writing software in a wide variety of application domains, and lacks specialized features for any specific domain.
• Statically-typed: the compiler checks at compile time that variable types are respected. For example, if a method expects an argument of type String , that argument must in fact be a string when the method is called.
• Object-oriented: most things in a Java program are class instances, i.e. bundles of state (fields) and behavior (methods which operate on data and form the object’s interface to the outside world).
• Portable: It can be compiled on any platform with javac and the resultant class files can run on any platform that has a JVM.
Java is intended to let application developers “write once, run anywhere” (WORA), meaning that compiled Java code can run on all platforms that support Java without the need for recompilation.
Java code is compiled to bytecode (the .class files) which in turn get interpreted by the Java Virtual Machine (JVM). In theory, bytecode created by one Java compiler should run the same way on any JVM, even on a different kind of computer. The JVM might (and in real-world programs will) choose to compile into native machine commands the parts of the bytecode that are executed often. This is called “Just-in-time (JIT) compilation”.