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