Simple means here small, easy to use, and easy to learn. For C and C++ programmers the Java language is certainly comprehensible because it can be considered as a cleaned-up version of C++. Dangerous bends in C++ such as explicit memory management and the use of pointers are not present in Java.
Simply stated, in an object-oriented language data and operations on the data are collected in what is called a class. Together, data and operations describe the state and behavior of an object or instance of the class. The operations are called methods. The class is the template or blueprint from which objects are actually made. Classes are arranged in a hierarchy so that a class can inherit behavior from its parent.
An example: a car has a state (speed, direction, fuel consumption, etc.) and a behavior (starts, accelerates, stops, turns, etc.). The class car has subclasses: truck and racing car are two examples. The racing car class inherits behavior from car.
Java comes with classes, arranged in packages, that can be used in programs. For example, the java.awt package contains classes for creating graphical user interfaces.
Java is a strongly-typed language so that many programming mistakes are already revealed at compile time.
Java programs can be developed and run on moderate size computers: a 486 PC with 8 MB memory already suffices.
The original language, first called OAK ( see history of Java, http://www.javasoft.com/nav/whatis/ ), was developed by SUN Microsystems for chips in consumer electronics devices. But soon it was realized that Java is very suitable for Internet applications: it is possible to download a Java program from the Internet and run it inside a Web browser on your local machine. Such a program is called an applet. The Internet applicability explains the immense popularity of Java. The Java model of delivery and execution of computer programs can be best illustrated by clicking on the applet example of the tumbling Java mascot that resides at HTTP address http://www.javasoft.com/applets/TumblingDuke/example1.html. Your screen should contain the following animation:
The Java model of delivery and execution of computer programs puts high requirements on the language: it must be secure so that no external Java program can invade your computer system unauthorized.
Because programs are expected to run on heterogeneous network environments Java is designed as a portable and interpreted language. The Java compiler generates bytecodes, rather than native machine code. Bytecodes is a high-level, architecture neutral, intermediate format that can be transformed into executable machine-code on any platform which implements the Java interpreter and run-time system. Collectively, the interpreter and the run-time system are called the Java Virtual Machine, the hypothetical machine on which Java code runs. Specific implementations of the Java Virtual Machine for specific hardware and software platforms then provide the concrete realization of the virtual machine. The machine-independence of Java should not be underestimated. For example, a graphical user interface implemented with the help of Java GUI-classes will look like a MS Windows application when run on PC's; it will have a Motif look-and-feel on Unix platforms and it will disguise itself as a Macintosh application on computers of this type.
In a network application such as a Web browser you can imagine that more than one thing is done at the same time, for example, scrolling a page while downloading an image. Multithreading is the computer science term for this. Java provides easy support for multiple threads of execution.
Java loads classes as they are needed, even from across a network.