Lecture 1 : Introduction To Java : Java
A programming language is a vocabulary and set of grammatical rules for instructing a computer or computing device to perform specific tasks.

History of Programming Languages
Ever since the invention of Charles Babbage’s difference engine in 1822, computers have required a means of instructing them to perform a specific task. This means is known as a programming language. Computer languages were first composed of a series of steps to wire a particular program; these morphed into a series of steps keyed into the computer and then executed; later these languages acquired advanced features such as logical branching and object orientation.
Java :
Java (1995): Java was conceived by James Gosling, Patrick Naughton, Chris Warth, Ed Frank, and Mike Sheridan at Sun Microsystems, Inc. in 1991. Conceived at the beginning, in 1991, as an interactive language named Oak, was unsuccessful. But in 1994 has been rewritten for Internet and renamed Java. In 1995 navigators can run applets. In January 1996, Javasoft distributes JDK 1.0, the Java Development Kit. Java is a object-oriented language, near C++. It compiles in bytecode, interpreted on any computer. It is simpler than C++: one class by file, automatic memory management, no pointers. No multiple inheritance nor operator overloading, but integrated multi-tasking. Unlike C and C++, has only dynamic arrays.
Version History of JAVA:
Many java versions have been released till now. The current stable release of Java is Java SE 11. The versions are:JDK Alpha and Beta (1995)
• JDK 1.0 (23rd Jan 1996)
• JDK 1.1 (19th Feb 1997)
• J2SE 1.2 (8th Dec 1998)
• J2SE 1.3 (8th May 2000)
• J2SE 1.4 (6th Feb 2002)
• J2SE 5.0 (30th Sep 2004)
• Java SE 6 (11th Dec 2006)
• Java SE 7 (28th July 2011)
• Java SE 8 (18th March 2014)
• Java SE 9 (21st Sep 2017)
• Java SE 10 (20th March 2018)
• Java SE 11 (September 2018)
• Java SE 12 (19th March 2019)
• Java SE 13 (17th September 2019)
• Java SE 14 (17th March 2020)
❖ Effective problem-solving:
A language like C has an amazing legacy in programming history but writing software in a top-down language is like playing Jenga while wearing mittens. The more complex it gets, the greater the chance it will collapse. Meanwhile, writing a functional-style program in a language like Haskell or ML can be a chore. Object-oriented programming is often the most natural and pragmatic approach. Once you get the hang of it. OOP languages allows you to break down your software into bite-sized problems that you then can solve one object at a time.
# JDK, JVM and JRE :
• JVM: JVM is the heart of Java programming language. JVM (Java Virtual Machine) is called a virtual machine because it does not physically exist. It is a specification that provides a runtime environment in which Java byte code can be executed. When we run the Java program, Java compiler first compiles the Java file to .class file from which byte code is generated. Then, the JVM translates byte code into native machine code. Because of JVM, java is platform independent. Because when we write Java code, it's ultimately written for JVM but not for the physical machine (computer) we are using.
• JRE: JRE (Java Runtime Environment) is a software package that provides Java class libraries, along with Java Virtual Machine (JVM), and other components to run (not develop) applications written in Java programming. JRE is the superset of JVM. It contains a set of libraries + other files that JVM uses at runtime. JRE is also written as Java RTE.
• JDK: JDK is an acronym for Java Development Kit. The Java Development Kit (JDK) is a software development kit which is used to develop and execute (run) Java
applications. It contains JRE + development tools. When we download JDK, JRE is also downloaded. We don't need to download it separately. JDK is an implementation of any one of the below given Java Platforms released by Oracle Corporation: o Standard Edition Java Platform o Enterprise Edition Java Platform o Micro Edition Java Platform
The JDK contains a private Java Virtual Machine (JVM) and a few other resources such as an interpreter/loader (java), a compiler (javac), an archiver (jar), a documentation generator (Javadoc), etc. to complete the development of a Java Application.
