IntroductiontoProgrammingUsingJava - HWS

Transcription

Introduction to Programming Using JavaVersion 8.1.3, August 2021(Minor update of Version 8.0, December 2018;very minor update of Version 8.1, July 2019)David J. EckHobart and William Smith CollegesThis is a PDF version of a free on-line book that is available athttp://math.hws.edu/javanotes/. The PDF does not includesource code files, solutions to exercises, or answers to quizzes, butit does have external links to these resources, shown in blue.The PDF also has internal links, shown in red. These links canbe used in Acrobat Reader and some other PDF reader programs.

iic 1996–2021, David J. EckDavid J. Eck (eck@hws.edu)Department of Mathematics and Computer ScienceHobart and William Smith CollegesGeneva, NY 14456This book can be distributed in unmodified form for non-commercial purposes.Modified versions can be made and distributed for non-commercial purposesprovided they are distributed under the same license as the original. Morespecifically: This work is licensed under the Creative Commons AttributionNonCommercial-ShareAlike 4.0 License. To view a copy of this license, 4.0/. Other uses requirepermission from the author.The web site for this book is:http://math.hws.edu/javanotes

ContentsPrefacexi1 The Mental Landscape1.1 Machine Language . . . . . .1.2 Asynchronous Events . . . . .1.3 The Java Virtual Machine . .1.4 Building Blocks of Programs1.5 Object-oriented Programming1.6 The Modern User Interface .1.7 The Internet and Beyond . .Quiz on Chapter 1 . . . . . . . . .11379111315182 Names and Things2.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 Introduction to Enums . . . . . . . . .2.3.5 Text Blocks: Multiline Strings . . . .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 . . . . . . . . . . 151.i.

CONTENTSii2.5.5 Conditional Operator . . . . . . . . . . . . .2.5.6 Assignment Operators and Type Conversion2.5.7 Precedence Rules . . . . . . . . . . . . . . . .2.6 Programming Environments . . . . . . . . . . . . . .2.6.1 Getting JDK and JavaFX . . . . . . . . . . .2.6.2 Command Line Environment . . . . . . . . .2.6.3 JavaFX on the Command Line . . . . . . . .2.6.4 Eclipse IDE . . . . . . . . . . . . . . . . . . .2.6.5 Using JavaFX in Eclipse . . . . . . . . . . . .2.6.6 BlueJ . . . . . . . . . . . . . . . . . . . . . .2.6.7 The Problem of Packages . . . . . . . . . . .2.6.8 About jshell . . . . . . . . . . . . . . . . . . .Exercises for Chapter 2 . . . . . . . . . . . . . . . . . . .Quiz on Chapter 2 . . . . . . . . . . . . . . . . . . . . . .3 Control3.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 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 Statements3.6.5 A New switch Statement Syntax . . . . . .3.7 Exceptions and try.catch . . . . . . . . . . . . . .3.7.1 Exceptions . . . . . . . . . . . . . . . . . .3.7.2 try.catch . . . . . . . . . . . . . . . . . . 16116117

CONTENTS3.7.3 Exceptions in TextIO . . .3.8 Introduction to Arrays . . . . . . .3.8.1 Creating and Using Arrays3.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 . . . . . . . . . . . .iii.1191211211231241261271291291331341371414 Subroutines4.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 Parameters4.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 Javadoc4.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 . . . . . . 63163164167168169170170173173174175176178179181182

CONTENTS4.7.1 Preconditions and Postconditions4.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 . . . . . . . . . . . . . . .iv.1821831881901901911921951982015 Objects and Classes5.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.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 Interfaces5.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 . . . . . . . . . . . . . 256257258

CONTENTSv5.8.3 Anonymous Inner Classes . . . . . . . .5.8.4 Local Classes and Lambda ExpressionsExercises for Chapter 5 . . . . . . . . . . . . . . . .Quiz on Chapter 5 . . . . . . . . . . . . . . . . . . .6 Introduction to GUI Programming6.1 A Basic JavaFX Application . . . . . .6.1.1 JavaFX Applications . . . . . .6.1.2 Stage, Scene, and SceneGraph6.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 . . . . . . .Exercises for Chapter 6 . . . . . . . . . . .Quiz on Chapter 6 . . . . . . . . . . . . . .259260262266.269. 269. 270. 272. 273. 274. 275. 275. 276. 277. 278. 283. 285. 286. 287. 289. 292. 294. 295. 298. 299. 300. 300. 302. 304. 306. 307. 309. 311. 312. 316. 318. 318. 321. 325. 326. 328. 334

CONTENTS7 Arrays and ArrayLists7.1 Array Details . . . . . . . . . . . . . . . . .7.1.1 For-each Loops . . . . . . . . . . . .7.1.2 Variable Arity Methods . . . . . . .7.1.3 Array Literals . . . . . . . . . . . . .7.1.4 Introducing Records . . . . . . . . .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 Types7.3.2 Wrapper Classes . . . . . . . . . . .7.3.3 Programming With ArrayList . . . .7.4 Searching and Sorting . . . . . . . . . . . .7.4.1 Searching . . . . . . . . . . . . . . .7.4.2 Association Lists . . . . . . . . . . .7.4.3 Insertion Sort . . . . . . . . . . . . .7.4.4 Selection Sort . . . . . . . . . . . . .7.4.5 Unsorting . . . . . . . . . . . . . . .7.5 Two-dimensional Arrays . . . . . . . . . . .7.5.1 The Truth About 2D Arrays . . . .7.5.2 Conway’s Game Of Life . . . . . . .7.5.3 Checkers . . . . . . . . . . . . . . . .Exercises for Chapter 7 . . . . . . . . . . . . . .Quiz on Chapter 7 . . . . . . . . . . . . . . . . .8 Correctness, Robustness, Efficiency8.1 Introduction to Correctness and Robustness8.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 . . . . . . . . . . . . . .vi.335. 335. 336. 337. 339. 341. 341. 341. 344. 346. 349. 351. 351. 353. 355. 358. 359. 361. 363. 365. 367. 367. 368. 371. 374. 382. 386.389. 389. 390. 391. 393. 394. 395. 395. 398. 401. 405. 405. 407. 411. 412. 413. 417. 417. 420

CONTENTSvii8.5 Analysis of Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422Exercises for Chapter 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428Quiz on Chapter 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4329 Linked Data Structures and Recursion9.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 . . . . . . . . . . . . . . 6646746947347647747848248548810 Generic Programming and Collection Classes10.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 . . . . 12.

CONTENTSviii10.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 Methods10.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 Networking11.1 I/O Streams, Readers, and Writers .11.1.1 Character and Byte Streams11.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 . . . . . . . . . . . 2574579580582583585589593594595601604

CONTENTSix12 Threads and Multiprocessing12.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, Timers, and JavaFX . . . . . . .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 Queues12.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 Program12.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 . . . . . . . . . . . . . . . . . . .605. 605. 606. 611. 613. 617. 618. 619. 619. 621. 623. 625. 627. 627. 628. 631. 635. 637. 642. 642. 643. 647. 649. 651. 656. 656. 660. 663. 665. 667. 67113 GUI Programming Continued13.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 Component13.3.2 The MVC Pattern . . . . . .673673674675677679680681684687688690693693695

CONTENTS13.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 Bindings13.5.4 A Few More GUI Details . . .13.5.5 Internationalization . . . . . .13.5.6 Preferences . . . . . . . . . . .Exercises for Chapter 13 . . . . . . . . . . .Quiz on Chapter 13 . . . . . . . . . . . . pendix: Source Files729Glossary739

PrefaceIntroduction to Programming Using Java is a free introductory computer programmingtextbook that uses Java as the language of instruction. It is suitable for use in an introductoryprogramming course and for people who are trying to learn programming on their own. Thereare 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 1through 7 can be used as a textbook in a one-semester college-level course or in a year-longhigh school course. The remaining chapters can be covered in a second course.The Eighth Edition of the book uses Java 8, with brief coverage of features that were addedto the language in Java 9 and later. JavaFX is used for GUI programming. All sample programsand all exercise solutions have been compiled with Java 11 and with Java 16, as well as withJava 8.The home web site for this

IntroductiontoProgrammingUsingJava Version8.1.3,August2021 (Minor update of Version 8.0, December 2018; very minor update of Version 8.1, July 2019)