Java is a recently developed concurrent, class-based, object oriented programming language that is:
Simple. It is similar to C++, but with most of the more complex features of C and C++ removed. Java does not provide:
Programmer controlled dynamic memory
Pointer arithmetic
Structs
Typedefs
#define
Object-oriented. Java provides the basic object technology of C++ with some enhancements and some deletions.
Architecture neutral. Java source code is compiled into an architecture independent object code. The object code is interpreted by a Java runtime system.
Portable. Java implements additional portability standards. For example, ints are always 32-bit, 2's-complemented integers. User interfaces are built through an abstract window system that is readily implemented in Solaris and other operating environments.
Distributed. Java contains extensive TCP/IP networking facilities. Library routines support protocols such as Hypertext transfer Protocol (HTTP) and file transfer protocol (FTP).
Robust. Both the Java compiler and the Java interpreter provide extensive error checking. Java manages all dynamic memory for you, checks array bounds, and checks other exceptions.
Secure. features of C and C++ that often result in illegal memory accesses are not in the Java language. The interpreter also applies several tests to the compiled code to check for illegal code. After these tests, the compiled code causes no operand stack over- or underflows, performs no illegal data conversions, performs only legal object field accesses, and the types of all opcode parameters are legal.
High performance. Compilation of programs to an architecture independent machine-like language, results in a small efficient interpreter of Java programs. In the future, the Java environment will also assemble the Java byte code into native machine code at run time.
Multithreaded. Multithreading is built into the Java language. It can improve interactive performance by allowing operations, such as loading an image, to be performed while continuing to process user actions.
Dynamic. Java does not link invoked modules until run time.