WELCOME TO Version 9.0 of Introduction to Programming Using Java, a free, on-line textbook for introductory programming that uses Java as the language of instruction. This book is directed mainly towards beginning programmers, although it might also be useful for experienced programmers who want to learn something about Java.
Version 9 covers Java 17. It updates the previous version mostly by moving definitively to Java 17 and by adding a new Swing edition. This edition of Version 9 uses Swing for GUI programming;
An alternative edition that uses JavaFX instead of Swing is also available:
Introduction to Programming Using Java: Version 9.0, Swing Edition
Conditions of Use
This book is licensed under a Creative Commons License (CC BY-NC-SA). You can download the ebook Introduction to Programming Using Java for free.
- Title
- Introduction to Programming Using Java
- Subtitle
- Version 9.0, JavaFX Edition
- Author(s)
- David J. Eck
- Published
- 2022-05-01
- Edition
- 1
- Format
- eBook (pdf, epub, mobi)
- Pages
- 771
- Language
- English
- License
- CC BY-NC-SA
- Book Homepage
- Free eBook, Errata, Code, Solutions, etc.
Title Page Preface Chapter 1: Overview: The Mental Landscape Section 1.1: The Fetch and Execute Cycle: Machine Language Section 1.2: Asynchronous Events: Polling Loops and Interrupts Section 1.3: The Java Virtual Machine Section 1.4: Fundamental Building Blocks of Programs Section 1.5: Objects and Object-oriented Programming Section 1.6: The Modern User Interface Section 1.7: The Internet and Beyond Quiz on Chapter 1 Chapter 2: Programming in the Small I: Names and Things Section 2.1: The Basic Java Application Section 2.2: Variables and the Primitive Types Subsection 2.2.1: Variables Subsection 2.2.2: Types Subsection 2.2.3: Literals Subsection 2.2.4: Strings and String Literals Subsection 2.2.5: Variables in Programs Section 2.3: Strings, Classes, Objects, and Subroutines Subsection 2.3.1: Built-in Subroutines and Functions Subsection 2.3.2: Classes and Objects Subsection 2.3.3: Operations on Strings Subsection 2.3.4: Text Blocks: Multiline Strings Subsection 2.3.5: Introduction to Enums Section 2.4: Text Input and Output Subsection 2.4.1: Basic Output and Formatted Output Subsection 2.4.2: A First Text Input Example Subsection 2.4.3: Basic TextIO Input Functions Subsection 2.4.4: Introduction to File I/O Subsection 2.4.5: Other TextIO Features Subsection 2.4.6: Using Scanner for Input Section 2.5: Details of Expressions Subsection 2.5.1: Arithmetic Operators Subsection 2.5.2: Increment and Decrement Subsection 2.5.3: Relational Operators Subsection 2.5.4: Boolean Operators Subsection 2.5.5: Conditional Operator Subsection 2.5.6: Assignment Operators and Type Conversion Subsection 2.5.7: Precedence Rules Section 2.6: Programming Environments Subsection 2.6.1: Getting a JDK Subsection 2.6.2: Command Line Environment Subsection 2.6.3: Eclipse IDE Subsection 2.6.4: BlueJ Subsection 2.6.5: The Problem of Packages Subsection 2.6.6: About jshell Subsection 2.6.7: JavaFX on the Command Line Subsection 2.6.8: Using JavaFX in Eclipse Exercises for Chapter 2 Quiz on Chapter 2 Chapter 3: Programming in the Small II: Control Section 3.1: Blocks, Loops, and Branches Subsection 3.1.1: Blocks Subsection 3.1.2: The Basic While Loop Subsection 3.1.3: The Basic If Statement Subsection 3.1.4: Control Abstractiont Subsection 3.1.5: Definite Assignment Section 3.2: Algorithm Development Subsection 3.2.1: Pseudocode and Stepwise Refinement Subsection 3.2.2: The 3N+1 Problem Subsection 3.2.3: Coding, Testing, Debugging Section 3.3: The while and do..while Statements Subsection 3.3.1: The while Statement Subsection 3.3.2: The do..while Statement Subsection 3.3.3: break and continue Section 3.4: The for Statement Subsection 3.4.1: For Loops Subsection 3.4.2: Example: Counting Divisors Subsection 3.4.3: Nested for Loops Section 3.5: The if Statement Subsection 3.5.1: The Dangling else Problem Subsection 3.5.2: Multiway Branching Subsection 3.5.3: If Statement Examples Subsection 3.5.4: The Empty Statement Section 3.6: The switch Statement Subsection 3.6.1: The Basic switch Statement Subsection 3.6.2: Menus and switch Statements Subsection 3.6.3: Enums in switch Statements Subsection 3.6.4: Definite Assignment and switch Statements Subsection 3.6.5: Switch Expressions Subsection 3.6.6: The Traditional switch Statement Section 3.7: Introduction to Exceptions and try..catch Subsection 3.7.1: Exceptions Subsection 3.7.2: try..catch Subsection 3.7.3: Exceptions in TextIO Section 3.8: Introduction to Arrays Subsection 3.8.1: Creating and Using Arrays Subsection 3.8.2: Arrays and For Loops Subsection 3.8.3: Random Access Subsection 3.8.4: Partially Full Arrays Subsection 3.8.5: Two-dimensional Arrays Section 3.9: Introduction to GUI Programming Subsection 3.9.1: Drawing Shapes Subsection 3.9.2: Drawing in a Program Subsection 3.9.3: Animation Exercises for Chapter 3 Quiz on Chapter 3 Chapter 4: Programming in the Large I: Subroutines Section 4.1: Black Boxes and Procedural Abstraction Section 4.2: Static Subroutines and Static Variables Subsection 4.2.1: Subroutine Definitions Subsection 4.2.2: Calling Subroutines Subsection 4.2.3: Subroutines in Programs Subsection 4.2.4: Member Variables Section 4.3: Parameters Subsection 4.3.1: Using Parameters Subsection 4.3.2: Formal and Actual Parameters Subsection 4.3.3: Overloading Subsection 4.3.4: Subroutine Examples Subsection 4.3.5: Array Parameters Subsection 4.3.6: Command-line Arguments Subsection 4.3.7: Throwing Exceptions Subsection 4.3.8: Global and Local Variables Section 4.4: Return Values Subsection 4.4.1: The return statement Subsection 4.4.2: Function Examples Subsection 4.4.3: 3N+1 Revisited Section 4.5: Lambda Expressions Subsection 4.5.1: First-class Functions Subsection 4.5.2: Functional Interfaces Subsection 4.5.3: Lambda Expressions Subsection 4.5.4: Method References Section 4.6: APIs, Packages, Modules, and Javadoc Subsection 4.6.1: Toolboxes Subsection 4.6.2: Java's Standard Packages Subsection 4.6.3: Using Classes from Packages Subsection 4.6.4: About Modules Subsection 4.6.5: Javadoc Subsection 4.6.6: Static Import Section 4.7: More on Program Design Subsection 4.7.1: Preconditions and Postconditions Subsection 4.7.2: A Design Example Subsection 4.7.3: The Program Section 4.8: The Truth About Declarations Subsection 4.8.1: Initialization in Declarations Subsection 4.8.2: Declaring Variables with var Subsection 4.8.3: Named Constants Subsection 4.8.4: Naming and Scope Rules Exercises for Chapter 4 Quiz on Chapter 4 Chapter 5: Programming in the Large II: Objects and Classes Section 5.1: Objects, Instance Methods, and Instance Variables Subsection 5.1.1: Objects, Classes, and Instances Subsection 5.1.2: Fundamentals of Objects Subsection 5.1.3: Getters and Setters Subsection 5.1.4: Arrays and Objects Section 5.2: Constructors and Object Initialization Subsection 5.2.1: Initializing Instance Variables Subsection 5.2.2: Constructors Subsection 5.2.3: Garbage Collection Section 5.3: Programming with Objects Subsection 5.3.1: Some Built-in Classes Subsection 5.3.2: The class "Object" Subsection 5.3.3: Writing and Using a Class Subsection 5.3.4: Object-oriented Analysis and Design Section 5.4: Programming Example: Card, Hand, Deck Subsection 5.4.1: Designing the classes Subsection 5.4.2: The Card Class Subsection 5.4.3: Example: A Simple Card Game Section 5.5: Inheritance, Polymorphism, and Abstract Classes Subsection 5.5.1: Extending Existing Classes Subsection 5.5.2: Inheritance and Class Hierarchy Subsection 5.5.3: Example: Vehicles Subsection 5.5.4: Polymorphism Subsection 5.5.5: Abstract Classes Subsection 5.5.6: Final Methods and Classes Section 5.6: this and super Subsection 5.6.1: The Special Variable this Subsection 5.6.2: The Special Variable super Subsection 5.6.3: super and this As Constructors Section 5.7: Interfaces Subsection 5.7.1: Defining and Implementing Interfaces Subsection 5.7.2: Default Methods Subsection 5.7.3: Interfaces as Types Section 5.8: Nested Classes Subsection 5.8.1: Static Nested Classes Subsection 5.8.2: Inner Classes Subsection 5.8.3: Anonymous Inner Classes Subsection 5.8.4: Local Classes and Lambda Expressions Exercises for Chapter 5 Quiz on Chapter 5 Chapter 6: Introduction to GUI Programming Section 6.1: A Basic JavaFX Application Subsection 6.1.1: JavaFX Applications Subsection 6.1.2: Stage, Scene, and SceneGraph Subsection 6.1.3: Nodes and Layout Subsection 6.1.4: Events and Event Handlers Section 6.2: Some Basic Classes Subsection 6.2.1: Color and Paint Subsection 6.2.2: Fonts Subsection 6.2.3: Image Subsection 6.2.4: Canvas and GraphicsContext Subsection 6.2.5: A Bit of CSS Section 6.3: Basic Events Subsection 6.3.1: Event Handling Subsection 6.3.2: Mouse Events Subsection 6.3.3: Dragging Subsection 6.3.4: Key Events Subsection 6.3.5: AnimationTimer Subsection 6.3.6: State Machines Subsection 6.3.7: Observable Values Section 6.4: Basic Controls Subsection 6.4.1: ImageView Subsection 6.4.2: Label and Button Subsection 6.4.3: CheckBox and RadioButton Subsection 6.4.4: TextField and TextArea Subsection 6.4.5: Slider Section 6.5: Basic Layout Subsection 6.5.1: Do Your Own Layout Subsection 6.5.2: BorderPane Subsection 6.5.3: HBox and VBox Subsection 6.5.4: GridPane and TilePane Section 6.6: Complete Programs Subsection 6.6.1: A Little Card Game Subsection 6.6.2: Menus and Menubars Subsection 6.6.3: Scene and Stage Subsection 6.6.4: Creating Jar Files Subsection 6.6.5: jpackage Exercises for Chapter 6 Quiz on Chapter 6 Chapter 7: Arrays, ArrayLists, and Records Section 7.1: Array Details Subsection 7.1.1: For-each Loops Subsection 7.1.2: Variable Arity Methods Subsection 7.1.3: Array Literals Section 7.2: Array Processing Subsection 7.2.1: Some Processing Examples Subsection 7.2.2: Some Standard Array Methods Subsection 7.2.3: RandomStrings Revisited Subsection 7.2.4: Dynamic Arrays Section 7.3: ArrayList Subsection 7.3.1: ArrayList and Parameterized Types Subsection 7.3.2: Wrapper Classes Subsection 7.3.3: Programming With ArrayList Section 7.4: Records Subsection 7.4.1: Basic Java Records Subsection 7.4.2: More Record Syntax Subsection 7.4.3: A Complex Example Section 7.5: Searching and Sorting Subsection 7.5.1: Searching Subsection 7.5.2: Association Lists Subsection 7.5.3: Insertion Sort Subsection 7.5.4: Selection Sort Subsection 7.5.5: Unsorting Section 7.6: Two-dimensional Arrays Subsection 7.6.1: The Truth About 2D Arrays Subsection 7.6.2: Conway's Game Of Life Subsection 7.6.3: Checkers Exercises for Chapter 7 Quiz on Chapter 7 Chapter 8: Correctness, Robustness, Efficiency Section 8.1: Introduction to Correctness and Robustness Subsection 8.1.1: Horror Stories Subsection 8.1.2: Java to the Rescue Subsection 8.1.3: Problems Remain in Java Section 8.2: Writing Correct Programs Subsection 8.2.1: Provably Correct Programs Subsection 8.2.2: Preconditions and Postconditions Subsection 8.2.3: Invariants Subsection 8.2.4: Robust Handling of Input Section 8.3: Exceptions and try..catch Subsection 8.3.1: Exceptions and Exception Classes Subsection 8.3.2: The try Statement Subsection 8.3.3: Throwing Exceptions Subsection 8.3.4: Mandatory Exception Handling Subsection 8.3.5: Programming with Exceptions Section 8.4: Assertions and Annotations Subsection 8.4.1: Assertions Subsection 8.4.2: Annotations Section 8.5: Analysis of Algorithms Exercises for Chapter 8 Quiz on Chapter 8 Chapter 9: Linked Data Structures and Recursion Section 9.1: Recursion Subsection 9.1.1: Recursive Binary Search Subsection 9.1.2: Towers of Hanoi Subsection 9.1.3: A Recursive Sorting Algorithm Subsection 9.1.4: Blob Counting Section 9.2: Linked Data Structures Subsection 9.2.1: Recursive Linking Subsection 9.2.2: Linked Lists Subsection 9.2.3: Basic Linked List Processing Subsection 9.2.4: Inserting into a Linked List Subsection 9.2.5: Deleting from a Linked List Section 9.3: Stacks, Queues, and ADTs Subsection 9.3.1: Stacks Subsection 9.3.2: Queues Subsection 9.3.3: Postfix Expressions Section 9.4: Binary Trees Subsection 9.4.1: Tree Traversal Subsection 9.4.2: Binary Sort Trees Subsection 9.4.3: Expression Trees Section 9.5: A Simple Recursive Descent Parser Subsection 9.5.1: Backus-Naur Form Subsection 9.5.2: Recursive Descent Parsing Subsection 9.5.3: Building an Expression Tree Exercises for Chapter 9 Quiz on Chapter 9 Chapter 10: Generic Programming and Collection Classes Section 10.1: Generic Programming Subsection 10.1.1: Generic Programming in Smalltalk Subsection 10.1.2: Generic Programming in C++ Subsection 10.1.3: Generic Programming in Java Subsection 10.1.4: The Java Collection Framework Subsection 10.1.5: Iterators and for-each Loops Subsection 10.1.6: Equality and Comparison Subsection 10.1.7: Generics and Wrapper Classes Section 10.2: Lists and Sets Subsection 10.2.1: ArrayList and LinkedList Subsection 10.2.2: Sorting Subsection 10.2.3: TreeSet and HashSet Subsection 10.2.4: Priority Queues Section 10.3: Maps Subsection 10.3.1: The Map Interface Subsection 10.3.2: Views, SubSets, and SubMaps Subsection 10.3.3: Hash Tables and Hash Codes Section 10.4: Programming with the Java Collection Framework Subsection 10.4.1: Symbol Tables Subsection 10.4.2: Sets Inside a Map Subsection 10.4.3: Using a Comparator Subsection 10.4.4: Word Counting Section 10.5: Writing Generic Classes and Methods Subsection 10.5.1: Simple Generic Classes Subsection 10.5.2: Simple Generic Methods Subsection 10.5.3: Wildcard Types Subsection 10.5.4: Bounded Types Section 10.6: Introduction the Stream API Subsection 10.6.1: Generic Functional Interfaces Subsection 10.6.2: Making Streams Subsection 10.6.3: Operations on Streams Subsection 10.6.4: An Experiment Exercises for Chapter 10 Quiz on Chapter 10 Chapter 11: Input/Output Streams, Files, and Networking Section 11.1: I/O Streams, Readers, and Writers Subsection 11.1.1: Character and Byte Streams Subsection 11.1.2: PrintWriter Subsection 11.1.3: Data Streams Subsection 11.1.4: Reading Text Subsection 11.1.5: The Scanner Class Subsection 11.1.6: Serialized Object I/O Section 11.2: Files Subsection 11.2.1: Reading and Writing Files Subsection 11.2.2: Files and Directories Subsection 11.2.3: File Dialog Boxes Section 11.3: Programming With Files Subsection 11.3.1: Copying a File Subsection 11.3.2: Persistent Data Subsection 11.3.3: Storing Objects in Files Section 11.4: Networking Subsection 11.4.1: URLs and URLConnections Subsection 11.4.2: TCP/IP and Client/Server Subsection 11.4.3: Sockets in Java Subsection 11.4.4: A Trivial Client/Server Subsection 11.4.5: A Simple Network Chat Section 11.5: A Brief Introduction to XML Subsection 11.5.1: Basic XML Syntax Subsection 11.5.2: Working With the DOM Exercises for Chapter 11 Quiz on Chapter 11 Chapter 12: Threads and Multiprocessing Section 12.1: Introduction to Threads Subsection 12.1.1: Creating and Running Threads Subsection 12.1.2: Operations on Threads Subsection 12.1.3: Mutual Exclusion with "synchronized" Subsection 12.1.4: Volatile Variables Subsection 12.1.5: Atomic Variables Section 12.2: Programming with Threads Subsection 12.2.1: Threads versus Timers Subsection 12.2.2: Recursion in a Thread Subsection 12.2.3: Threads for Background Computation Subsection 12.2.4: Threads for Multiprocessing Section 12.3: Threads and Parallel Processing Subsection 12.3.1: Problem Decomposition Subsection 12.3.2: Thread Pools and Task Queues Subsection 12.3.3: Producer/Consumer and Blocking Queues Subsection 12.3.4: The ExecutorService Approach Subsection 12.3.5: Wait and Notify Section 12.4: Threads and Networking Subsection 12.4.1: The Blocking I/O Problem Subsection 12.4.2: An Asynchronous Network Chat Program Subsection 12.4.3: A Threaded Network Server Subsection 12.4.4: Using a Thread Pool Subsection 12.4.5: Distributed Computing Section 12.5: Network Programming Example: A Networked Game Framework Subsection 12.5.1: The Netgame Framework Subsection 12.5.2: A Simple Chat Room Subsection 12.5.3: A Networked TicTacToe Game Subsection 12.5.4: A Networked Poker Game Exercises for Chapter 12 Quiz on Chapter 12 Chapter 13: GUI Programming Continued Section 13.1: Properties and Bindings Subsection 13.1.1: Observable Values Subsection 13.1.2: Bindable Properties Subsection 13.1.3: Bidirectional Bindings Section 13.2: Fancier Graphics Subsection 13.2.1: Fancier Strokes Subsection 13.2.2: Fancier Paints Subsection 13.2.3: Transforms Subsection 13.2.4: Stacked Canvasses Subsection 13.2.5: Pixel Manipulation Subsection 13.2.6: Image I/O Section 13.3: Complex Components and MVC Subsection 13.3.1: A Simple Custom Component Subsection 13.3.2: The MVC Pattern Subsection 13.3.3: ListView and ComboBox Subsection 13.3.4: TableView Section 13.4: Mostly Windows and Dialogs Subsection 13.4.1: Dialog Boxes Subsection 13.4.2: WebView and WebEngine Subsection 13.4.3: Managing Multiple Windows Section 13.5: Finishing Touches Subsection 13.5.1: The Mandelbrot Set Subsection 13.5.2: Design of the Program Subsection 13.5.3: Events, Listeners, and Bindings Subsection 13.5.4: A Few More GUI Details Subsection 13.5.5: Internationalization Subsection 13.5.6: Preferences Exercises for Chapter 13 Quiz on Chapter 13 Glossary Answers To End-of-Chapter Quizzes Chapter 1 Quiz Answers Chapter 2 Quiz Answers Chapter 3 Quiz Answers Chapter 4 Quiz Answers Chapter 5 Quiz Answers Chapter 6 Quiz Answers Chapter 7 Quiz Answers Chapter 8 Quiz Answers Chapter 9 Quiz Answers Chapter 10 Quiz Answers Chapter 11 Quiz Answers Chapter 12 Quiz Answers Chapter 13 Quiz Answers Answers to End-of-Chapter Exercises Exercise 2.1 Answer Exercise 2.2 Answer Exercise 2.3 Answer Exercise 2.4 Answer Exercise 2.5 Answer Exercise 2.6 Answer Exercise 2.7 Answer Exercise 3.1 Answer Exercise 3.2 Answer Exercise 3.3 Answer Exercise 3.4 Answer Exercise 3.5 Answer Exercise 3.6 Answer Exercise 3.7 Answer Exercise 3.8 Answer Exercise 3.9 Answer Exercise 4.1 Answer Exercise 4.2 Answer Exercise 4.3 Answer Exercise 4.4 Answer Exercise 4.5 Answer Exercise 4.6 Answer Exercise 4.7 Answer Exercise 4.8 Answer Exercise 5.1 Answer Exercise 5.2 Answer Exercise 5.3 Answer Exercise 5.4 Answer Exercise 5.5 Answer Exercise 5.6 Answer Exercise 5.7 Answer Exercise 6.1 Answer Exercise 6.2 Answer Exercise 6.3 Answer Exercise 6.4 Answer Exercise 6.5 Answer Exercise 6.6 Answer Exercise 6.7 Answer Exercise 6.8 Answer Exercise 6.9 Answer Exercise 6.10 Answer Exercise 6.11 Answer Exercise 7.1 Answer Exercise 7.2 Answer Exercise 7.3 Answer Exercise 7.4 Answer Exercise 7.5 Answer Exercise 7.6 Answer Exercise 7.7 Answer Exercise 8.1 Answer Exercise 8.2 Answer Exercise 8.3 Answer Exercise 8.4 Answer Exercise 8.5 Answer Exercise 9.1 Answer Exercise 9.2 Answer Exercise 9.3 Answer Exercise 9.4 Answer Exercise 9.5 Answer Exercise 9.6 Answer Exercise 9.7 Answer Exercise 10.1 Answer Exercise 10.2 Answer Exercise 10.3 Answer Exercise 10.4 Answer Exercise 10.5 Answer Exercise 10.6 Answer Exercise 10.7 Answer Exercise 11.1 Answer Exercise 11.2 Answer Exercise 11.3 Answer Exercise 11.4 Answer Exercise 11.5 Answer Exercise 11.6 Answer Exercise 12.1 Answer Exercise 12.2 Answer Exercise 12.3 Answer Exercise 12.4 Answer Exercise 12.5 Answer Exercise 12.6 Answer Exercise 12.7 Answer Exercise 13.1 Answer Exercise 13.2 Answer Exercise 13.3 Answer Exercise 13.4 Answer