Object-Oriented – In java everything is an Object. Java can be easily expanded since it is based on the Object model.
Platform independent – C and C++ are platform dependency languages hence the application programs written in one Operating system cannot run in any other Operating system, but in platform independence language like Java application programs written in one Operating system can able to run on any Operating system.
Simple – Java is designed to be easy to learn. If you understand the basic concept of OOP java would be easy to master.
Secure – With Java’s secure feature it enables to develop virus-free, tamper-free systems. Authentication techniques are based on public-key encryption.
Architectural-neutral – Java compiler generates an architecture-neutral object file format which makes the compiled code to be executable on many processors, with the presence Java runtime system.
Portable – being architectural neutral and having no implementation dependent aspects of the specification makes Java portable. Compiler and Java are written in ANSI C with a clean portability boundary which is a POSIX subset.
Robust – Java makes an effort to eliminate error-prone situations by emphasizing mainly on compile time error checking and runtime checking.
Multi-threaded – With Java’s multi-threaded feature it is possible to write programs that can do many tasks simultaneously. This design feature allows developers to construct smoothly running interactive applications.
Interpreted – Java bytecode is translated on the fly to native machine instructions and is not stored anywhere. The development process is more rapid and analytical since the linking is an incremental and lightweight process.
High Performance – With the use of Just-In-Time compilers Java enables high performance.
Distributed – Java is designed for the distributed environment of the internet.
Dynamic – Java is considered to be more dynamic than C or C++ since it is designed to adapt to an evolving environment. Java programs can carry an extensive amount of run-time information that can be used to verify and resolve accesses to objects at run-time.