Java has following features:
Compile and Interprete : Java compiler converts Java Source code into Java bytecode. Bytecode is not machine understandable, therefore Java interpreter converts bytecode into machine code that can be directly executed by the machine.
Portable and Plateform Independent : Java programs can be easily transferred from one computer to another, by compiling into bytecode. Bytecode can be interpreted on any system that provides a Java Virtual Machine.
Pure Object Oriented : Java is pure object oriented language b'coz we can't design and develop our programs and applications without object. C++ is not pure object oriented language b'coz we can design and develop our programs and applications, with and without object.
Robust : Java is a robust language because Java supports automatic memory management and exeption handling.
Distributed : Java ha the ability to share and access data remotely using RMI(Remote Method Invocation).
Simple : Java is easier to understand because it supports the C++'s syntax. Java doesn't support pointers, operator overloading, multiple inheritance, etc.
Multithreaded : A thread is a subprocess. Java supports multithreading, that means, Java has the ability to write programs that do multiple tasks simultaneously.
Dynamic : Java allocates memory at runtime for classes, methods and objects. This feature allows programmer to allocate memory when required.