There are some words that are tipically used to describe this new language:
simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, dynamic.
It is simple because of two reasons; one is that a programmer could learn it quickly, because of the small number of language constructs, and the other reason is that it have a familiar look for the programmers.
It is object-oriented, this means, for programmer, that he only focus on the data in his application and methods that manipulates that data.
It is distributed, because it's designed to support applications on networks.
Because the Java compiler generates byte-code, rather than native machine code, Java is an interpreted language. There is a Java interpreter for execute the compiled byte-code.
Its origin as a language for software for consumers electronics means that Java has been designed for writing highly reliable or robust software.
One of the mostly highly touted aspects of Java is that it's a secure language. security actually goes hand-in-hand with robustness. Java's memory allocation model is one of its main defenses against malicious code. Because Java doesn't have pointers, a programmer cannot get behind the scenes and forge pointers to memory.
As we've already seen, this language is compiled to an architecture neutral byte-code format. The primary adventage of this approach is that it allows a Java application to run on any system.
Being architecture neutral is one big part of being portable.
Java is a multithreaded language; it provides support for multiple threads of execution that can handle different tasks.
It was designed to adapt to an evolving environment; it is a dynamic language. Classes in Java also have run-time representation. The run-time class definitions in Java make it possible to dynamically link classes into a running system.