The Java language features are more fully described below:
simple. Java was designed with a small number of language constructs so that programmers could learn it quickly. It eliminates several language features available in C/C++ that are associated with poor programming practices or rarely used: goto statements, header files, structures, operator overloading, multiple inheritance and pointers.
object-oriented. Java is an OOPL that supports the construction of programs that consist of collections of collaborating objects. These objects have a unique identity, encapsulate attributes and operations, and are instances of classes related by inheritance and polymorphism.
distributed. Java is designed to support various levels of network connectivity. Java applications are network aware: TCP/IP support is built into Java class libraries. They can open and access remote objects on the Internet.
interpreted. Java is compiled to bytecodes, which are interpreted by a Java run-time environment.
robust. Java is designed to eliminate certain types of programming errors. Java is strongly typed, which allows extensive compile-time error checking. It does not support memory pointers, which eliminates the possibility of overwriting memory and corrupting data. In addition, its automatic memory management (garbage collection) eliminates memory leaks and other problems associated with dynamic memory allocation/de-allocation.
secure. Java is designed to be secure in a networked environment. The Java run-time environment uses a bytecode verification process to ensure that code loaded over the network does not violate Java security constraints.
architecture neutral. Java applications that are compiled to bytecodes can be interpreted by any system that implements the Java Virtual Machine. Since the Java Virtual Machine is supported across most operating systems, this means that Java applications are able to run on most platforms.
portable. In addition to supporting architecture neutrality, Java ensures that other implementation-dependent aspects of language specification are eliminated. For example, Java specifies the sizes of primitive data types and their arithmetic behavior.
high performance. Although Java is an interpreted language, it was designed to support “just-in-time” compilers, which dynamically compile bytecodes to machine code.
multithreaded. Java supports multiple threads of execution (a.k.a., lightweight processes), including a set of synchronization primitives. This makes programming with threads much easier.
dynamic language. Java supports dynamic loading of classes (a.k.a. “load on demand”), dynamic compilation, and automatic memory management (garbage collection).