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.)
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
- 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
- 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