100+ Solutions in Java: A Hands-On Introduction to Programming in Java (English Edition)
By Dhruti Shah
()
About this ebook
This book follows a practical approach by providing ample examples and assignments for you to test your understanding of each concept. You will also get familiar with the important features introduced in Java 10. This book is a “beginner’s guide” that will help you upskill your knowledge in Java. By the end of the book, you will know the different features introduced in Java over the years and will learn to implement these features to develop real-world applications.
Dhruti Shah
Dhruti Shah is an award-winning journalist with more than a decade’s experience at the BBC. She studied English at Oxford University before embarking on a career in journalism. She trained on local newspapers before making the jump to international news. She has a reputation for unearthing unusual and underreported stories stemming a wide beat. She is an Ochberg Fellow at the Dart Centre for Trauma Journalism at Columbia University, New York and a Rotary International Peace Fellow.
Read more from Dhruti Shah
Node.JS Guidebook: Comprehensive guide to learn Node.js Rating: 0 out of 5 stars0 ratings100+ Solutions in Java - 2nd Edition: Everything you need to know to develop Java applications (English Edition) Rating: 0 out of 5 stars0 ratingsBear Markets and Beyond: A bestiary of business terms Rating: 0 out of 5 stars0 ratings
Related to 100+ Solutions in Java
Related ebooks
Java Core Interview Questions and Answers. Tech interviewer’s notes Rating: 1 out of 5 stars1/5Java: Best Practices to Programming Code with Java Rating: 0 out of 5 stars0 ratingsCore Java Professional: For First Time Learner's. Rating: 0 out of 5 stars0 ratingsJava 9 Concurrency Cookbook - Second Edition Rating: 0 out of 5 stars0 ratingsJava 9 Programming By Example Rating: 4 out of 5 stars4/5JAVA Programming for Beginners: The Simple Guide to Learning JAVA Programming fast! Rating: 0 out of 5 stars0 ratingsLearn Java 12 Programming: A step-by-step guide to learning essential concepts in Java SE 10, 11, and 12 Rating: 0 out of 5 stars0 ratingsProgramming Constructs in Java Rating: 1 out of 5 stars1/5Java Coding Problems: Improve your Java Programming skills by solving real-world coding challenges Rating: 0 out of 5 stars0 ratings(Part 1) Absolute Beginner: Java 4 Selenium WebDriver: Come Learn How To Program For Automation Testing Rating: 0 out of 5 stars0 ratingsJAVA for Beginner's Crash Course: Java for Beginners Guide to Program Java, jQuery, & Java Programming Rating: 4 out of 5 stars4/5Java: Advanced Guide to Programming Code with Java: Java Computer Programming, #4 Rating: 0 out of 5 stars0 ratingsJAVA 9.0 To 13.0 New Features: Learn, Implement and Migrate to New Version of Java. Rating: 0 out of 5 stars0 ratings(Part 2) Java 4 Selenium WebDriver: Come Learn How To Program For Automation Testing Rating: 0 out of 5 stars0 ratingsJava Core Interview in Australia. Questions and Answers. Tech interviewer’s notes Rating: 0 out of 5 stars0 ratingsJava for Black Jack: Learn the Java Programming Language in One Session by Writing and Running a Java-Based Card Game Simulation Rating: 0 out of 5 stars0 ratingsJava for Beginners: A Crash Course to Learn Java Programming in 1 Week Rating: 5 out of 5 stars5/5Learn Java: A Crash Course Guide to Learn Java in 1 Week Rating: 3 out of 5 stars3/5(Part 2) Java 4 Selenium WebDriver: Come Learn How To Program For Automation Testing Rating: 0 out of 5 stars0 ratingsMastering Core Java: From Basics to Expert Proficiency Rating: 0 out of 5 stars0 ratingsJava: Programming: Your Step by Step Guide to Easily Learn Java in 7 Days Rating: 4 out of 5 stars4/5Java 9 with JShell Rating: 0 out of 5 stars0 ratingsIntroduction to JVM Languages Rating: 0 out of 5 stars0 ratingsThe Java Workshop: Learn object-oriented programming and kickstart your career in software development Rating: 0 out of 5 stars0 ratingsMastering Java: A Comprehensive Guide to Programming Excellence Category Rating: 0 out of 5 stars0 ratingsJava SE 21 Developer Study Guide Rating: 5 out of 5 stars5/5Professional Java EE Design Patterns Rating: 0 out of 5 stars0 ratingsJAVA Programming Simplified: From Novice to Professional - Start at the Beginning and Learn the World of Java Rating: 0 out of 5 stars0 ratingsJava: Best Practices to Programming Code with Java: Java Computer Programming, #3 Rating: 0 out of 5 stars0 ratings
Programming For You
SQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL Rating: 4 out of 5 stars4/5Python: Learn Python in 24 Hours Rating: 4 out of 5 stars4/5SQL All-in-One For Dummies Rating: 3 out of 5 stars3/5Coding All-in-One For Dummies Rating: 0 out of 5 stars0 ratingsExcel : The Ultimate Comprehensive Step-By-Step Guide to the Basics of Excel Programming: 1 Rating: 5 out of 5 stars5/5Python Programming : How to Code Python Fast In Just 24 Hours With 7 Simple Steps Rating: 4 out of 5 stars4/5HTML in 30 Pages Rating: 5 out of 5 stars5/5Linux: Learn in 24 Hours Rating: 5 out of 5 stars5/5Coding All-in-One For Dummies Rating: 4 out of 5 stars4/5JavaScript All-in-One For Dummies Rating: 5 out of 5 stars5/5Excel 101: A Beginner's & Intermediate's Guide for Mastering the Quintessence of Microsoft Excel (2010-2019 & 365) in no time! Rating: 0 out of 5 stars0 ratingsPython Data Structures and Algorithms Rating: 5 out of 5 stars5/5Learn to Code. Get a Job. The Ultimate Guide to Learning and Getting Hired as a Developer. Rating: 5 out of 5 stars5/5C Programming Language, A Step By Step Beginner's Guide To Learn C Programming In 7 Days. Rating: 4 out of 5 stars4/5Python: For Beginners A Crash Course Guide To Learn Python in 1 Week Rating: 4 out of 5 stars4/5Microsoft Azure For Dummies Rating: 0 out of 5 stars0 ratingsSpies, Lies, and Algorithms: The History and Future of American Intelligence Rating: 4 out of 5 stars4/5Learn PowerShell in a Month of Lunches, Fourth Edition: Covers Windows, Linux, and macOS Rating: 5 out of 5 stars5/5Algorithms For Dummies Rating: 4 out of 5 stars4/5
Reviews for 100+ Solutions in Java
0 ratings0 reviews
Book preview
100+ Solutions in Java - Dhruti Shah
CHAPTER 1
Introduction to Java
This chapter introduces the concept of object-oriented programming and explains how Java has evolved as an object-oriented programming (OOP) language. You will learn about the various versions and features of Java and the steps to install a Java Development Kit (JDK). You will also learn to create an application by using JDK 8 and JDK 10.
Structure
Introduction to object-oriented programming
Java programming language
Java platform and editions
Java SE platform components
Java SE version history
Features of Java SE 9 and Java SE 10
Downloading and Installing JDK 8 and JDK 10
Setting up the path for JDK
Java application development
Structure of a Java program
Java code compilation and execution
Creating and executing a Java program using JDK 8
Creating and Installing a Java program using JDK 10
Creating and executing a Java 8 project in NetBeans
Creating and executing a Java 10 project in NetBeans
Objectives
Learn the concept of object-oriented programming
Learn to download and install JDK 8 and JDK 10
Understand the structure of a Java program
Learn to develop a Java project in NetBeans
1.1 Introduction to object-oriented programming
With the advancement in technology and the increasing complexity of software, a requirement of new and flexible modes of programming was observed. A need to make reliable software, reduce the overall development and maintenance cost, and deliver the software within timelines, resulted in the development of the object-oriented programming model.
The primary focus of object-oriented programming is on objects. Any real-world entity that has certain characteristics and behavior that can be used to describe it is considered as an object. There are several objects that have certain common characteristics. These can be grouped into categories or classes. Thereby, every object of a class will be considered as an instance of that class. Programmatically, a class is a structure that contains the data (characteristics) and methods (behavior) to work on that data.
For example, a class Vehicle can have characteristics such as color and type, and behavior such as start, stop, accelerate, etc. The following image shows a Unified Modeling Language (UML) class diagram representation of the Vehicle class:
Figure 1.1: Class Diagram
Here, the Fields represent the characteristics and Methods represent the behavior of the object. The Vehicle class can then have instances of types of vehicles such as bike, bicycle, car, etc. This is explained in detail in the following image:
Figure 1.2: Object of Vehicle Class
Here, the object bike has the characteristics color=blue and type=motorcycle with the behavior, including start, stop, and accelerate. Similarly, there can be other instances of the Vehicle class such as car, bicycle, etc. with the same or different values for characteristics and similar behavior.
An object-oriented programming language is based on the following principles:
Encapsulation: To encapsulate means to enclose. Hence, encapsulation allows you to enclose the data members and methods into a closed structure called a class. Encapsulation ensures data security through data hiding so that a user cannot access the members of a class directly.
Abstraction: Abstraction is a programming concept in which the non-essential details of an entity are hidden from user view. For example, in the case of a washing machine, the user only presses the button on a digital panel to set up the process and start the machine. However, the internal functioning of the washing machine is not known to the user. This means that the non-essential aspect of how the washing machine washes the clothes is abstracted from the user. Similarly, abstraction can also be implemented in code to hide the unnecessary details from the user.
Inheritance: To inherit means to acquire some feature or asset from an ancestor. For example, a child acquires certain aspects of physical appearance and certain behavior of his/her biological parents. In programming also, inheritance plays a similar role. It allows us to combine the common characteristics and behavior of objects into a parent class also called a superclass. This class can then be inherited by other classes that allow a developer to extend and reuse the feature of existing classes. The new/inherited classes are called child classes, derived classes, or subclasses.
Polymorphism: Polymorph is a combination of words poly which means many and morph which means forms. This polymorph is an object that can have multiple forms/behaviors? For example, a chameleon can change its color as per the environment to protect itself from predators. In programming, polymorphism is the ability of an object to behave in different ways based on requirements. Polymorphism can be implemented in several ways in programming based on the programming language used.
1.2 Java programming language
Java is a popular object-oriented, platform-independent programming language. It allows you to develop a variety of applications that can run on different hardware and operating systems. Java also provides a runtime environment for executing Java applications on different devices.
Java was originally developed in 1991 by James Gosling and a team of engineers at Sun Microsystems which was later acquired by Oracle Corporation. It was initially designed for consumer devices such as washing machines, televisions, etc. For such devices, it was necessary to have a language that was small, efficient, fast, and platform-independent. Languages such as C and C++ were not preferred due to the compiler’s dependence on specific CPUs and also high development time and cost. Thus, Java was developed as a portable and platform-independent language that could execute code on any platform. Initially, it was named Oak but later renamed to Java.
Even though Java was developed to cater to the programming needs for smaller devices, it was found to be able to address larger problems, including check casing of Web and mobile applications. It gained instant popularity and was adopted all over the world for the development of applications, ranging from embedded, desktop, Web, and mobile applications. Java can be used to create applications for small to large businesses and even for supercomputers.
1.2.1 Features and advantages of Java
Following are some features and advantages of the Java programming language:
Simple and robust: The Java syntax is derived from its predecessor programming languages like C, C++. This makes it easy for developers to learn Java quickly. Further, the complexity of pointers, operator overloading, multiple inheritances and other such features has been removed in Java. Instead, it has been made more robust through efficient memory management and exception handling features.
Object-oriented: Java is based on the object-oriented programming paradigm. Thereby, it is well suited for the development of real-world applications.
Platform independent: Java provides a solution to a major problem faced by earlier languages, that is, code portability. During compilation, it converts the source code into an intermediate, architecture-neutral format called bytecode. This bytecode can be executed on any platform which has a Java Virtual Machine (JVM) installed. Further, even the language specifications, such as the size of primitive data types and operators, have been defined to be independent of the hardware. This ensures that the code will function properly in case of a change in the operating system, processor, or system resources.
Secure: Security is an important issue in Java applications since they are designed for multiple and distributed platforms. Java provides security checks at different levels during application development. The JVM is designed to apply its security features during code execution to ensure that the code is well-formed and written as per Java standards.
Multithreaded: Java supports the development of multithreaded applications to perform multiple tasks concurrently. In a multithreaded application, a single program can have multiple threads performing tasks independently and concurrently. Java allows you to create thread pools that can be used to obtain threads when required.
Distributed and dynamic: Java supports distributed programming to deploy and access resources across the network. It provides several Application Programming Interfaces (APIs) to handle remote transmission and requests over a network. Java also allows dynamic execution of classes by storing them in a separate location and loading the necessary classes dynamically at runtime.
Modular: The concept of modularity has been introduced since Java 9. It was supposed to be incorporated in Java 7 and Java 8 but was not accomplished. Until Java 1.8, the packages were bundled into executable .jar files for a Java application. But, with Java 9, a new construct called Module has been introduced. A module is similar to the JAR file but unlike the JAR file, it also contains the configuration information in the form of a module-info.java file. This allows a module to be more powerful and flexible as compared to a JAR file since all dependencies are specified in the module-info.java file. While using a JAR file, the entire JAR file is loaded during application execution, but with the module, only those modules that are part of the dependency list will be loaded. This allows applications to remain light-weight as well as execute faster.
1.3 Java platform and editions
The Java platform is a development and execution environment for Java applications which is a mixture of software and hardware components. The following image shows the components of a Java platform:
Figure 1.3: Java platform
The above figure depicts the components of a Java platform. It is formed of the Java Runtime Environment (JRE) which contains the Java library (Java API) and Java Virtual Machine (JVM). In languages such as C and C++, the compiled code is platform dependent as it is in the form of executable binary code. However, the Java compiler converts the code into an intermediate bytecode which is an optimized set of instructions that can be executed on any machine that has the appropriate JVM. Thus, JVM provides platform independence to Java code. Each operating system such as Windows, Linux, Mac, etc. has its JVM. Thus, Java code follows the principle of write-once use many.
The Java API/library is a collection of ready-to-use components such as call uses and interfaces that can be used to create applications. For example, the Swing library is used to create a user interface (UI) of a Java application. Java is released under several editions to meet the requirements of a specific type of device and application. The following is a brief description of the different Java editions:
Java Standard Edition (Java SE): The Java SE platform is the base for creating applications that are console or network-based applications mainly for desktop computers. It contains the core APIs which include the basic types and classes for higher-level programming such as networking, security, Graphical User Interface (GUI), database manipulation, and parsing of XML data. It also provides the virtual machine, development and deployment tools, and other toolkits and libraries for advanced programming.
Java Enterprise Edition (Java EE): The Java EE platform is an extension of the Java SE platform. It provides the tools and APIs for the creation and deployment of large-scale, distributed, scalable, multi-tier, reliable, and secure enterprise applications with complex business logic.
Java Micro Edition (Java ME): The Java ME platform is mainly used for creating embedded Java applications for small devices such as mobiles, TVs set-top boxes, etc. It contains a subset of Java SE APIs and a smaller virtual machine to execute Java programs on small devices with lesser memory and storage space. Java ME applications are generally used as clients of Java EE platform services.
JavaFX: The JavaFX platform provides lightweight user interface APIs for creating rich internet applications that use hardware-accelerated graphics and media engines. Java FX allows you to create high-performance graphic applications with a modern look-and-feel. It also provides high-level APIs to connect with data sources over the network. JavaFX applications can also be used as clients of Java EE platform services.
1.4 Java SE platform components
The two important Java SE platform components are Java Runtime Environment (JRE) and Java Development Kit (JDK). The JRE contains all the Java libraries required to execute a Java program whereas the JDK contains the libraries required to develop Java programs and is distributed for different platforms like Windows, MacOS X, Linux, etc. The JDK comprises the tools required for application development, compilation, debugging, etc. It also has its own JRE to execute and test Java applications. The following image shows the different Java SE platform components:
Figure 1.4: Java SE platform
The brief descriptions of the tools and libraries are given below:
Development Tools and APIs: The tools and utilities form the base for Java development. The development tools include the javac compiler, Java launcher, a Javadoc documentation tool, etc. The Java APIs are ready-to-use classes and interfaces for different functionalities such as networking, XML parsing, GUI creation, database manipulation, and many more.
Deployment Tools: The JDK provides software for deploying applications on target machines. Java Web Start and Java Plug-In are examples of deployment tools.
User Interface Toolkits: The JDK comes bundled with UI toolkits such as Swing, Java2D, and Abstract Window Toolkit (AWT) for the development of graphical user interfaces in Java applications.
Integration Libraries: Integration libraries such as Java Database Connectivity (JDBC), Java Naming and Directory Interface (JNDI), etc. provide access to databases and remote objects for data manipulation and network access.
Other Base Libraries: These libraries include APIs for file manipulation, networking, XML parsing, security, internationalization, and so on.
Language and Utility Libraries: These libraries include Math, Collections, Logging, Regular Expressions, etc. that allow you to perform manipulation of data in a Java program.
1.5 Java SE version history
The Java Standard Edition (Java SE) is a platform for the development of robust, reliable, and secure applications with the development tools, APIs, utilities, and runtime environment provided by the Java Development Kit (JDK). The JDK has undergone several modifications over the years with some major enhancements and new features added with every new release. The following table lists the different releases of JDK with the corresponding features and enhancements:
Table 1.1: Versions of Java
1.6 Features of Java SE 9 and Java SE 10
The release, Java 8, was full of various new features that had made a significant impact on application development with Java. Until JDK 8, every JRE had all the classes for the runtime bundled into a single Java Archive (JAR) called rt.jar that was present in the lib directory. This led to a large number of unnecessary classes getting added to the runtime leading to overhead for the JVM. Thus, the JAR becomes bulky in size and the execution environment is forced to deal with all the classes whether or not they are used.
But Java SE 9 comes with more versatility and customization and a hoard of new features. The most important of them is the Jigsaw project which applies the new module system to break the JRE into reusable and interoperable components. The programming code is divided into modules that contain the tasks to be executed by them. This makes programs reusable and easier to manage and debug.
Another advantage of modularity is that it makes the Java platform more lightweight and scalable so that programs can run on smaller devices with fewer resources. The modular JRE can be used even with embedded systems allowing IoT apps to be coded by using Java.
Here are some new and exciting features of Java SE 9:
Java Platform Module System (JPMS): This is the most important feature of Java SE 9. The important issues encountered with the growing codebase of a system are:
Difficulty to encapsulate code
Lack of clarity of dependencies among the various aspects (JARs)
Easy access of public classes on the classpath leading to injudicious usage
Lack of surety about the availability of all required JARs on the classpath
All these issues are addressed by the module system by using a module descriptor within the modular JARs. In this file, a module can define the list of all other modules on which it is dependent by using the requires statements. Further, to make packages of a module accessible to other modules, the exports keyword is used. If the exports keyword is not used with a package, it is encapsulated in that module by default as shown in the in the following image:
Figure 1.5: Module dependencies
Note that module mod1 requires the module mod2. Both modules have packages that are encapsulated (as indicated by the shield symbol) as they are not exported. This ensures that the classes of the packages do not get accessed accidentally. Programmatically, this can be depicted as shown below:
module mod1 {
exports com.mod1;
requires mod2;
}
Similarly, the entire Java platform has been modularized by encapsulating the internal classes of JDK, thereby, making it more secure and flexible. Unlike, JARs, the JVM verifies the classpath for the existence of all dependent modules specified by using the requires statement. This avoids unexpected errors and code crash during execution encountered earlier due to missing JARs.
Linking: You can create a minimal runtime by adding only the modules that are needed to execute and application. This can be done by using the new jlink tool provided with Java 9. The modularized JDK and the module descriptor file which contains explicit dependencies mentioned in it, make it possible to create such minimal runtime. Thus, you can create a minimal and optimized runtime and avoid a bulky JDK installation.
JShell: JShell is a new Read-Eval-Print-Loop (REPL) interactive terminal of JDK 9. You can launch the jshell from the console and type and execute Java code directly from it. When a code is executed, it gives immediate feedback which allows you to try and explore new APIs and language features. You can also test regular expressions in Java by using the interactive shell.
Enhanced Javadoc: Javadoc now provides a built-in search facility in the API documentation. Further, the new Javadoc is HTML5 compliant and every page includes information about the JDK module to which a class or interface belongs.
Collection Factory Methods: Java SE 9 brings a new feature with factory methods for collections such as List, Set, etc. This helps a developer to quickly populate collections in one statement instead of using several add calls. For example,
Set
These collections are immutable, that is, items cannot be added to these collections after creation, else it will throw the UnsupportedOperation Exception exception. The use of factory methods makes the code shorter and avoids section of a specific implementation of the collection type.
Enhancements in Stream API: Java SE 9 adds more features to the Streams API by allowing declarative pipelines of transformations on collections. It adds new methods to the Stream interface namely, dropWhile, takeWhile, ofNullable, and provides an overloaded version of the iterate method to provide an expression to stop iterating. This is shown in the following example:
IntStream.iterate(1, num -> num < 10, num -> num + 1).forEach(System.out::println);
The lambda expression in the second argument returns true until num becomes 100 and prints the integers from 1 to 99.
Further, it is possible to convert an Optional object to a Stream object.
Stream
Private interface methods: Java SE 8 introduced the concept of default methods for interfaces. But interfaces were allowed only method signatures without any implementation. With Java SE 9, interfaces can also have methods with behavior and private helper methods to implement shared code that can be invoked from multiple default methods. This is explained in the following code:
public interface Interface1 {
void interfaceMethodWithOnlySignature();
default void interfaceDefaultMethod() {initProcess();}
default void interfaceDefaultMethod1() {initProcess();}
// Private method that is not part of the public API exposed by Interface1
private void initProcess() {
System.out.println(Initializing the Process
);
}
}
Thus, private interface methods can help to structure the implementation of APIs with default methods.
HTTP/2: Java 9 introduces a new way of performing HTTP calls by using the HTTPClient API as a replacement for the old HttpURLConnection API which also supports WebSockets and HTTP/2:
HttpClient client = HttpClient.newHttpClient();
Multi-release JARs: Java SE 9 brings the feature of multi-release JARs as a solution to bulky JARs resulting from deprecated libraries retained for backward compatibility. This feature allows you to create alternate versions of classes that will be used only when the library is run on a specific version of Java.
This is explained in the following image:
Figure 1.6: Multi-release JAR
The above image shows a multirelease.jar file with a Helper class at the top level as well as the Java 9 specific version. This indicates that while working with Java 9, the multirelease.Helper class under the META-INF/versions/9 folder will be used, can use Java 9 features and libraries. The JAR will however work with earlier versions as well in which case, the top-level multirelease. Helper class will be used.
Features of Java SE 10
JDK 10 follows the modular model of JDK 9 and provides enhancements on the features and functionalities of JDK 9. JDK 10 does not bring any major changes or improvements over JDK 9 but it does act as the first release in the new, six-monthly release cadence announced by Oracle. Slated to be just a short-term release, the public updates for JDK 10 will end in 6 months. The next version JDK 11 is scheduled for release in September 2020 and it will be a long-term support (LTS) version of Java.
Listed below are the new features and enhancements in Java SE 10:
Application Data-Class Sharing (CDS): This JDK Enhancement Proposal (JEP) is an extension to the existing CDS feature which allows you to store the application classes into a shared archive to improve startup.
Parallel Full GC for G1: A full parallel GC improves the worst-case latencies of the F1 garbage collector.
Garbage Collector Interface: JDK 10 introduces the garbage collector (GC) interface to improve the source code isolation of different garbage collectors.
Combine the multiple JDK repositories into a Single Repository: This feature is incorporated to simplify and streamline development.
Local-Variable Type Inference: This enhancement allows you to extend type inference to declarations of local variables with initializers. It also introduces var to Java.
Thread Callbacks: JDK 10 introduces the possibility to stop individual threads instead of all threads or none by executing a callback on threads without performing a global VM safepoint.
Time-Based Release Versioning: It introduces a new time-based release versioning for the version-string scheme of the Java SE Platform and the JDK.
Other features: Several other high-level features include:
A default set of root Certification Authority (CA) certificates in the JDK.
Enabling heap allocation on alternative memory devices specified by the user.
Using Graal, the Java-based JIT compiler, as an experimental JIT compiler on the Linux/x64 platform.
Enhanced java.util.Locale and related APIs to implement additional Unicode extensions.
1.7 Downloading and installing JDK 8 and JDK 10
In order to understand the difference between old JAR-based and new module-based JDK, download and install JDK 8 and JDK 10 for Windows from Oracle’s official download page.
The JDK 8 Downloads page is shown in the following screenshot:
Figure 1.7: JDK 8 Download Page
Download the JDK 8 installer for Windows x64 and install JDK 8 by double-clicking on the downloaded installer executable. The steps to download and install JDK 10 are as follows:
Open the JDK 10 Downloads page. The JDFK 10 Download page is shown in the following screenshot:
Figure 1.8: JDK 10 Download Page
Select the Accept License Agreement radio button.
Download the JDK 10 installer executable for Windows 64-bit OS as shown in the following screenshot:
Figure 1.9: JDK 10 Download Link
Once downloaded, double-click on the installer executable to begin the installation and follow the instructions of the installation wizard:
Figure 1.10: JDK 10 Installation Wizard
Click on Next to begin the installation process.
By default, the installer installs all the development tools, source code, and the JRE in the C:\Program Files\Java directory.
The following screenshot shows the Java directory with JDK 8 and JDK 10 installation folders along with their respective JRE folders:
Figure 1.11: JDK 8 and JDK 10 Installation Folders
The following screenshot shows the subfolders of JDK 8 and JDK 10 directories:
Figure 1.12: JDK 8 and JDK 10 Installation Folder Structure
The following table provides a brief description of the common directories of a typical JDK 8 installation:
Table 1.2: Contents of JDK 8 installation directory
The following table provides a brief description of the common directories of a typical JDK 10 installation:
Table 1.3: Contents of JDK 10 installation directory
1.8 Setting up the path for JDK
To work with JDK, the path of the bin folder must be set in the system environment variable named PATH. The PATH variable is set to point to the executables (javac.exe and java.exe) so that these commands can be executed from any directory without having to specify the full path.
To set the PATH variable from the Command Prompt window, type the following command:
C:\>set path=
For example:
C:\>set path=C:\Program Files\Java\jdk1.8.0_45\bin
Similarly, set the path for the JDK 10 version’s bin directory.
To set the PATH variable permanently on the system (Windows 10), follow the given steps:
Right-click This PC | Properties | Advanced System Settings | Advanced Tab. Click on Environment Variables:
Figure 1.13: Set the PATH environmental variable
In the System variables section, select the PATH variable and click on the Edit button to go to the JDK installation folder path.
Click on New to go to a new path and type the following path to the bin folder:
C:\Program Files\Java\jdk1.8.0_45\bin
Click on OK to save the changes.
Similarly, the path for the JDK 10 version’s bin folder can also be set permanently in the environment variable PATH.
1.9 Java application development
The popularity of Java is on the rise even after more than two decades. Java is still the chosen language for the application of different domains and continues to advance at an accelerated pace. The Java language can be used to develop a variety of applications which include the following:
Console-based and Window-based desktop applications
Web applications with Web components such as Servlets, Java Server Pages (JSP), Java Server Faces (JSF), etc. that are executed in a browser.
Enterprise applications with components such as Enterprise JavaBeans (EJB) are used for distributed computing.
Web servers and application servers to host and deploy Web and Enterprise applications.
Apps that are created for small devices such as mobile phones.
Embedded software such as tiny chips, SIM cards, etc. for electronic devices.
Scientific applications involving scientific calculations and mathematical operations. For example, applications like MATLAB use Java as an interactive user interface as well as part of the core system.
The applications can be created by using a simple text editor, for example, Notepad or by using an Integrated Development Environment (IDE) that provides the necessary tools such as editor, compiler, debugger, etc. for the development of Java applications. The popular IDEs include NetBeans, Eclipse, IntelliJ, and Android Studio for mobile apps, etc.
1.10 Structure of a Java program
Since Java is an object-oriented programming language, the development of an application in Java begins with the creation of a class. The definition of a class is saved in a file with the same name as the class name and a .java extension. The structure and elements of a class is shown in the following screenshot:
Figure 1.14: Structure of a Java Program
The words depicted in bold font are keywords of the Java language with a predefined meaning in the language. The keywords cannot be used for names of variables, methods, classes, or as any other identifier:
The package statement: A package in Java is similar to a namespace where classes of similar functionalities are saved. The package keyword is used to indicate that the succeeding text is the name of a package to which the class belongs. In Java, a class is always within a package. If no package is specified, the class belongs to the default package. Examples of built-in packages are java.swing, java.io, etc. The classes related to GUI are stored in the java.swing package and those related to the input/output functionality are stored in java.io package and so on.
The import statement: The import statement is used to include external packages and classes in a Java class. In order to use classes from another package, they must be imported by using the import keyword. However, some packages are included by default in a Java