You are on page 1of 26

ABSOLUTE

JAVA
TM
5 th EditionThis page intentionally left blankABSOLUTE
JAVA
TM
5 th Edition
Walter Savitch
University of California, San Diego
Contributor
Kenrick Mock
University of Alaska Anchorage
Boston Columbus Indianapolis New York San Francisco Upper Saddle River
Amsterdam Cape Town Dubai London Madrid Milan Munich Paris Montral Toronto
Delhi Mexico City So Paulo Sydney Hong Kong Seoul Singapore Taipei TokyoVice President and
Editorial
Director, ECS: Marcia Horton
Editor in Chief: Michael Hirsch
Executive Editor: Matt Goldstein
Editorial Assistant: Emma Snider
Vice President Marketing: Patrice Jones
Marketing Manager: Yez Alayan
Marketing Coordinator: Kathryn Ferranti
Vice President and Director of
Production: Vince OBrien
Managing Editor: Jeff Holcomb
Senior Production Project Manager: Marilyn Lloyd
Manufacturing Manager: Nick Skilitis
Operations Specialist: Lisa McDowell
Text Designer: Joyce Cosentino Wells
Cover Designer: Anthony Gemmellaro
Cover Image: B0NGR1 Alamy
Media Editor: Dan Sandin
Text Permissionsassessment: Dana Weightman
Text Permissionsclearance: Jenn Kennett/Creative
Compliance
Full-Service Vendor: GEX Publishing Services
Project Management: GEX Publishing Services
Printer/Binder: Edwards Brothers
Cover Printer: Lehigh-Phoenix Color
This book was composed in InDesign. Basal font is Adobe Garamond 10/12. Display font is Optima
LT Std.
Credits and acknowledgments borrowed from other sources and reproduced, with permission, in this
textbook
appear on the appropriate page within text.
Copyright 2013, 2010, 2008, 2006, 2004 by Pearson Education, Inc., publishing as Addison-Wesley.
All
rights reserved. Manufactured in the United States of America. This publication is protected by
Copyright, and
permission should be obtained from the publisher prior to any prohibited reproduction, storage in a
retrieval
system, or transmission in any form or by any means, electronic, mechanical, photocopying, recording,
or
likewise. To obtain permission(s) to use material from this work, please submit a written request to
Pearson
Education, Inc., Permissions Department, One Lake Street, Upper Saddle River, New Jersey 07458, or
you
may fax your request to 201-236-3290.
Many of the designations by manufacturers and sellers to distinguish their products are claimed as
trademarks.
Where those designations appear in this book, and the publisher was aware of a trademark claim, the
designa-
tions have been printed in initial caps or all caps.
CIP data available upon request
10 9 8 7 6 5 4 3 2 1
ISBN 10: 0-13-283031-0
ISBN 13: 978-0-13-283031-7Preface
This book is designed to serve as a textbook and reference for programming in the
Java language. Although it does include programming techniques, it is organized
around the features of the Java language rather than any particular curriculum of
programming techniques. The main audience I had in mind when writing this book
was undergraduate students who have not had extensive programming experience with
the Java language. As such, it would be a suitable Java text or reference for either a first
programming course or a later computer science course that uses Java. This book is
designed to accommodate a wide range of users. The introductory chapters are written
at a level that is accessible to beginners, while the boxed sections of those chapters
serve to quickly introduce more experienced programmers to basic Java syntax. Later
chapters are still designed to be accessible, but are written at a level suitable for students
who have progressed to these more advanced topics.
CHANGES IN THIS EDITION
This fifth edition presents the same programming philosophy as the fourth edition.
For instructors, you can teach the same course, presenting the same topics in the same
order with no changes in the material covered or the chapters assigned. The changes to
this edition consist almost exclusively of supplementary material added to the chapters
of the previous edition, namely:









Updates have been made for language changes in Java 7, such as allowing strings in
switch statements.
Twenty-five new programming projects have been added. By request, some of these
are longer and less prescriptive projects to give the student more practice designing
programming solutions.
15 new video notes have been created for a total of 46 video notes. These videos cover
specific topics and offer solutions to the programming projects; they have been added to
the books website. The solutions walk students through the process of problem solving
and coding to reinforce key programming concepts. An icon appears in the margin of
the book when a video is available regarding the corresponding topic in the text.
Chapter 2 now describes how to use the Scanner class to read from a text file so data-
based programming projects can be explored prior to detailed coverage of File I/O in
Chapter 10.
A brief introduction to the Random class has been added to Chapter 3.
Chapter 9 on exception handling begins with a new introduction of try/catch
for handling input mismatch exceptions before discussing how to throw custom
exceptions.
A recursive algorithm to search the file system has been added to Chapter 11.
Material on race conditions and thread synchronization has been added to
Chapter 19.
Ten new self-test exercises have been added along with the new material.
vvi
Preface
NO NONSTANDARD SOFTWARE
Only classes in the standard Java libraries are used. No nonstandard software is used
anywhere in the book.
JAVA COVERAGE
All programs have been tested with Java 7. Oracle is not proposing any changes to
future versions of Java that would affect the approach in this book.
OBJECT-ORIENTED PROGRAMMING
This book gives extensive coverage of encapsulation, inheritance, and polymorphism
as realized in the Java language. The chapters on Swing GUIs provide coverage of and
extensive practice with event driven programming. A chapter on UML and patterns
gives additional coverage of OOP-related material.
FLEXIBILITY IN TOPIC ORDERING
This book allows instructors wide latitude in reordering the material. This is important
if a book is to serve as a reference. It is also in keeping with my philosophy of writing
books that accommodate themselves to an instructors style rather than tying the
instructor to an authors personal preference of topic ordering. With this in mind, each
chapter has a prerequisite section at the beginning; this section explains what material
must be covered before doing each section of the chapter. Starred sections, which are
explained next, further add to flexibility.
STARRED SECTIONS
Each chapter has a number of starred () sections, which can be considered optional.
These sections contain material that beginners might find difficult and that can be
omitted or delayed without hurting the continuity of the text. It is hoped that eventually
the reader would return and cover this material. For more advanced students, the
starred sections should not be viewed as optional.
ACCESSIBLE TO STUDENTS
It is not enough for a book to present the right topics in the right order. It is not even
enough for it to be clear and correct when read by an instructor or other expert. The
material needs to be presented in a way that is accessible to the person who does not yet
know the content. Like my other textbooks that have proven to be very popular, this
book was written to be friendly and accessible to the student.
SUMMARY BOXES
Each major point is summarized in a short boxed section. These boxed sections are
spread throughout each chapter. They serve as summaries of the material, as a quick
reference source, and as a way to quickly learn the Java syntax for features the reader
knows about in general but for which he or she needs to know the Java particulars.Preface
SELF-TEST EXERCISES
Each chapter contains numerous Self-Test Exercises at strategic points in the chapter.
Complete answers for all the Self-Test Exercises are given at the end of each chapter.
VIDEO NOTES
VideoNote
VideoNotes are step-by-step videos that guide readers through the solution to an end-
of-chapter problem or further illuminate a concept presented in the text. Icons in the
text indicate where a VideoNote enhances a topic. Fully navigable problems allow for
self-paced instruction. VideoNotes are located at www.pearsonhighered.com/savitch.
OTHER FEATURES
Pitfall sections, programming tip sections, and examples of complete programs with
sample I/O are given throughout each chapter. Each chapter ends with a summary
section and a collection of programming projects suitable to assign to students.
ONLINE PRACTICE AND ASSESSMENT WITH
MyProgrammingLab
MyProgrammingLab helps students fully grasp the logic, semantics, and syntax of
programming. Through practice exercises and immediate, personalized feedback,
MyProgrammingLab improves the programming competence of beginning students
who often struggle with the basic concepts and paradigms of popular high-level
programming languages.
A self-study and homework tool, a MyProgrammingLab course consists of hundreds
of small practice problems organized around the structure of this textbook. For
students, the system automatically detects errors in the logic and syntax of their code
submissions and offers targeted hints that enable students to figure out what went
wrongand why. For instructors, a comprehensive gradebook tracks correct and
incorrect answers and stores the code inputted by students for review.
MyProgrammingLab is offered to users of this book in partnership with Turings
Craft, the makers of the CodeLab interactive programming exercise system. For a full
demonstration, to see feedback from instructors and students, or to get started using
MyProgrammingLab in your course, visit www.myprogramminglab.com.
SUPPORT MATERIAL
The following support materials are available to all users of this book at www.
pearsonhighered.com/cssupport:

Source code from the book
The following resources are available to qualifi ed instructors only at www. pearsonhighered.
com/irc. Please contact your local sales representative for access information:


Instructors Manual with Solutions
PowerPoint slides
viiviii
Preface
Integrated Development Environment Resource Kits
Professors who adopt this text can order it for students with a kit containing seven popular
Java IDEs (the most recent JDK from Oracle, Eclipse, NetBeans, jGRASP, DrJava, BlueJ,
and TextPad). The kit also includes access to a website containing written and video
tutorials for getting started in each IDE. For ordering information, please contact your
campus Pearson Education representative or visit www.pearsonhighered.com.
ACKNOWLEDGMENTS
Numerous individuals have contributed invaluable help and support in making this
book happen: My former editor, Susan Hartman at Addison-Wesley, fi rst conceived
of the idea for this book and worked with me on the fi rst editions; My current edi-
tor, Matt Goldstein, provided support and inspiration for getting subsequent editions
reviewed, revised, and out the door; Chelsea Kharakozova, Marilyn Lloyd, Yez Alayan,
and the other fi ne people at Pearson also provided valuable assistance and encourage-
ment. Thanks also to GEX Publishing Services for their expert work in producing the
fi nal typeset book.
The following reviewers provided corrections and suggestions for this book. Their
contributions were a great help. I thank them all. In alphabetical order they are:
Jim Adams
Gerald W. Adkins
Dr. Bay Arinze
Prof. Richard G. Baldwin
Kevin Bierre
Jon Bjornstad
Janet Brown-Sederberg
Tom Brown
Charlotte Busch
Stephen Chandler
KY Daisy Fan
Adrienne Decker
Brian Downs
Keith Frikken
Ahmad Ghafarian
Arthur Geis
Massoud Ghyam
Susan G. Glenn
Nigel Gwee
Judy Hankins
May Hou
Chandler-Gilbert Community College
Georgia College & State University
Drexel University
Austin Community College
Rochester Institute of Technology
Gavilan College
Massasoit Community College
Texas A&M University, Commerce
Texas A&M University, Corpus Christi
NW Shoals Community College
Cornell University
University of Buffalo
Century College
Miami University
North Georgia College & State University
College of DuPage
University of Southern California
Gordon College
Louisiana State University
Middle Tennessee State University
Norfolk State UniversityPreface
Sterling Hough
Chris Howard
Eliot Jacobson
Balaji Janamanchi
Suresh Kalathur
Edwin Kay
Dr. Clifford R. Kettemborough
Frank Levey
Xia Lin
Mark M. Meysenburg
Sridhar P. Nerur
Hoang M. Nguyen
Rick Ord
Prof. Bryson R. Payne
David Primeaux
Neil Rhodes
W. Brent Seales
Lili Shashaani
Riyaz Sikora
Jeff Six
Donald J Smith
Tom Smith
Xueqing (Clare) Tang
Ronald F. Taylor
Thomas VanDrunen
Shon Vick
Natalie S. Wear
Dale Welch
David A. Wheeler
Wook-Sung Yoo
NHTI
DeVry University
University of California, Santa Barbara
Texas Tech University
Boston University
Lehigh University
IT Consultant and Professor
Manatee Community College
Drexel University
Doane College
The University of Texas at Arlington
Deanza College
University of California, San Diego
North Georgia College & State University
Virginia Commonwealth University
University of California, San Diego
University of Kentucky
Duquesne University
The University of Texas at Arlington
University of Delaware
Community College of Allegheny County
Skidmore College
Governors State University
Wright State University
Wheaton College
University of Maryland, Baltimore County
University of South Florida
University of West Florida
Gannon University
Special thanks goes to Kenrick Mock (University of Alaska Anchorage) who
executed the updating of this edition. He once again had the difficult job of satisfying
me, the editor, and himself. I thank him for a truly excellent job.
Walter Savitch
ixLOCATION OF VIDEONOTES IN THE TEXT
VideoNote
www.pearsonhighered.com/savitch
Chapter 1 Compiling a Java Program, page 10
Solution to Programming Project 1.7, page 56
Chapter 2 Pitfalls Involving nextLine() , page 83
Solution to Programming Project 2.11, page 97
Solution to Programming Project 2.12, page 98
Chapter 3 Nested Loop Example, page 145
Debugging Walkthrough, page 152
Solution to Programming Project 3.9, page 170
Solution to Programming Project 3.13, page 171
Chapter 4 Information Hiding Example, page 207
Example Using the StringTokenizer Class on a CSV File, page 247
Solution to Programming Project 4.9, page 255
Chapter 5 Deep Copy vs. Shallow Copy Example, page 321
Solution to Programming Project 5.9, page 344
Chapter 6 Arrays of Objects, page 358
Solution to Programming Project 6.8, page 422
Solution to Programming Project 6.15, page 424
Chapter 7 Inheritance Walkthrough, page 432
Solution to Programming Project 7.3, page 477
Solution to Programming Project 7.5, page 479
Chapter 8 Late Binding Example, page 486
Solution to Programming Project 8.1, page 518
Solution to Programming Project 8.9, page 521
Chapter 9 Solution to Programming Project 9.1, page 574
Solution to Programming Project 9.7, page 576
Chapter 10 Reading a Text File, page 589
Solution to Programming Project 10.1, page 643
Solution to Programming Project 10.8, page 645
Chapter 11 Recursion and the Stack, page 660
Solution to Programming Project 11.3, page 684
Chapter 12 Solution to Programming Project 12.9, page 710
Chapter 13 Solution to Programming Project 13.1, page 754
Solution to Programming Project 13.11, page 757
Chapter 14 Solution to Programming Project 14.7, page 801
Chapter 15 Walkthrough of the Hash Table Class, page 868
Solution to Programming Project 15.1, page 893Chapter 16 Solution to Programming Project 16.3,
page 937
Solution to Programming Project 16.5, page 938
Chapter 17 GUI Layout Using an IDE, page 969
Solution to Programming Project 17.1, page 1013
Chapter 18 Walkthrough of a Simple Drawing Program, page 1042
Solution to Programming Project 18.7, page 1077
Chapter 19 Walkthrough of a Program with Race Conditions, page 1094
Solution to Programming Project 19.3, page 1135
Solution to Programming Project 19.11, page 1136
Chapter 20 No video notes (Chapter on website)This page intentionally left blankBrief Contents
Chapter 1
Chapter 2
Chapter 3
Chapter 4
Chapter 5
Chapter 6
Chapter 7
Chapter 8
Chapter 9
Chapter 10
Chapter 11
Chapter 12
Chapter 13
Chapter 14
Chapter 15
Chapter 16
Chapter 17
Chapter 18
Chapter 19
Chapter 20
Appendix 1
Appendix 2
Appendix 3
Appendix 4
Appendix 5
GETTING STARTED
1
CONSOLE INPUT AND OUTPUT 57
FLOW OF CONTROL 99
DEFINING CLASSES I 173
DEFINING CLASSES II 259
ARRAYS 345
INHERITANCE
427
POLYMORPHISM AND ABSTRACT CLASSES 483
EXCEPTION HANDLING 523
FILE I/O
577
RECURSION 647
UML AND PATTERNS 689
INTERFACES AND INNER CLASSES 711
GENERICS AND THE ArrayList CLASS 759
LINKED DATA STRUCTURES 801
COLLECTIONS, MAPS AND ITERATORS 897
SWING I
SWING II
941
1017
JAVA NEVER ENDS
1079
APPLETS AND HTML 1137
KEYWORDS 1139
PRECEDENCE AND ASSOCIATIVITY RULES 1141
ASCII CHARACTER SET 1143
FORMAT SPECIFICATIONS FOR printf
1145
SUMMARY OF CLASSES AND INTERFACES 1147
INDEX 1215
xiiiThis page intentionally left blankContents
Chapter 1
1.1
1.2
Getting Started 1
INTRODUCTION TO JAVA 2
Origins of the Java Language 2
Objects and Methods 3
Applets 4
A Sample Java Application Program 5
Byte-Code and the Java Virtual Machine 8
Class Loader 10
Compiling a Java Program or Class 10
Running a Java Program 11
TIP: Error Messages 12
EXPRESSIONS AND ASSIGNMENT STATEMENTS 13
Identifi ers 13
Variables 15
Assignment Statements 16
TIP: Initialize Variables 18
More Assignment Statements 19
Assignment Compatibility 20
Constants 21
Arithmetic Operators and Expressions 23
Parentheses and Precedence Rules 24
Integer and Floating-Point Division 26
PITFALL: Round-Off Errors in Floating-Point Numbers
PITFALL: Division with Whole Numbers 28
Type Casting 29
Increment and Decrement Operators 30
1.3
27
THE CLASS String 33
String Constants and Variables 33
Concatenation of Strings 34
Classes 35
String Methods 37
Escape Sequences 42
String Processing 43
The Unicode Character Set 43
xvxvi
Contents
1.4
PROGRAM STYLE
46
Naming Constants 46
Java Spelling Conventions 48
Comments 49
Indenting 50
Chapter Summary 51
Answers to Self-Test Exercises 52
Programming Projects 54
Chapter 2
2.1
Console Input and Output
SCREEN OUTPUT
57
58
58
TIP: Different Approaches to Formatting Output 61
Formatting Output with printf 61
TIP: Formatting Monetary Amounts with printf 65
TIP: Legacy Code 66
Money Formats Using NumberFormat 67
Importing Packages and Classes 70
The DecimalFormat Class 72
System.out.println
2.2
CONSOLE INPUT USING THE Scanner CLASS
The Scanner Class 76
PITFALL: Dealing with the Line Terminator, '\n'
The Empty String 84
TIP: Prompt for Input 84
TIP: Echo Input 84
EXAMPLE: Self-Service Checkout 86
Other Input Delimiters 87
2.3
INTRODUCTION TO FILE INPUT 89
The Scanner Class for Text File Input
Chapter Summary 92
Answers to Self-Test Exercises 92
Programming Projects 95
Chapter 3
3.1
Flow of Control
99
BRANCHING MECHANISM
if-else Statements 100
Omitting the else 101
Compound Statements 102
TIP: Placing of Braces 103
Nested Statements 104
100
89
83
76Contents
Multiway if-else Statement 104
EXAMPLE: State Income Tax 105
The switch Statement 107
PITFALL: Forgetting a break in a switch Statement
The Conditional Operator 112
3.2
111
BOOLEAN EXPRESSIONS 113
Simple Boolean Expressions 113
PITFALL: Using = in Place of == 114
PITFALL: Using == with Strings 115
Lexicographic and Alphabetical Order 116
Building Boolean Expressions 119
PITFALL: Strings of Inequalities 120
Evaluating Boolean Expressions 120
TIP: Naming Boolean Variables 123
Short-Circuit and Complete Evaluation 124
Precedence and Associativity Rules 125
3.3
LOOPS
132
while Statement and do-while Statement
132
Algorithms and Pseudocode 134
EXAMPLE: Averaging a List of Scores 137
The for Statement 138
The Comma in for Statements 141
TIP: Repeat N Times Loops 143
PITFALL: Extra Semicolon in a for Statement 143
PITFALL: Infi nite Loops 144
Nested Loops 145
The break and continue Statements 148
The exit Statement 149
3.4
DEBUGGING
150
Loop Bugs 150
Tracing Variables 150
General Debugging Techniques 151
EXAMPLE: Debugging an Input Validation Loop
Preventive Coding 156
Assertion Checks 157
3.5
RANDOM NUMBER GENERATION
The Random Object 160
The Math.random() Method 161
Chapter Summary 162
Answers to Self-Test Exercises
Programming Projects 168
162
159
152
xviixviii
Contents
Chapter 4
4.1
Defi ning Classes I
173
CLASS DEFINITIONS 174
Instance Variables and Methods 177
More about Methods 180
TIP: Any Method Can Be Used as a void Method 184
Local Variables 186
Blocks 187
TIP: Declaring Variables in a for Statement 188
Parameters of a Primitive Type 188
PITFALL: Use of the Terms Parameter and Argument 195
Simple Cases with Class Parameters 197
The this Parameter 197
Methods That Return a Boolean Value 199
The Methods equals and toString 202
Recursive Methods 205
TIP: Testing Methods 205
4.2
INFORMATION HIDING AND ENCAPSULATION 207
public and private Modifi ers
208
EXAMPLE: Yet Another Date Class 209
Accessor and Mutator Methods 210
TIP: A Class Has Access to Private Members of All Objects of the Class 215
TIP: Mutator Methods Can Return a Boolean Value 216
Preconditions and Postconditions 217
4.3
OVERLOADING 218
Rules for Overloading 218
PITFALL: Overloading and Automatic Type Conversion 222
PITFALL: You Cannot Overload Based on the Type Returned 224
4.4
CONSTRUCTORS
226
Constructor Defi nitions 226
TIP: You Can Invoke Another Method in a Constructor 234
TIP: A Constructor Has a this Parameter 234
TIP: Include a No-Argument Constructor 235
EXAMPLE: The Final Date Class 236
Default Variable Initializations 237
An Alternative Way to Initialize Instance Variables 237
EXAMPLE: A Pet Record Class 238
The StringTokenizer Class 242
Chapter Summary 247
Answers to Self-Test Exercises 248
Programming Projects 253Contents
Chapter 5
5.1
Defi ning Classes II 259
STATIC METHODS AND STATIC VARIABLES 261
Static Methods 261
PITFALL: Invoking a Nonstatic Method Within a Static Method 263
TIP: You Can Put a main in Any Class 264
Static Variables 268
The Math Class 273
Wrapper Classes 277
Automatic Boxing and Unboxing 278
Static Methods in Wrapper Classes 280
PITFALL: A Wrapper Class Does Not Have a No-Argument Constructor
5.2
REFERENCES AND CLASS PARAMETERS 284
Variables and Memory 285
References 286
Class Parameters 291
PITFALL: Use of = and == with Variables of a Class Type 295
The Constant null 297
PITFALL: Null Pointer Exception 298
The new Operator and Anonymous Objects 298
EXAMPLE: Another Approach to Keyboard Input 299
TIP: Use Static Imports 301
5.3
USING AND MISUSING REFERENCES 303
EXAMPLE: A Person Class 304
PITFALL: null Can Be an Argument to a Method 309
Copy Constructors 313
PITFALL: Privacy Leaks 315
Mutable and Immutable Classes 319
TIP: Deep Copy versus Shallow Copy 321
TIP: Assume Your Coworkers Are Malicious 322
5.4
PACKAGES AND javadoc 322
Packages and import Statements 323
The Package java.lang 324
Package Names and Directories 324
PITFALL: Subdirectories Are Not Automatically Imported 327
The Default Package 327
PITFALL: Not Including the Current Directory in Your Class Path
Specifying a Class Path When You Compile 328
Name Clashes 329
Introduction to javadoc 330
Commenting Classes for javadoc 330
Running javadoc 332
328
283
xixxx
Contents
Chapter Summary 334
Answers to Self-Test Exercises
Programming Projects 339
Chapter 6
6.1
Arrays
335
345
INTRODUCTION TO ARRAYS 346
Creating and Accessing Arrays 347
The length Instance Variable 350
TIP: Use for Loops with Arrays 352
PITFALL: Array Indices Always Start with Zero 352
PITFALL: Array Index Out of Bounds 352
Initializing Arrays 353
PITFALL: An Array of Characters Is Not a String 355
6.2
ARRAYS AND REFERENCES 356
Arrays Are Objects 356
PITFALL: Arrays with a Class Base Type 358
Array Parameters 358
PITFALL: Use of = and == with Arrays 360
Arguments for the Method main 365
Methods that Return an Array 367
6.3
PROGRAMMING WITH ARRAYS 368
Partially Filled Arrays 369
EXAMPLE: A Class for Partially Filled Arrays 372
TIP: Accessor Methods Need Not Simply Return Instance Variables 376
The for-each Loop 376
Methods with a Variable Number of Parameters 380
EXAMPLE: A String Processing Example 383
Privacy Leaks with Array Instance Variables 384
Enumerated Types 386
EXAMPLE: Sorting an Array 388
TIP: Enumerated Types in switch Statements 397
6.4
MULTIDIMENSIONAL ARRAYS 399
Multidimensional Array Basics 399
Using the length Instance Variable 402
Ragged Arrays 403
Multidimensional Array Parameters and Returned Values
EXAMPLE: A Grade Book Class 404
Chapter Summary 410
Answers to Self-Test Exercises
Programming Projects 418
411
403Contents
Chapter 7
7.1
Inheritance 427
INHERITANCE BASICS 428
Derived Classes 429
Overriding a Method Defi nition 439
Changing the Return Type of an Overridden Method 439
Changing the Access Permission of an Overridden Method 440
PITFALL: Overriding versus Overloading 441
The super Constructor 442
The this Constructor 444
TIP: An Object of a Derived Class Has More than One Type 445
PITFALL: The Terms Subclass and Superclass 448
EXAMPLE: An Enhanced StringTokenizer Class 449
7.2
ENCAPSULATION AND INHERITANCE 452
PITFALL: Use of Private Instance Variables from the Base Class 453
PITFALL: Private Methods Are Effectively Not Inherited 454
Protected and Package Access 455
PITFALL: Forgetting about the Default Package 458
PITFALL: A Restriction on Protected Access 458
7.3
PROGRAMMING WITH INHERITANCE 461
TIP: Static Variables Are Inherited 461
TIP: is a versus has a 461
Access to a Redefi ned Base Method 461
PITFALL: You Cannot Use Multiple super s 463
The Class Object 464
The Right Way to Defi ne equals 465
TIP: getClass versus instanceof 467
Chapter Summary 472
Answers to Self-Test Exercises
Programming Projects 476
Chapter 8
8.1
473
Polymorphism and Abstract Classes 483
POLYMORPHISM
484
Late Binding 485
The final Modifi er 487
EXAMPLE: Sales Records 488
Late Binding with toString 495
PITFALL: No Late Binding for Static Methods
Downcasting and Upcasting 497
PITFALL: Downcasting 501
496
xxixxii
Contents
TIP: Checking to See Whether Downcasting Is Legitimate 501
A First Look at the clone Method 504
PITFALL: Sometimes the clone Method Return Type Is Object 505
PITFALL: Limitations of Copy Constructors 506
8.2
ABSTRACT CLASSES
509
Abstract Classes 510
PITFALL: You Cannot Create Instances of an Abstract Class
TIP: An Abstract Class Is a Type 515
514
Chapter Summary 516
Answers to Self-Test Exercises 516
Programming Projects 518
Chapter 9
9.1
Exception Handling 523
EXCEPTION HANDLING BASICS 525
try-catch Mechanism
525
Exception Handling with the Scanner Class 527
TIP: Exception Controlled Loops 528
Throwing Exceptions 530
EXAMPLE: A Toy Example of Exception Handling 532
Exception Classes 537
Exception Classes from Standard Packages 538
Defi ning Exception Classes 540
TIP: Preserve getMessage 544
TIP: An Exception Class Can Carry a Message of Any Type
Multiple catch Blocks 551
PITFALL: Catch the More Specifi c Exception First 553
9.2
546
THROWING EXCEPTIONS IN METHODS 556
Throwing an Exception in a Method 556
Declaring Exceptions in a throws Clause 558
Exceptions to the Catch or Declare Rule 561
throws Clause in Derived Classes 562
When to Use Exceptions 563
Event-Driven Programming 564
9.3
MORE PROGRAMMING TECHNIQUES FOR EXCEPTION
HANDLING 566
PITFALL: Nested try-catch Blocks 566
The finally Block 566
Rethrowing an Exception 568
The AssertionError Class 568
ArrayIndexOutOfBoundsException 569Contents
Chapter Summary 569
Answers to Self-Test Exercises
Programming Projects 574
Chapter 10
10.1
File I/O
577
INTRODUCTION TO FILE I/O 578
Streams 578
Text Files and Binary Files
10.2
570
TEXT FILES
579
580
Writing to a Text File 580
PITFALL: A try Block Is a Block 586
PITFALL: Overwriting an Output File 586
Appending to a Text File 587
TIP: toString Helps with Text File Output 588
Reading from a Text File 589
Reading a Text File Using Scanner 589
Testing for the End of a Text File with Scanner 592
Reading a Text File Using BufferedReader 599
TIP: Reading Numbers with BufferedReader 603
Testing for the End of a Text File with BufferedReader 603
Path Names 605
Nested Constructor Invocations 606
System.in, System.out, and System.err 607
10.3
THE File CLASS 609
Programming with the File Class
10.4
BINARY FILES
609
613
Writing Simple Data to a Binary File 614
UTF and writeUTF 618
Reading Simple Data from a Binary File 619
Checking for the End of a Binary File 624
PITFALL: Checking for the End of a File in the Wrong Way
Binary I/O of Objects 626
The Serializable Interface 627
PITFALL: Mixing Class Types in the Same File 630
Array Objects in Binary Files 630
10.5
RANDOM ACCESS TO BINARY FILES
632
Reading and Writing to the Same File 632
PITFALL: RandomAccessFile Need Not Start Empty
638
625
xxiiixxiv
Contents
Chapter Summary 638
Answers to Self-Test Exercises 639
Programming Projects 643
Chapter 11
11.1
Recursion 647
RECURSIVE Void METHODS 649
EXAMPLE: Vertical Numbers 649
Tracing a Recursive Call 652
A Closer Look at Recursion 655
PITFALL: Infi nite Recursion 657
Stacks for Recursion 658
PITFALL: Stack Overfl ow 660
Recursion versus Iteration 660
11.2
RECURSIVE METHODS THAT RETURN A VALUE 661
General Form for a Recursive Method That Returns a Value
EXAMPLE: Another Powers Method 662
11.3
THINKING RECURSIVELY 667
Recursive Design Techniques 667
Binary Search 668
Effi ciency of Binary Search 674
EXAMPLE: Finding a File 676
Chapter Summary 679
Answers to Self-Test Exercises 679
Programming Projects 684
Chapter 12
12.1
UML and Patterns
UML
689
690
History of UML 691
UML Class Diagrams 691
Class Interactions 692
Inheritance Diagrams 692
More UML 694
12.2
PATTERNS
695
Adaptor Pattern 695
The Model-View-Controller Pattern 696
EXAMPLE: A Sorting Pattern 697
Restrictions on the Sorting Pattern 703
Effi ciency of the Sorting Pattern 703
662Contents
TIP: Pragmatics and Patterns
Pattern Formalism 704
Chapter Summary 705
Answers to Self-Test Exercises
Programming Projects 707
Chapter 13
13.1
704
705
Interfaces and Inner Classes 711
INTERFACES 713
Interfaces 713
Abstract Classes Implementing Interfaces 715
Derived Interfaces 715
PITFALL: Interface Semantics Are Not Enforced 717
The Comparable Interface 719
EXAMPLE: Using the Comparable Interface 720
Defi ned Constants in Interfaces 725
PITFALL: Inconsistent Interfaces 726
The Serializable Interface 729
The Cloneable Interface 729
13.2
SIMPLE USES OF INNER CLASSES
734
Helping Classes 734
TIP: Inner and Outer Classes Have Access to Each Others Private Members 735
EXAMPLE: A Bank Account Class 735
The .class File for an Inner Class 739
PITFALL: Other Uses of Inner Classes 740
13.3
MORE ABOUT INNER CLASSES
740
Static Inner Classes 740
Public Inner Classes 741
TIP: Referring to a Method of the Outer Class
Nesting Inner Classes 745
Inner Classes and Inheritance 745
Anonymous Classes 746
TIP: Why Use Inner Classes? 748
Chapter Summary 749
Answers to Self-Test Exercises
Programming Projects 754
Chapter 14
14.1
743
749
Generics and the ArrayList Class 759
THE ArrayList CLASS 761
Using the ArrayList Class 762
TIP: Summary of Adding to an ArrayList 766
xxvxxvi
Contents
Methods in the Class ArrayList 767
The for-each Loop 770
EXAMPLE: Golf Scores 773
TIP: Use trimToSize to Save Memory 776
PITFALL: The clone Method Makes a Shallow Copy 776
The Vector Class 777
Parameterized Classes and Generics 778
PITFALL: Nonparameterized ArrayList and Vector Classes 778
14.2
GENERICS
778
Generic Basics 779
TIP: Compile with the -Xlint Option 781
EXAMPLE: A Generic Class for Ordered Pairs 781
PITFALL: A Generic Constructor Name Has No Type Parameter 784
PITFALL: You Cannot Plug in a Primitive Type for a Type Parameter 785
PITFALL: A Type Parameter Cannot Be Used Everywhere a Type Name
Can Be Used 785
PITFALL: An Instantiation of a Generic Class Cannot be an
Array Base Type 786
TIP: A Class Defi nition Can Have More Than One Type Parameter 787
PITFALL: A Generic Class Cannot Be an Exception Class 788
Bounds for Type Parameters 789
TIP: Generic Interfaces 792
Generic Methods 792
Inheritance with Generic Classes 794
Chapter Summary 796
Answers to Self-Test Exercises
Programming Projects 799
Chapter 15
15.1
796
Linked Data Structures 801
JAVA LINKED LISTS
804
EXAMPLE: A Simple Linked List Class 804
Working with Linked Lists 808
PITFALL: Privacy Leaks 813
Node Inner Classes 814
EXAMPLE: A Generic Linked List 817
PITFALL: Using Node Instead of Node<T> 822
The equals Method for Linked Lists 822
15.2
COPY CONSTRUCTORS AND THE clone METHOD
Simple Copy Constructors and clone Methods 824
Exceptions 825
824Contents
PITFALL: The clone Method Is Protected in object 827
TIP: Use a Type Parameter Bound for a Better clone 828
EXAMPLE: A Linked List with a Deep Copy clone Method 832
TIP: Cloning Is an All or Nothing Affair 835
15.3
ITERATORS
835
Defi ning an Iterator Class 836
Adding and Deleting Nodes 841
15.4
VARIATIONS ON A LINKED LIST 846
Doubly Linked List 846
The Stack Data Structure 855
The Queue Data Structure 857
Running Times and Big- O Notation
Effi ciency of Linked Lists 865
15.5
HASH TABLES WITH CHAINING
860
866
A Hash Function for Strings 867
Effi ciency of Hash Tables 870
15.6
SETS
871
Fundamental Set Operations 872
Effi ciency of Sets Using Linked Lists
15.7
TREES
877
878
Tree Properties 878
EXAMPLE: A Binary Search Tree Class 881
Effi ciency of Binary Search Trees 886
Chapter Summary 887
Answers to Self-Test Exercises
Programming Projects 893
Chapter 16
16.1
888
Collections, Maps and Iterators 897
COLLECTIONS 898
Wildcards 900
The Collection Framework 900
PITFALL: Optional Operations 906
TIP: Dealing with All Those Exceptions 907
Concrete Collection Classes 908
Differences between ArrayList<T> and Vector<T> 918
Nonparameterized Version of the Collection Framework
PITFALL: Omitting the <T> 919
918
xxviixxviii
Contents
16.2
MAPS
919
Concrete Map Classes
16.3
ITERATORS
922
926
The Iterator Concept 926
The Iterator<T> Interface 926
TIP: For-Each Loops as Iterators 929
List Iterators 930
PITFALL: next Can Return a Reference 932
TIP: Defi ning Your Own Iterator Classes 934
Chapter Summary 935
Answers to Self-Test Exercises 935
Programming Projects 936
Chapter 17
17.1
Swing I
941
EVENT-DRIVEN PROGRAMMING 943
Events and Listeners
17.2
943
BUTTONS, EVENTS, AND OTHER SWING BASICS 944
EXAMPLE: A Simple Window 945
PITFALL: Forgetting to Program the Close-Window Button 950
Buttons 951
Action Listeners and Action Events 952
PITFALL: Changing the Heading for actionPerformed 954
TIP: Ending a Swing Program 954
EXAMPLE: A Better Version of Our First Swing GUI 955
Labels 958
Color 959
EXAMPLE: A GUI with a Label and Color 960
17.3
CONTAINERS AND LAYOUT MANAGERS
962
Border Layout Managers 963
Flow Layout Managers 966
Grid Layout Managers 967
Panels 971
EXAMPLE: A Tricolor Built with Panels 972
The Container Class 976
TIP: Code a GUIs Look and Actions Separately 979
The Model-View-Controller Pattern 980Contents
17.4
MENUS AND BUTTONS 981
EXAMPLE: A GUI with a Menu 981
Menu Bars, Menus, and Menu Items 981
Nested Menus 986
The AbstractButton Class 986
The setActionCommand Method 989
Listeners as Inner Classes 990
17.5
TEXT FIELDS AND TEXT AREAS 993
Text Areas and Text Fields 994
TIP: Labeling a Text Field 1000
TIP: Inputting and Outputting Numbers
A Swing Calculator 1001
Chapter Summary 1006
Answers to Self-Test Exercises
Programming Projects 1013
Chapter 18
18.1
Swing II
1000
1007
1017
WINDOW LISTENERS 1018
EXAMPLE: A Window Listener Inner Class 1020
The dispose Method 1023
PITFALL: Forgetting to Invoke setDefaultCloseOperation 1024
The WindowAdapter Class 1024
18.2
ICONS AND SCROLL BARS
1026
Icons 1026
Scroll Bars 1032
EXAMPLE: Components with Changing Visibility
18.3
THE Graphics CLASS
1041
Coordinate System for Graphics Objects 1041
The Method paint and the Class Graphics 1042
Drawing Ovals 1047
Drawing Arcs 1047
Rounded Rectangles 1051
paintComponent for Panels 1052
Action Drawings and repaint 1052
Some More Details on Updating a GUI 1058
1037
xxixxxx
Contents
18.4
COLORS 1058
Specifying a Drawing Color 1059
Defi ning Colors 1060
PITFALL: Using doubles to Defi ne a Color 1061
The JColorChooser Dialog Window 1062
18.5
FONTS AND THE drawString METHOD
The drawString Method
Fonts 1068
Chapter Summary 1071
Answers to Self-Test Exercises
Programming Projects 1075
Chapter 19
19.1
1065
1065
1071
Java Never Ends 1079
MULTITHREADING 1080
EXAMPLE: A Nonresponsive GUI 1081
Thread.sleep 1081
The getGraphics Method 1085
Fixing a Nonresponsive Program Using Threads 1086
EXAMPLE: A Multithreaded Program 1086
The Class Thread 1087
The Runnable Interface 1090
Race Conditions and Thread Synchronization 1093
19.2
NETWORKING WITH STREAM SOCKETS 1098
Sockets 1098
Sockets and Threading
19.3
JAVABEANS
1102
1103
The Component Model 1103
The JavaBeans Model 1104
19.4
JAVA AND DATABASE CONNECTIONS
1105
Relational Databases 1105
Java DB and JDBC 1105
SQL 1107
19.5
WEB PROGRAMMING WITH JAVA SERVER PAGES 1118
Applets, Servlets, and Java Server Pages 1118
Oracle GlassFish Enterprise Server 1120
HTML Formsthe Common Gateway Interface 1121
JSP Declarations, Expressions, Scriptlets, and Directives 1123Contents
Chapter Summary 1132
Answers to Self-Test Exercises
Programming Projects 1134
Chapter 20
Applets and HTML
Appendix 1 Keywords
1133
(online at www.aw.com/savitch)
1139
Appendix 2 Precedence and Associativity Rules
Appendix 3 ASCII Character Set
1141
1143
Appendix 4 Format Specifi cations for printf 1145
Appendix 5 Summary of Classes and Interfaces 1147

You might also like