Portable: It can run on any machine that has support for Java interpreter
Robust: Its security features, multi-tasking and memory protection provide applications with rock-solid base to work from. Additionally, dynamic binding is supported to added functionality in the run-time environment (monolithic vs. modular). The system manages memory so that when you finish using memory, the system automatically recovers that memory for re-use.
Secure: The features of bytecode and its interpretation, prevent unintentional and intentional sabotage of compiled programs.
Object-oriented: The Java language is fully OO with support for encapsulation, polymorphism, inheritance
High-performance: Multi-threading allows the developer to start more than one task in a program. The programs are faster and more robust because you can do more than one thing a program at a time. The interpreted code can also be compiled at run-time to give almost native code speed.
User Friendly: The Java environment borrows from C, C++ and other OO languages. It took the best from each, while insulating the developer from platform complexity. Many C++ features were removed that caused confusion.