Java is a general purpose high level computer programming language that is concurrent, class based, object oriented, and specifically designed to have as few implementation dependencies as possible. It is intended to let application developers "Write Once, Run Anywhere" (WORA), meaning that compiled Java code can run on all platforms that support Java without the need for recompilation. Java applications are typically compiled to "byte code" that can run on any Java virtual machine (JVM) regardless of the underlying computer architecture.
The latest release of the Java Standard Edition is Java SE 12 on March 19th 2019. With the advancement of Java and its widespread popularity, multiple configurations were built to suit various types of platforms. For example: J2EE for Enterprise Applications, J2ME for Mobile Applications.
The J2 versions were renamed as Java SE, Java EE, and Java ME respectively.
Java programming language was originally developed by Sun Microsystems which was initiated by James Gosling in June 1991 for use in one of his many set-top box projects. The language, initially called ‘Oak’ after an oak tree that stood outside Gosling's office, also went by the name ‘Green’ and ended up later being renamed as Java, from a list of random words. Sun released the first public implementation as Java 1.0 J2SE in 1995. It promised Write Once, Run Anywhere (WORA), providing no-cost run-times on popular platforms.
- Simple - Java is designed to be easy to learn. If you understand the basic concept of OOPs Java, it would be easy to master.
- Object Oriented - In Java, everything is an Object. Java can be easily extended since it is based on the Object model. Object - Oriented means we organize our software as a combination of different types of objects that incorporates both data and behavior.
- Platform Independent - Java is platform independent because Java code is compiled by the compiler and converted into .class file or byte code. This byte code is a platform independent code that can be run on multiple platforms with the help of JVM Java Virtual Machine, JVM is platform dependent.
- Secure - With Java's secure feature it enables to develop virus-free, tamper-free systems. Authentication techniques are based on public-key encryption. Java is best known for its security. With Java, we can develop virus-free systems. Java is secured because -
- No explicit pointer
- Java Programs run inside a virtual machine sandbox
- Classloader - Classloader in Java is a part of the Java Runtime Environment (JRE) which is used to load Java classes into the Java Virtual Machine dynamically. It adds security by separating the package for the classes of the local file system from those that are imported from network sources.
- bytecode verifier - It checks the code fragments for illegal code that can violate access right to objects.
- Security Manager - It determines what resources a class can access such as reading and writing to the local disk.
Java language provides these securities by default. Some security can also be provided by an application developer explicitly through SSL, JAAS, Cryptography, etc.
- Architecture Neutral - Java compiler generates an architecture neutral object file format, which makes the compiled code executable on many processors, with the presence of Java runtime system.
- Portable - Being architecture-neutral and having no implementation dependent aspects of the specification makes Java portable. Compiler in Java is written in ANSI C with a clean portability boundary, which is a POSIX subset.
- Robust - Java makes an effort to eliminate error prone situations by emphasizing mainly on compile time error checking and runtime checking. Robust simply means strong. Java is robust because:
- It uses strong memory management.
- There is a lack of pointers that avoids security problems.
- There is automatic garbage collection in java which runs on the Java Virtual Machine to get rid of objects which are not being used by a Java application anymore.
- There are exception handling and the type checking mechanism in Java. All these points make Java robust.
- Multithreaded - With Java's multithreaded feature it is possible to write programs that can perform many tasks simultaneously. This design feature allows the developers to construct interactive applications that can run smoothly.
- Interpreted - Java byte code is translated on the fly to native machine instructions and is not stored anywhere. The development process is more rapid and analytical since the linking is an incremental and light-weight process.
- High Performance - With the use of Just-In-Time compilers, Java enables high performance.
- Distributed - Java is designed for the distributed environment of the internet, Java is distributed because it facilitates users to create distributed applications in Java. RMI and EJB are used for creating distributed applications. This feature of Java makes us able to access files by calling the methods from any machine on the internet.
- Dynamic - Java is considered to be more dynamic than C or C++ since it is designed to adapt to an evolving environment. Java programs can carry extensive amount of run-time information that can be used to verify and resolve accesses to objects on run-time.