WHAT IS JAVA?
    Java is an object-oriented programming language developed by Sun Microsystems, and it
     was released in 1995.
    James Gosling initially developed Java in Sun Microsystems (which was later merged
     with Oracle Corporation).
    Java is a set of features of C and C++. It has obtained its format from C, and OOP features
     from C++.
    Java programs are platform independent which means they can be run on any operating
     system with any processor as long as the Java interpreter is available on that system.
    Java code that runs on one platform does not need to be recompiled to run on another
     platform; it's called write once, run anywhere(WORA).
    Java Virtual Machine (JVM) executes Java code, but it has been written in platform-specific
     languages such as C/C++/ASM, etc. JVM is not written in Java and hence cannot be
     platform independent, and Java interpreter is a part of JVM.
WHERE IS JAVA BEING USED
    Earlier Java was only used to design and program small computing devices, but it was later
    adopted as one of the platform-independent programming languages, and now according to
    Sun, 3 billion devices run Java.
    Java is one of the most important programming languages in today's IT industries.
    JSP - In Java, JSP (Java Server Pages) is used to create dynamic web pages, such as in PHP
     and ASP.
    Applets - Applets are another type of Java programs that are implemented on Internet
     browsers and are always run as part of a web document.
    J2EE - Java 2 Enterprise Edition is a platform-independent environment that is a set of
     different protocols and APIs and is used by various organizations to transfer data between
     each other.
    JavaBeans - This is a set of reusable software components that can be easily used to create
     new and advanced applications.
    Mobile - In addition to the above technology, Java is widely used in mobile devices
     nowadays, many types of games and applications are being made in Java.
  TYPES OF JAVA APPLICATIONS
1. Web Application - Java is used to create server-side web applications. Currently, Servlet,
   JSP, Struts, JSF, etc. technologies are used.
2. Standalone Application - It is also known as the desktop application or window-based
   application. An application that we need to install on every machine or server such as media
   player, antivirus, etc. AWT and Swing are used in java for creating standalone applications.
3. Enterprise Application - An application that is distributed in nature, such as banking
   applications, etc. It has the advantage of the high-level security, load balancing, and
   clustering. In Java, EJB is used for creating enterprise applications.
4. Mobile Application - Java is used to create application software for mobile devices.
   Currently, Java ME is used for building applications for small devices, and also Java is a
   programming language for Google Android application development.
   JAVA VERSION HISTORY
   Many java versions have been released till now. The current stable release of Java is Java SE
   10.
      1. JDK Alpha and Beta (1995)
      2. JDK 1.0 (23rd Jan 1996)
      3. JDK 1.1 (19th Feb 1997)
      4. J2SE 1.2 (8th Dec 1998)
      5. J2SE 1.3 (8th May 2000)
      6. J2SE 1.4 (6th Feb 2002)
      7. J2SE 5.0 (30th Sep 2004)
      8. Java SE 6 (11th Dec 2006)
      9. Java SE 7 (28th July 2011)
      10. Java SE 8 (18th March 2014)
      11. Java SE 9 (21st Sep 2017)
      12. Java SE 10 (20th March 2018)
      13. Java SE 11 (25th Sep 2017)
Java SE 8 (March 18, 2014)
Its codename was Spider. Although, codenames have been discontinued, but the
codename Spider is common among java developers.
It includes some features which were proposed for Java SE 7 but added in Java SE 8.
  o   Language-level support for Lambda expressions.
  o   Allowed developers to embed JavaScript code within applications.
  o   Annotation of Java Types.
  o   Provided Date and Time API.
  o   Repeating Annotations.
  o   Launching of JavaFX applications.
  o   Removal of permanent generation.
Java SE 8 is not supported in Windows XP but after JDK 8 update 25, we can install and run
it under Windows XP.
Java 8 is set as a default version to download from java.com from October 2014.
Java SE 9 (September 21, 2017)
In 2016, Oracle discussed some features to release in Java 9. It was hoped that Java 9 would
include better support for multi-gigabyte heaps, better native code integration, a different
default garbage collector and a self-tuning JVM. The release of Java 9 was postponed many
times and finally it was released on September 21, 2017.
It includes some specific features:
  o   Modularization of the JDK under Project Jigsaw.
  o   Provided Money and Currency API.
  o   Tight integration with JavaFX.
  o   Java implementation of reactive streams.
  o   More Concurrency Updates.
  o   Provided Java Linker.
  o   Automatic scaling and sizing.
Java SE 10 (March, 20, 2018)
Java SE 10 was released to remove primitive data types and move towards 64-bit
addressable arrays to support large data sets.It was released on 20 March 2018, with twelve
new features confirmed. These features are:
  o   Local-Variable Type Inference
  o   Experimental Java-Based JIT Compiler This is the integration of the Graal dynamic
      compiler for the Linux x64 platform
  o   Application Class-Data Sharing This allows application classes to be placed in the
      shared archive to reduce startup and footprint for Java applications
  o   Time-Based Release Versioning
  o   Parallel Full GC for G1
  o   Garbage-Collector Interface
  o   Additional Unicode Language-Tag Extensions
  o   Root Certificates
  o   Thread-Local Handshakes
  o   Heap Allocation on Alternative Memory Devices
  o   Remove the Native-Header Generation Tool - javah
  o   Consolidate the JDK Forest into a Single Repository
Java SE 11
JDK 11 was released on September 25, 2018 and the version is currently open for bug fixes.
Among others, Java 11 includes a number of new features, such as:
     JEP 309: Dynamic class-file constants
     JEP 318: Epsilon: a no-op garbage collector
     JEP 323: Local-variable syntax for lambda parameters
     JEP 331: Low-overhead heap profiling
     JEP 321: HTTP client (standard)
     JEP 332: Transport Layer Security (TLS) 1.3
     JEP 328: Flight recorder
     JavaFX, Java EE and CORBA modules have been removed from JDK.
    FEATURES OF JAVA
    Object-Oriented - Java supports the features of object-oriented programming. Its object
     model is simple and easy to expand.
    Platform independent - C and C++ are platform dependency languages hence the application
     programs written in one Operating system cannot run in any other Operating system, but in
     platform independence language like Java application programs written in one Operating
     system can able to run on any Operating system.
    Simple - Java has included many features of C / C ++, which makes it easy to understand.
    Secure - Java provides a wide range of protection from viruses and malicious programs. It
     ensures that there will be no damage and no security will be broken.
    Portable - Java provides us the concept of portability. Running the same program with Java
     on different platforms is possible.
    Robust - During the development of the program, it helps us to find possible mistakes as
     soon as possible.
    Multi-threaded - The multithreading programming feature in Java allows you to write a
     program that performs several different tasks simultaneously.
    Distributed - Java is designed for distributed Internet environments as it manages the TCP/IP
     protocol.
    Popular Java Editors
    You will need a text editor to write Java programs. There is even more sophisticated IDE
    available in the market. But for now, you can consider one of the following:
    Notepad - On Windows machine, you can use any simple text editor like Notepad
     (Recommended for this tutorial), TextPad.
    Netbeans - is a Java IDE that is open source and free which can be downloaded
     from http://www.netbeans.org/index.html
    Eclipse - is also a java IDE developed by the Eclipse open source community and can be
     downloaded from http://www.eclipse.org/