History :

Java was developed by James Gosling in the year 1995. Popularity of java started in the early 90’s when James Gosling & it’s team members undertook projects to build small applications.

Features of Java :

1) Simple :

Java is considered to be very simple programming language,because it’s syntax is simple & very easy to understand. Unlike C,C++ there is no concept of Explicit pointers,operator overloading etc in java,which reduces it’s Complexity.Moreover,Programmers doesn’t need to take care about Memory Management as it is taken care by Garbage Collector,which removes unused/ unreferenced Objects from the memory automatically….

2) Object-Oriented :

Java is a Object-Oriented Programming Language. In java almost everything is an Object, Objects in java has a definite state & behaviour.
Some of the concepts that define java as a Object-Oriented Programming language include:
1) Class, 2) Object ,3) Encapsulation, 4) Data Hiding, 5) Polymorphism, 6) Abstraction, 7) Inheritance, 8) Cohesion & Coupling etc…

3) Platform-Independent :

Java is a platform-independent programming language. When we compile any java source code using a compiler, for each & every classes & interfaces present int that source code corresponding .class file is generated which is nothing but an intermediate binary code known as BYTE CODE .This BYTE CODE is later interpreted by JVM line by line using Interpreter for execution.
The BYTE CODE generated by the compiler can be interpreted by JVM across all platforms, i.e. if we generate BYTE CODE in windows we can run that BYTE CODE across any other platforms like Linux, MacOS etc . This concept is known as WRITE ONCE RUN ANYWHERE(W.O.R.A) & due to this concept Java is considered to be a platform-Independent programming Language….

4) Secure :

Java is considered to be a secure programming language. The Byte code loaded inside memory is verified by Byte-Code verifier for security, which ensures that the Byte code is virus-free & properly formatted.
Java Uses it’s own Runtime Environment for it’s execution,i.e java programs runs inside Virtual Machine Sandbox. Due to this the underlying OS is not being affected during execution….
There is no concept of explicit Pointers in java, we have to properly initialize a particular variable in-order to have access over that variable….

5) Robust :

Java is Robust i.e. Strong programming language due to following reasons:
a) It provides automatic garbage collection using Garbage Collector which is a Daemon Thread that runs in background to get rid of unused/unreferenced Objects from the memory i.e. the Objects that doesn’t have any live reference. Due to this java is known for better Memory Management.
b) There is no concept of explicit pointers, Dynamic memory allocation in java, which reduces complexity.
c) There is concept of exception handling in java, so that the program doesn’t terminate abnormally.

6) Architectural Neutral :

Java is architectural-neutral due to the fact that there is no impact of underlying platform on execution of java program. All data types have fixed size, for both 32-bit & 64-bit processors. Moreover the compiler generated Byte Code can be interpreted across any platforms provided that the underlying platform has a proper Runtime environment to run java application i.e. there is no need of recompilation.

7) Portable :

Java allows you to carry the Byte Code & to be executed in any platforms. It doesn’t require any further manipulations, which makes java a Portable language.

8) Compiled & Interpreted :

Java is both compiled & interpreted programming language, it uses both Compiler & Interpreter. The job of Compiler is to check syntactical errors & if the code is error free it generates .class files/Byte Code.This Byte Code is later interpreted line by line by Interpreter which is the part of the execution engine of JVM to generate output.

9) Multi-Threaded :

Java allows you to run multiple threds inside the same program,i.e inside a java program there can be multiple threads running simultaneously through context switching, where each Thread is allocated a separate independent task.
The main advantage of this approach is that the whole task can be divided into multiple sub-tasks & each of these tasks can be performed concurrently my multiple independent Threads so that the entire task will be executed within a less period of time,which in turn will increase performance of the application.

10) Dynamic :

Java is dynamic as all the classes & interfaces are loaded according to need at runtime by JVM,i.e to execute a java program,JVM first loads the corresponding .class file/Byte Code into memory dynamically at runtime.

11) High performance :

Java has relatively high-performance as compared to other programming languages. The Byte Code generated by compiler is executed & interpreted by JVM execution engine very fast, with the help of JUST IN TIME COMPILER(JIT-COMPILER) which is the part of JVM execution engine. The Jit Compiler,genarate Machine code all at once for repeatedly used same lines of code or the methods which is being called repeatedly, such that the interpreter doesn’t have to re-interpret again,& hence they can be executed directly. This saves a lot of time, reduces Overhead which in turn increases performance of the system.

12) Distributed:

Java is distributed language, as it allows you to split the program into multiple independent sub-parts & each of these parts can be run & executed across different distributed platforms. Each of these sub-parts can communicate with each other based on their requirements. Due to this approach java allows you to develop large scalable applications using RMI(REMOTE METHOD INVOCATION) & EJB(ENTERPRISE JAVABEANS).