### Introduction to Programming Using Java, Version 9, Swing Edition

## Table of Contents

This is the Table of Contents for the free on-line textbook Introduction to Programming Using Java.

(Click here to hide subsections.)

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

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
  - 2.2.1 Variables
  - 2.2.2 Types
  - 2.2.3 Literals
  - 2.2.4 Strings and String Literals
  - 2.2.5 Variables in Programs
- Section 2.3 Strings, Classes, Objects, and Subroutines
  - 2.3.1 Built-in Subroutines and Functions
  - 2.3.2 Classes and Objects
  - 2.3.3 Operations on Strings
  - 2.3.4 Text Blocks: Multiline Strings
  - 2.3.5 Introduction to Enums
- Section 2.4 Text Input and Output
  - 2.4.1 Basic Output and Formatted Output
  - 2.4.2 A First Text Input Example
  - 2.4.3 Basic TextIO Input Functions
  - 2.4.4 Introduction to File I/O
  - 2.4.5 Other TextIO Features
  - 2.4.6 Using Scanner for Input
- Section 2.5 Details of Expressions
  - 2.5.1 Arithmetic Operators
  - 2.5.2 Increment and Decrement
  - 2.5.3 Relational Operators
  - 2.5.4 Boolean Operators
  - 2.5.5 Conditional Operator
  - 2.5.6 Assignment Operators and Type Conversion
  - 2.5.7 Precedence Rules
- Section 2.6 Programming Environments
  - 2.6.1 Getting a JDK
  - 2.6.2 Command Line Environment
  - 2.6.3 Eclipse IDE
  - 2.6.4 BlueJ
  - 2.6.5 The Problem of Packages
  - 2.6.6 About jshell
- Programming Exercises
- Quiz

Chapter 3: Programming in the Small II: Control

- Section 3.1 Blocks, Loops, and Branches
  - 3.1.1 Blocks
  - 3.1.2 The Basic While Loop
  - 3.1.3 The Basic If Statement
  - 3.1.4 Control Abstractiont
  - 3.1.5 Definite Assignment
- Section 3.2 Algorithm Development
  - 3.2.1 Pseudocode and Stepwise Refinement
  - 3.2.2 The 3N+1 Problem
  - 3.2.3 Coding, Testing, Debugging
- Section 3.3 The while and do..while Statements
  - 3.3.1 The while Statement
  - 3.3.2 The do..while Statement
  - 3.3.3 break and continue
- Section 3.4 The for Statement
  - 3.4.1 For Loops
  - 3.4.2 Example: Counting Divisors
  - 3.4.3 Nested for Loops
- Section 3.5 The if Statement
  - 3.5.1 The Dangling else Problem
  - 3.5.2 Multiway Branching
  - 3.5.3 If Statement Examples
  - 3.5.4 The Empty Statement
- Section 3.6 The switch Statement
  - 3.6.1 The Basic switch Statement
  - 3.6.2 Menus and switch Statements
  - 3.6.3 Enums in switch Statements
  - 3.6.4 Definite Assignment and switch Statements
  - 3.6.5 Switch Expressions
  - 3.6.6 The Traditional switch Statement
- Section 3.7 Introduction to Exceptions and try..catch
  - 3.7.1 Exceptions
  - 3.7.2 try..catch
  - 3.7.3 Exceptions in TextIO
- Section 3.8 Introduction to Arrays
  - 3.8.1 Creating and Using Arrays
  - 3.8.2 Arrays and For Loops
  - 3.8.3 Random Access
  - 3.8.4 Partially Full Arrays
  - 3.8.5 Two-dimensional Arrays
- Section 3.9 Introduction to GUI Programming
  - 3.9.1 Drawing Shapes
  - 3.9.2 Drawing in a Program
  - 3.9.3 Animation
- Programming Exercises
- Quiz

Chapter 4: Programming in the Large I: Subroutines

- Section 4.1 Black Boxes and Procedural Abstraction
- Section 4.2 Static Subroutines and Static Variables
  - 4.2.1 Subroutine Definitions
  - 4.2.2 Calling Subroutines
  - 4.2.3 Subroutines in Programs
  - 4.2.4 Member Variables
- Section 4.3 Parameters
  - 4.3.1 Using Parameters
  - 4.3.2 Formal and Actual Parameters
  - 4.3.3 Overloading
  - 4.3.4 Subroutine Examples
  - 4.3.5 Array Parameters
  - 4.3.6 Command-line Arguments
  - 4.3.7 Throwing Exceptions
  - 4.3.8 Global and Local Variables
- Section 4.4 Return Values
  - 4.4.1 The return statement
  - 4.4.2 Function Examples
  - 4.4.3 3N+1 Revisited
- Section 4.5 Lambda Expressions
  - 4.5.1 First-class Functions
  - 4.5.2 Functional Interfaces
  - 4.5.3 Lambda Expressions
  - 4.5.4 Method References
- Section 4.6 APIs, Packages, Modules, and Javadoc
  - 4.6.1 Toolboxes
  - 4.6.2 Java's Standard Packages
  - 4.6.3 Using Classes from Packages
  - 4.6.4 About Modules
  - 4.6.5 Javadoc
  - 4.6.6 Static Import
- Section 4.7 More on Program Design
  - 4.7.1 Preconditions and Postconditions
  - 4.7.2 A Design Example
  - 4.7.3 The Program
- Section 4.8 The Truth About Declarations
  - 4.8.1 Initialization in Declarations
  - 4.8.2 Declaring Variables with var
  - 4.8.3 Named Constants
  - 4.8.4 Naming and Scope Rules
- Programming Exercises
- Quiz

Chapter 5: Programming in the Large II: Objects and Classes

- Section 5.1 Objects, Instance Methods, and Instance Variables
  - 5.1.1 Objects, Classes, and Instances
  - 5.1.2 Fundamentals of Objects
  - 5.1.3 Getters and Setters
  - 5.1.4 Arrays and Objects
- Section 5.2 Constructors and Object Initialization
  - 5.2.1 Initializing Instance Variables
  - 5.2.2 Constructors
  - 5.2.3 Garbage Collection
- Section 5.3 Programming with Objects
  - 5.3.1 Some Built-in Classes
  - 5.3.2 The class "Object"
  - 5.3.3 Writing and Using a Class
  - 5.3.4 Object-oriented Analysis and Design
- Section 5.4 Programming Example: Card, Hand, Deck
  - 5.4.1 Designing the classes
  - 5.4.2 The Card Class
  - 5.4.3 Example: A Simple Card Game
- Section 5.5 Inheritance, Polymorphism, and Abstract Classes
  - 5.5.1 Extending Existing Classes
  - 5.5.2 Inheritance and Class Hierarchy
  - 5.5.3 Example: Vehicles
  - 5.5.4 Polymorphism
  - 5.5.5 Abstract Classes
  - 5.5.6 Final Methods and Classes
- Section 5.6 this and super
  - 5.6.1 The Special Variable this
  - 5.6.2 The Special Variable super
  - 5.6.3 super and this As Constructors
- Section 5.7 Interfaces
  - 5.7.1 Defining and Implementing Interfaces
  - 5.7.2 Default Methods
  - 5.7.3 Interfaces as Types
- Section 5.8 Nested Classes
  - 5.8.1 Static Nested Classes
  - 5.8.2 Inner Classes
  - 5.8.3 Anonymous Inner Classes
  - 5.8.4 Local Classes and Lambda Expressions
- Programming Exercises
- Quiz

Chapter 6: Introduction to GUI Programming

- Section 6.1 The Basic GUI Application
  - 6.1.1 JFrame and JPanel
  - 6.1.2 Components and Layout
  - 6.1.3 Events and Listeners
- Section 6.2 Graphics and Painting
  - 6.2.1 Coordinates
  - 6.2.2 Colors
  - 6.2.3 Fonts
  - 6.2.4 Shapes
  - 6.2.5 Graphics2D
  - 6.2.6 An Example
  - 6.2.7 Where is main()?
- Section 6.3 Mouse Events
  - 6.3.1 Event Handling
  - 6.3.2 MouseEvent and MouseListener
  - 6.3.3 MouseEvent Data
  - 6.3.4 MouseMotionListeners and Dragging
  - 6.3.5 Anonymous Event Handlers and Adapter Classes
- Section 6.4 Timers, KeyEvents, and State Machines
  - 6.4.1 Timers and Animation
  - 6.4.2 Keyboard Events
  - 6.4.3 Focus Events
  - 6.4.4 State Machines
- Section 6.5 Basic Components
  - 6.5.1 JButton
  - 6.5.2 JLabel
  - 6.5.3 JCheckBox
  - 6.5.4 JTextField and JTextArea
  - 6.5.5 JSlider
- Section 6.6 Basic Layout
  - 6.6.1 Basic Layout Managers
  - 6.6.2 Borders
  - 6.6.3 SliderAndButtonDemo
  - 6.6.4 A Simple Calculator
  - 6.6.5 Using a null Layout
  - 6.6.6 A Little Card Game
- Section 6.7 Menus, Dialogs, and Complete Programs
  - 6.7.1 Menus and Menubars
  - 6.7.2 Dialogs
  - 6.7.3 Fine Points of Frames
  - 6.7.4 Creating Jar Files
  - 6.7.5 jpackage
- Programming Exercises
- Quiz

Chapter 7: Arrays, ArrayLists, and Records

- Section 7.1 Array Details
  - 7.1.1 For-each Loops
  - 7.1.2 Variable Arity Methods
  - 7.1.3 Array Literals
- Section 7.2 Array Processing
  - 7.2.1 Some Processing Examples
  - 7.2.2 Some Standard Array Methods
  - 7.2.3 RandomStrings Revisited
  - 7.2.4 Dynamic Arrays
- Section 7.3 ArrayList
  - 7.3.1 ArrayList and Parameterized Types
  - 7.3.2 Wrapper Classes
  - 7.3.3 Programming With ArrayList
- Section 7.4 Records
  - 7.4.1 Basic Java Records
  - 7.4.2 More Record Syntax
  - 7.4.3 A Complex Example
- Section 7.5 Searching and Sorting
  - 7.5.1 Searching
  - 7.5.2 Association Lists
  - 7.5.3 Insertion Sort
  - 7.5.4 Selection Sort
  - 7.5.5 Unsorting
- Section 7.6 Two-dimensional Arrays
  - 7.6.1 The Truth About 2D Arrays
  - 7.6.2 Conway's Game Of Life
  - 7.6.3 Checkers
- Programming Exercises
- Quiz

Chapter 8: Correctness, Robustness, Efficiency

- Section 8.1 Introduction to Correctness and Robustness
  - 8.1.1 Horror Stories
  - 8.1.2 Java to the Rescue
  - 8.1.3 Problems Remain in Java
- Section 8.2 Writing Correct Programs
  - 8.2.1 Provably Correct Programs
  - 8.2.2 Preconditions and Postconditions
  - 8.2.3 Invariants
  - 8.2.4 Robust Handling of Input
- Section 8.3 Exceptions and try..catch
  - 8.3.1 Exceptions and Exception Classes
  - 8.3.2 The try Statement
  - 8.3.3 Throwing Exceptions
  - 8.3.4 Mandatory Exception Handling
  - 8.3.5 Programming with Exceptions
- Section 8.4 Assertions and Annotations
  - 8.4.1 Assertions
  - 8.4.2 Annotations
- Section 8.5 Analysis of Algorithms
- Programming Exercises
- Quiz

Chapter 9: Linked Data Structures and Recursion

- Section 9.1 Recursion
  - 9.1.1 Recursive Binary Search
  - 9.1.2 Towers of Hanoi
  - 9.1.3 A Recursive Sorting Algorithm
  - 9.1.4 Blob Counting
- Section 9.2 Linked Data Structures
  - 9.2.1 Recursive Linking
  - 9.2.2 Linked Lists
  - 9.2.3 Basic Linked List Processing
  - 9.2.4 Inserting into a Linked List
  - 9.2.5 Deleting from a Linked List
- Section 9.3 Stacks, Queues, and ADTs
  - 9.3.1 Stacks
  - 9.3.2 Queues
  - 9.3.3 Postfix Expressions
- Section 9.4 Binary Trees
  - 9.4.1 Tree Traversal
  - 9.4.2 Binary Sort Trees
  - 9.4.3 Expression Trees
- Section 9.5 A Simple Recursive Descent Parser
  - 9.5.1 Backus-Naur Form
  - 9.5.2 Recursive Descent Parsing
  - 9.5.3 Building an Expression Tree
- Programming Exercises
- Quiz

Chapter 10: Generic Programming and Collection Classes

- Section 10.1 Generic Programming
  - 10.1.1 Generic Programming in Smalltalk
  - 10.1.2 Generic Programming in C++
  - 10.1.3 Generic Programming in Java
  - 10.1.4 The Java Collection Framework
  - 10.1.5 Iterators and for-each Loops
  - 10.1.6 Equality and Comparison
  - 10.1.7 Generics and Wrapper Classes
- Section 10.2 Lists and Sets
  - 10.2.1 ArrayList and LinkedList
  - 10.2.2 Sorting
  - 10.2.3 TreeSet and HashSet
  - 10.2.4 Priority Queues
- Section 10.3 Maps
  - 10.3.1 The Map Interface
  - 10.3.2 Views, SubSets, and SubMaps
  - 10.3.3 Hash Tables and Hash Codes
- Section 10.4 Programming with the Java Collection Framework
  - 10.4.1 Symbol Tables
  - 10.4.2 Sets Inside a Map
  - 10.4.3 Using a Comparator
  - 10.4.4 Word Counting
- Section 10.5 Writing Generic Classes and Methods
  - 10.5.1 Simple Generic Classes
  - 10.5.2 Simple Generic Methods
  - 10.5.3 Wildcard Types
  - 10.5.4 Bounded Types
- Section 10.6 Introduction the Stream API
  - 10.6.1 Generic Functional Interfaces
  - 10.6.2 Making Streams
  - 10.6.3 Operations on Streams
  - 10.6.4 An Experiment
- Programming Exercises
- Quiz

Chapter 11: Input/Output Streams, Files, and Networking

- Section 11.1 I/O Streams, Readers, and Writers
  - 11.1.1 Character and Byte Streams
  - 11.1.2 PrintWriter
  - 11.1.3 Data Streams
  - 11.1.4 Reading Text
  - 11.1.5 The Scanner Class
  - 11.1.6 Serialized Object I/O
- Section 11.2 Files
  - 11.2.1 Reading and Writing Files
  - 11.2.2 Files and Directories
  - 11.2.3 File Dialog Boxes
- Section 11.3 Programming With Files
  - 11.3.1 Copying a File
  - 11.3.2 Persistent Data
  - 11.3.3 Storing Objects in Files
- Section 11.4 Networking
  - 11.4.1 URLs and URLConnections
  - 11.4.2 TCP/IP and Client/Server
  - 11.4.3 Sockets in Java
  - 11.4.4 A Trivial Client/Server
  - 11.4.5 A Simple Network Chat
- Section 11.5 A Brief Introduction to XML
  - 11.5.1 Basic XML Syntax
  - 11.5.2 Working With the DOM
- Programming Exercises
- Quiz

Chapter 12: Threads and Multiprocessing

- Section 12.1 Introduction to Threads
  - 12.1.1 Creating and Running Threads
  - 12.1.2 Operations on Threads
  - 12.1.3 Mutual Exclusion with "synchronized"
  - 12.1.4 Volatile Variables
  - 12.1.5 Atomic Variables
- Section 12.2 Programming with Threads
  - 12.2.1 Threads versus Timers
  - 12.2.2 Recursion in a Thread
  - 12.2.3 Threads for Background Computation
  - 12.2.4 Threads for Multiprocessing
  - 12.2.5 The SwingUtilities Approach
- Section 12.3 Threads and Parallel Processing
  - 12.3.1 Problem Decomposition
  - 12.3.2 Thread Pools and Task Queues
  - 12.3.3 Producer/Consumer and Blocking Queues
  - 12.3.4 The ExecutorService Approach
  - 12.3.5 Wait and Notify
- Section 12.4 Threads and Networking
  - 12.4.1 The Blocking I/O Problem
  - 12.4.2 An Asynchronous Network Chat Program
  - 12.4.3 A Threaded Network Server
  - 12.4.4 Using a Thread Pool
  - 12.4.5 Distributed Computing
- Section 12.5 Network Programming Example: A Networked Game Framework
  - 12.5.1 The Netgame Framework
  - 12.5.2 A Simple Chat Room
  - 12.5.3 A Networked TicTacToe Game
  - 12.5.4 A Networked Poker Game
- Programming Exercises
- Quiz

Chapter 13: GUI Programming Continued

- Section 13.1 Images and Resources
  - 13.1.1 Images and BufferedImages
  - 13.1.2 Working With Pixels
  - 13.1.3 Resources
  - 13.1.4 Cursors and Icons
  - 13.1.5 Image File I/O
- Section 13.2 Fancier Graphics
  - 13.2.1 Measuring Text
  - 13.2.2 Transparency
  - 13.2.3 Antialiasing
  - 13.2.4 Strokes and Paints
  - 13.2.5 Transforms and Shapes
- Section 13.3 Actions and Buttons
  - 13.3.1 Action and AbstractAction
  - 13.3.2 Icons on Buttons
  - 13.3.3 Making Choices
  - 13.3.4 Toolbars
  - 13.3.5 Keyboard Accelerators
  - 13.3.6 HTML on Buttons
- Section 13.4 Complex Components and MVC
  - 13.4.1 Model-View-Controller
  - 13.4.2 Lists and ListModels
  - 13.4.3 Tables and TableModels
  - 13.4.4 Documents and Editors
  - 13.4.5 Custom Components
- Section 13.5 Finishing Touches
  - 13.5.1 The Mandelbrot Set
  - 13.5.2 Design of the Program
  - 13.5.3 Internationalization
  - 13.5.4 Events, Events, Events
  - 13.5.5 Custom Dialogs
  - 13.5.6 Preferences
- Programming Exercises
- Quiz

Appendix: Source Code for the Examples in this Book

Appendix: Glossary

David Eck