Introduction to Programming Using Java, Version 9, JavaFX Edition

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Welcome to version 9.0 of Introduction to Programming Using Java, a 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 JavaFX for GUI programming; an alternative edition that uses Swing instead of JavaFX is also available. There are no prerequisites beyond a general familiarity with the ideas of computers and programs. There is more than enough material for a full year of college-level programming. Chapters 1 through 7 can be used as a textbook in a one-semester college-level course or in a year-long high school course. The remaining chapters can be covered in a second course. In style, this is a textbook rather than a tutorial. That is, it concentrates on explaining concepts rather than giving step-by-step how-to-do-it guides. I have tried to use a conversational writing style that might be closer to classroom lecture than to a typical textbook. This is certainly not a Java reference book, and it is not a comprehensive survey of all the features of Java. It is not written as a quick introduction to Java for people who already know another programming language. Instead, it is directed mainly towards people who are learning programming for the first time, and it is as much about general programming concepts as it is about Java in particular. I believe that Introduction to Programming using Java is fully competitive with the conventionally published, printed programming textbooks that are available on the market. There are several approaches to teaching Java. One approach uses graphical user interface programming from the very beginning. And some people believe that object oriented programming should be emphasized from the very beginning. These are not the approach that I take. The approach that I favor starts with the more basic building blocks of programming and builds from there. After an introductory chapter, I cover procedural programming in Chapters 2, 3, and 4. Object-oriented programming is introduced in Chapter 5. Chapter 6 covers the closely related topic of event-oriented programming and graphical user interfaces. Arrays are introduced in Chapter 3 with a full treatment in Chapter 7. Chapter 8 is a short chapter that marks a turning point in the book, moving beyond the fundamental ideas of programming to cover more advanced topics. Chapter 8 is about writing robust, correct, and efficient programs. Chapters 9 and 10 cover recursion and data structures, including generic programming and the Java Collection Framework. Chapter 11 is about files and networking. Chapter 12 covers threads and parallel processing. Finally, Chapter 13 returns to the topic of graphical user interface programming to cover some more advanced features.

Author(s): David J. Eck
Publisher: Hobart and William Smith Colleges
Year: 2022

Language: English
Pages: 773

Preface
1 The Mental Landscape
1.1 Machine Language
1.2 Asynchronous Events
1.3 The Java Virtual Machine
1.4 Building Blocks of Programs
1.5 Object-oriented Programming
1.6 The Modern User Interface
1.7 The Internet and Beyond
Quiz on Chapter 1
2 Names and Things
2.1 The Basic Java Application
2.2 Variables and 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
2.3 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
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
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
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
2.6.7 JavaFX on the Command Line
2.6.8 Using JavaFX in Eclipse
Exercises for Chapter 2
Quiz on Chapter 2
3 Control
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
3.2 Algorithm Development
3.2.1 Pseudocode and Stepwise Refinement
3.2.2 The 3N+1 Problem
3.2.3 Coding, Testing, Debugging
3.3 while and do..while
3.3.1 The while Statement
3.3.2 The do..while Statement
3.3.3 break and continue
3.4 The for Statement
3.4.1 For Loops
3.4.2 Example: Counting Divisors
3.4.3 Nested for Loops
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
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
3.7 Exceptions and try..catch
3.7.1 Exceptions
3.7.2 try..catch
3.7.3 Exceptions in TextIO
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
3.9 GUI Programming
3.9.1 Drawing Shapes
3.9.2 Drawing in a Program
3.9.3 Animation
Exercises for Chapter 3
Quiz on Chapter 3
4 Subroutines
4.1 Black Boxes
4.2 Static Subroutines and Variables
4.2.1 Subroutine Definitions
4.2.2 Calling Subroutines
4.2.3 Subroutines in Programs
4.2.4 Member Variables
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
4.4 Return Values
4.4.1 The return statement
4.4.2 Function Examples
4.4.3 3N+1 Revisited
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
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
4.7 More on Program Design
4.7.1 Preconditions and Postconditions
4.7.2 A Design Example
4.7.3 The Program
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
Exercises for Chapter 4
Quiz on Chapter 4
5 Objects and Classes
5.1 Objects and Instance Methods
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
5.2 Constructors and Object Initialization
5.2.1 Initializing Instance Variables
5.2.2 Constructors
5.2.3 Garbage Collection
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
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
5.5 Inheritance and Polymorphism
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
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
5.7 Interfaces
5.7.1 Defining and Implementing Interfaces
5.7.2 Default Methods
5.7.3 Interfaces as Types
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
Exercises for Chapter 5
Quiz on Chapter 5
6 Introduction to GUI Programming
6.1 A Basic JavaFX Application
6.1.1 JavaFX Applications
6.1.2 Stage, Scene, and SceneGraph
6.1.3 Nodes and Layout
6.1.4 Events and Event Handlers
6.2 Some Basic Classes
6.2.1 Color and Paint
6.2.2 Fonts
6.2.3 Image
6.2.4 Canvas and GraphicsContext
6.2.5 A Bit of CSS
6.3 Basic Events
6.3.1 Event Handling
6.3.2 Mouse Events
6.3.3 Dragging
6.3.4 Key Events
6.3.5 AnimationTimer
6.3.6 State Machines
6.3.7 Observable Values
6.4 Basic Controls
6.4.1 ImageView
6.4.2 Label and Button
6.4.3 CheckBox and RadioButton
6.4.4 TextField and TextArea
6.4.5 Slider
6.5 Basic Layout
6.5.1 Do Your Own Layout
6.5.2 BorderPane
6.5.3 HBox and VBox
6.5.4 GridPane and TilePane
6.6 Complete Programs
6.6.1 A Little Card Game
6.6.2 Menus and Menubars
6.6.3 Scene and Stage
6.6.4 Creating Jar Files
6.6.5 jpackage
Exercises for Chapter 6
Quiz on Chapter 6
7 Arrays, ArrayLists, and Records
7.1 Array Details
7.1.1 For-each Loops
7.1.2 Variable Arity Methods
7.1.3 Array Literals
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
7.3 ArrayList
7.3.1 ArrayList and Parameterized Types
7.3.2 Wrapper Classes
7.3.3 Programming With ArrayList
7.4 Records
7.4.1 Basic Java Records
7.4.2 More Record Syntax
7.4.3 A Complex Example
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
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
Exercises for Chapter 7
Quiz on Chapter 7
8 Correctness, Robustness, Efficiency
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
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
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
8.4 Assertions and Annotations
8.4.1 Assertions
8.4.2 Annotations
8.5 Analysis of Algorithms
Exercises for Chapter 8
Quiz on Chapter 8
9 Linked Data Structures and Recursion
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
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
9.3 Stacks, Queues, and ADTs
9.3.1 Stacks
9.3.2 Queues
9.3.3 Postfix Expressions
9.4 Binary Trees
9.4.1 Tree Traversal
9.4.2 Binary Sort Trees
9.4.3 Expression Trees
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
Exercises for Chapter 9
Quiz on Chapter 9
10 Generic Programming and Collection Classes
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
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
10.3 Maps
10.3.1 The Map Interface
10.3.2 Views, SubSets, and SubMaps
10.3.3 Hash Tables and Hash Codes
10.4 Programming with the JCF
10.4.1 Symbol Tables
10.4.2 Sets Inside a Map
10.4.3 Using a Comparator
10.4.4 Word Counting
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
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
Exercises for Chapter 10
Quiz on Chapter 10
11 I/O Streams, Files, and Networking
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
11.2 Files
11.2.1 Reading and Writing Files
11.2.2 Files and Directories
11.2.3 File Dialog Boxes
11.3 Programming With Files
11.3.1 Copying a File
11.3.2 Persistent Data
11.3.3 Storing Objects in Files
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
11.5 A Brief Introduction to XML
11.5.1 Basic XML Syntax
11.5.2 Working With the DOM
Exercises for Chapter 11
Quiz on Chapter 11
12 Threads and Multiprocessing
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
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.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
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
12.5 Network Programming Example
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
Exercises for Chapter 12
Quiz on Chapter 12
13 GUI Programming Continued
13.1 Properties and Bindings
13.1.1 Observable Values
13.1.2 Bindable Properties
13.1.3 Bidirectional Bindings
13.2 Fancier Graphics
13.2.1 Fancier Strokes
13.2.2 Fancier Paints
13.2.3 Transforms
13.2.4 Stacked Canvasses
13.2.5 Pixel Manipulation
13.2.6 Image I/O
13.3 Complex Components and MVC
13.3.1 A Simple Custom Component
13.3.2 The MVC Pattern
13.3.3 ListView and ComboBox
13.3.4 TableView
13.4 Mostly Windows and Dialogs
13.4.1 Dialog Boxes
13.4.2 WebView and WebEngine
13.4.3 Managing Multiple Windows
13.5 Finishing Touches
13.5.1 The Mandelbrot Set
13.5.2 Design of the Program
13.5.3 Events, Listeners, and Bindings
13.5.4 A Few More GUI Details
13.5.5 Internationalization
13.5.6 Preferences
Exercises for Chapter 13
Quiz on Chapter 13
Appendix: Source Files
Glossary