Tải bản đầy đủ (.pdf) (1,090 trang)

Tài liệu A Programmer’s Guide to Java™ SCJP Certification doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.95 MB, 1,090 trang )

A Programmer’s Guide to
Java

SCJP Certification
Third Edition
This page intentionally left blank
A Programmer’s Guide to
Java™ SCJP Certification
A Comprehensive Primer
Third Edition
Khalid A. Mughal
Rolf W. Rasmussen
Upper Saddle River, New Jersey • Boston • Indianapolis • San Francisco
New York•Toronto•Montreal•London•Munich•Paris•Madrid
Capetown • Sidney • Tokyo • Singapore • Mexico City
Many of the designations used 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 designations have been printed with initial capital let-
ters or in all capitals.
The authors and publisher have taken care in the preparation of this book, but make no
expressed or implied warranty of any kind and assume no responsibility for errors or omis-
sions. No liability is assumed for incidental or consequential damages in connection with or
arising out of the use of the information or programs contained herein.
The publisher offers excellent discounts on this book when ordered in quantity for bulk pur-
chases or special sales, which may include electronic versions and/or custom covers and
content particular to your business, training goals, marketing focus, and branding interests.
For more information, please contact:
U.S. Corporate and Government Sales
(800) 382-3419


For sales outside the United States please contact:
International Sales

Visit us on the Web: informit.com/aw
Library of Congress Cataloging-in-Publication Data
Mughal, Khalid Azim.
A programmer's guide to Java SCJP certification : a comprehensive primer / Khalid A.
Mughal, Rolf W. Rasmussen.—3rd ed.
p. cm.
Previously published under title: A programmer’s guide to Java certification.
Includes bibliographical references and index.
ISBN 0-321-55605-4 (pbk. : alk. paper)
1. Electronic data processing personnel Certification. 2. Operating systems (Comput-
ers)—Examinations Study guides. 3. Java (Computer program language) Examinations
Study guides. I. Rasmussen, Rolf (Rolf W.) II. Mughal, Khalid Azim. Programmer’s guide
to Java certification. III. Title.
QA76.3.M846 2008
005.2'762 dc22 2008048822
Copyright © 2009 Pearson Education, Inc.
All rights reserved. Printed in the United States of America. This publication is protected by
copyright, and permission must 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. For information regarding
permissions, write to:
ISBN-13: 978-0-321-55605-9
ISBN-10: 0-321-55605-4
Text printed in the United States on recycled paper at Courier in Stoughton, Massachusetts.
First printing, December 2008
To the loving memory of my mother, Zubaida Begum,
and my father, Mohammed Azim.

—K.A.M.
For Olivia E. Rasmussen and
Louise J. Dahlmo.
—R.W.R.
This page intentionally left blank
vii
Contents Overview
Foreword xxxv
Preface xxxvii
1 Basics of Java Programming 1
2 Language Fundamentals 19
3 Declarations 39
4 Access Control 103
5 Operators and Expressions 159
6 Control Flow 203
7 Object-Oriented Programming 283
8 Nested Type Declarations 351
9 Object Lifetime 389
10 Fundamental Classes 423
11 Files and Streams 467
12 Localization, Pattern Matching and Formatting 531
13 Threads 613
14 Generics 661
viii CONTENTS
15 Collections and Maps 747
A Taking the SCJP 1.6 Exam 851
B Objectives for the SCJP 1.6 Exam 857
C Objectives for the SCJP 1.6 Upgrade Exam 863
D Annotated Answers to Review Questions 869
E Solutions to Programming Exercises 935

F Mock Exam 959
G Number Systems and Number Representation 1005
Index 1013
ix
Contents
List of Figures xxiii
List of Tables xxvii
List of Examples xxix
Foreword xxxv
Preface xxxvii
1 Basics of Java Programming 1
1.1 Introduction 2
1.2 Classes 2
Declaring Members: Fields and Methods 3
1.3 Objects 4
Class Instantiation, Reference Values, and References 4
Object Aliases 6
1.4 Instance Members 6
Invoking Methods 7
1.5 Static Members 7
1.6 Inheritance 10
1.7 Aggregation 12
1.8 Tenets of Java 13
Review Questions 13
1.9 Java Programs 15
1.10 Sample Java Application 15
Essential Elements of a Java Application 15
Compiling and Running an Application 16
Review Questions 17
Chapter Summary 18

Programming Exercise 18
x CONTENTS
2 Language Fundamentals 19
2.1 Basic Language Elements 20
Lexical Tokens 20
Identifiers 20
Keywords 20
Literals 21
Integer Literals 22
Floating-Point Literals 22
Boolean Literals 23
Character Literals 23
String Literals 25
White Spaces 25
Comments 26
Review Questions 27
2.2 Primitive Data Types 28
Integer Types 28
The
char
Type 29
The Floating-Point Types 29
The
boolean
Type 30
Review Questions 31
2.3 Variable Declarations 31
Declaring and Initializing Variables 31
Reference Variables 32
2.4 Initial Values for Variables 33

Default Values for Fields 33
Initializing Local Variables of Primitive Data Types 34
Initializing Local Reference Variables 35
Lifetime of Variables 35
Review Questions 36
Chapter Summary 37
Programming Exercise 37
3Declarations 39
3.1 Class Declarations 40
3.2 JavaBeans Standard 41
Naming Patterns for Properties 41
Naming Patterns for the Event Model 42
3.3 Method Declarations 44
Statements 45
Instance Methods and the Object Reference
this 45
Method Overloading 47
3.4 Constructors 48
The Default Constructor 49
Overloaded Constructors 51
Review Questions 52
CONTENTS xi
3.5 Enumerated Types 54
Declaring Typesafe Enums 54
Using Typesafe Enums 54
Declaring Enum Constructors and Members 55
Implicit Static Methods for Enum Types 57
Inherited Methods from the
Enum
Class 58

Extending Enum Types: Constant-Specific Class Bodies 59
Declaring Typesafe Enums Revisited 62
Review Questions 63
3.6 Arrays 69
Declaring Array Variables 70
Constructing an Array 70
Initializing an Array 71
Using an Array 72
Anonymous Arrays 74
Multidimensional Arrays 75
Review Questions 79
3.7 Parameter Passing 81
Passing Primitive Data Values 82
Passing Reference Values 84
Passing Arrays 86
Array Elements as Actual Parameters 87
final
Parameters 89
3.8 Variable Arity Methods 90
Calling a Varargs Method 91
Varargs and Non-Varargs Method Calls 93
3.9 The
main()
Method 94
Program Arguments 95
Review Questions 96
Chapter Summary 100
Programming Exercises 101
4 Access Control 103
4.1 Java Source File Structure 104

4.2 Packages 105
Defining Packages 106
Using Packages 107
Compiling Code into Packages 115
Running Code from Packages 117
4.3 Searching for Classes 117
4.4 The JAR Utility 120
4.5 System Properties 122
Review Questions 123
4.6 Scope Rules 129
Class Scope for Members 129
xii CONTENTS
Block Scope for Local Variables 131
4.7 Accessibility Modifiers for Top-Level Type Declarations 132
4.8 Other Modifiers for Classes 135
abstract
Classes 135
final
Classes 136
Review Questions 138
4.9 Member Accessibility Modifiers 138
public
Members 139
protected
Members 141
Default Accessibility for Members 142
private
Members 143
Review Questions 144
4.10 Other Modifiers for Members 146

static
Members 147
final
Members 148
abstract
Methods 150
synchronized
Methods 150
native
Methods 151
transient
Fields 152
volatile
Fields 153
Review Questions 154
Chapter Summary 157
Programming Exercise 157
5 Operators and Expressions 159
5.1 Conversions 160
Widening and Narrowing Primitive Conversions 160
Widening and Narrowing Reference Conversions 161
Boxing and Unboxing Conversions 162
Other Conversions 162
5.2 Type Conversion Contexts 163
Assignment Context 164
Method Invocation Context 164
Casting Context of the Unary Type Cast Operator:
(
type
)

164
Numeric Promotion Context 165
5.3 Precedence and Associativity Rules for Operators 166
5.4 Evaluation Order of Operands 168
Left-Hand Operand Evaluation First 168
Operand Evaluation before Operation Execution 168
Left to Right Evaluation of Argument Lists 169
5.5 The Simple Assignment Operator
=
169
Assigning Primitive Values 169
Assigning References 169
Multiple Assignments 170
Type Conversions in Assignment Context 171
CONTENTS xiii
Review Questions 173
5.6 Arithmetic Operators:
*
,
/
,
%
,
+
,
-
174
Arithmetic Operator Precedence and Associativity 174
Evaluation Order in Arithmetic Expressions 174
Range of Numeric Values 175

Unary Arithmetic Operators:
-
,
+
177
Multiplicative Binary Operators:
*
,
/
,
%
178
Additive Binary Operators:
+
,
-
180
Numeric Promotions in Arithmetic Expressions 180
Arithmetic Compound Assignment Operators:
*=
,
/=
,
%=
,
+=
,
-=
182
Review Questions 184

5.7 The Binary String Concatenation Operator
+
185
5.8 Variable Increment and Decrement Operators:
++
,

186
The Increment Operator
++
187
The Decrement Operator

187
Review Questions 188
5.9 Boolean Expressions 190
5.10 Relational Operators:
<
,
<=
,
>
,
>=
190
5.11 Equality 191
Primitive Data Value Equality:
==
,
!=

191
Object Reference Equality:
==
,
!=
192
Object Value Equality 193
5.12 Boolean Logical Operators:
!
,
^
,
&
,
|
194
Operand Evaluation for Boolean Logical Operators 195
Boolean Logical Compound Assignment Operators:
&=
,
^=
, |
=
195
5.13 Conditional Operators:
&&
,
||
196
Short-Circuit Evaluation 197

Review Questions 199
5.14 The Conditional Operator:
?:
201
5.15 Other Operators:
new
,
[]
,
instanceof
201
Chapter Summary 202
Programming Exercise 202
6 Control Flow 203
6.1 Overview of Control Flow Statements 204
6.2 Selection Statements 204
The Simple
if
Statement 204
The
if-else
Statement 205
The
switch
Statement 207
Review Questions 212
6.3 Iteration Statements 216
The
while
Statement 217

The
do-while
Statement 217
The
for(;;)
Statement 218
The
for(:)
Statement 220
xiv CONTENTS
6.4 Transfer Statements 223
Labeled Statements 223
The
break
Statement 224
The
continue
Statement 226
The
return
Statement 228
Review Questions 229
6.5 Stack-Based Execution and Exception Propagation 235
6.6 Exception Types 239
The
Exception
Class 241
The
RuntimeException
Class 241

The
Error
Class 242
Checked and Unchecked Exceptions 243
Defining New Exceptions 244
6.7 Exception Handling:
try
,
catch
, and
finally
245
The
try
Block 245
The
catch
Block 246
The
finally
Block 251
6.8 The
throw
Statement 255
6.9 The
throws
Clause 257
Review Questions 260
6.10 Assertions 265
The

assert
Statement and the
AssertionError
Class 265
Compiling Assertions 267
Runtime Enabling and Disabling of Assertions 269
Using Assertions 272
Review Questions 276
Chapter Summary 279
Programming Exercises 279
7 Object-Oriented Programming 283
7.1 Single Implementation Inheritance 284
Inheritance Hierarchy 286
Relationships: is-a and has-a 286
The Supertype-Subtype Relationship 287
7.2 Overriding Methods 288
Instance Method Overriding 288
Covariant
return
in Overriding Methods 290
Overriding vs. Overloading 292
7.3 Hiding Members 294
Field Hiding 294
Static Method Hiding 294
7.4 The Object Reference
super
295
Review Questions 297
7.5 Chaining Constructors Using
this()

and
super()
302
The
this()
Constructor Call 302
CONTENTS xv
The
super()
Constructor Call 305
Review Questions 308
7.6 Interfaces 309
Defining Interfaces 310
Abstract Method Declarations 310
Implementing Interfaces 312
Extending Interfaces 313
Interface References 314
Constants in Interfaces 314
Review Questions 315
7.7 Arrays and Subtyping 317
Arrays and Subtype Covariance 317
Array Store Check 319
7.8 Reference Values and Conversions 319
7.9 Reference Value Assignment Conversions 320
7.10 Method Invocation Conversions Involving References 323
Overloaded Method Resolution 324
7.11 Reference Casting and the
instanceof
Operator 327
The Cast Operator 327

The
instanceof
Operator 328
Review Questions 332
7.12 Polymorphism and Dynamic Method Lookup 340
7.13 Inheritance Versus Aggregation 342
7.14 Basic Concepts in Object-Oriented Design 345
Encapsulation 345
Cohesion 346
Coupling 346
Review Questions 347
Chapter Summary 349
Programming Exercises 349
8 Nested Type Declarations 351
8.1 Overview of Nested Type Declarations 352
8.2 Static Member Types 355
Declaring and Using Static Member Types 355
Accessing Members in Enclosing Context 357
8.3 Non-Static Member Classes 359
Instantiating Non-Static Member Classes 360
Accessing Members in Enclosing Context 362
Review Questions 367
8.4 Local Classes 371
Accessing Declarations in Enclosing Context 372
Instantiating Local Classes 374
8.5 Anonymous Classes 377
Extending an Existing Class 377
xvi CONTENTS
Implementing an Interface 379
Instantiating Anonymous Classes 380

Accessing Declarations in Enclosing Context 380
Review Questions 382
Chapter Summary 386
Programming Exercise 386
9 Object Lifetime 389
9.1 Garbage Collection 390
9.2 Reachable Objects 390
9.3 Facilitating Garbage Collection 392
9.4 Object Finalization 396
9.5 Finalizer Chaining 397
9.6 Invoking Garbage Collection Programmatically 398
Review Questions 401
9.7 Initializers 406
9.8 Field Initializer Expressions 406
9.9 Static Initializer Blocks 410
9.10 Instance Initializer Blocks 413
9.11 Constructing Initial Object State 416
Review Questions 420
Chapter Summary 422
10 Fundamental Classes 423
10.1 Overview of the
java.lang
Package 424
10.2 The
Object
Class 424
Review Questions 428
10.3 The Wrapper Classes 428
Common Wrapper Class Constructors 429
Common Wrapper Class Utility Methods 430

Numeric Wrapper Classes 433
The
Character
Class 436
The
Boolean
Class 437
Review Questions 437
10.4 The
String
Class 439
Immutability 439
Creating and Initializing Strings 439
The
CharSequence
Interface 442
Reading Characters from a String 443
Comparing Strings 445
Character Case in a String 446
Concatenation of Strings 446
Searching for Characters and Substrings 448
Extracting Substrings 449
Converting Primitive Values and Objects to Strings 450
CONTENTS xvii
Formatting Values 450
Pattern Matching 452
Review Questions 452
10.5 The
StringBuilder
and the

StringBuffer
Classes 456
Thread-Safety 456
Mutability 456
Constructing String Builders 457
Reading and Changing Characters in String Builders 457
Constructing Strings from String Builders 458
Appending, Inserting, and Deleting Characters in String Builders 458
Controlling String Builder Capacity 460
Review Questions 461
Chapter Summary 464
Programming Exercises 465
11 Files and Streams 467
11.1 Input and Output 468
11.2 The
File
Class 468
Querying the File System 470
File or Directory Existence 472
File and Directory Permissions 472
Listing Directory Entries 473
Creating New Files and Directories 473
Renaming Files and Directories 474
Deleting Files and Directories 474
11.3 Byte Streams: Input Streams and Output Streams 475
File Streams 477
Filter Streams 479
Reading and Writing Binary Values 479
Review Questions 484
11.4 Character Streams: Readers and Writers 488

Print Writers 490
Writing Text Files 492
Reading Text Files 494
Using Buffered Writers 495
Using Buffered Readers 496
The Standard Input, Output, and Error Streams 499
Comparison of Byte Streams and Character Streams 500
11.5 The
Console
class 500
Review Questions 506
11.6 Object Serialization 510
The
ObjectOutputStream
Class 511
The
ObjectInputStream
Class 512
Customizing Object Serialization 517
Serialization and Inheritance 519
xviii CONTENTS
Review Questions 522
Chapter Summary 529
Programming Exercise 530
12 Localization, Pattern Matching, and Formatting 531
12.1 The
java.util.Locale
Class 532
12.2 The
java.util.Date

Class 535
12.3 The
java.util.Calendar
Class 536
Static Factory Methods to Create a Calendar 537
Interoperability with the
Date
Class 537
Selected get and set Methods 537
Manipulating a Calendar 539
Comparing Calendars 540
12.4 The
java.text.DateFormat
Class 541
Static Factory Methods to Create a Date/Time Formatter 541
Formatting Dates 542
Parsing Strings to Date/Time 543
Managing the Calendar and the Number Formatter 545
12.5 The
java.text.NumberFormat
Class 546
Static Factory Methods to Create a Number Formatter 546
Formatting Numbers and Currency 546
Parsing Strings to Numbers 547
Specifying the Number of Digits 547
Review Questions 551
12.6 String Pattern Matching Using Regular Expressions 554
Regular Expression Fundamentals 554
Escaping Metacharacters 561
The

java.util.regex.Pattern
Class 562
The
java.util.regex.Matcher
Class 566
The
java.util.Scanner
Class 571
Review Questions 582
12.7 Formatting Values 593
Overview 593
Defining Format Specifiers 595
Conversion Categories and Formatting Conversions 597
Selected Format Exceptions 601
Using the
format()
Method 602
Review Questions 604
Chapter Summary 610
Programming Exercises 610
13 Threads 613
13.1 Multitasking 614
13.2 Overview of Threads 614
13.3 The Main Thread 615
CONTENTS xix
13.4 Thread Creation 615
Implementing the
Runnable
Interface 616
Extending the

Thread
Class 619
Review Questions 622
13.5 Synchronization 626
Locks 626
Synchronized Methods 627
Synchronized Blocks 629
Review Questions 631
13.6 Thread Transitions 634
Thread States 634
Thread Priorities 638
Thread Scheduler 638
Running and Yielding 639
Sleeping and Waking Up 640
Waiting and Notifying 640
Joining 647
Blocking for I/O 649
Thread Termination 650
Deadlocks 651
Review Questions 653
Chapter Summary 658
Programming Exercises 659
14 Generics 661
14.1 Introducing Generics 662
14.2 Generic Types and Parameterized Types 663
Generic Types 663
Parameterized Types 665
Generic Interfaces 666
Extending Generic Types 668
Raw Types and Unchecked Warnings 670

14.3 Collections and Generics 672
14.4 Wildcards 673
The Subtype Covariance Problem with Parameterized Types 673
Wildcard Types 675
Subtype Covariance:
? extends Type
675
Subtype Contravariance:
? super Type
676
Subtype Bivariance:
?
677
Subtype Invariance:
Type
677
Some Restrictions on Wildcard Types 677
14.5 Using References of Wildcard Parameterized Types 678
Generic Reference Assignment 679
Using Parameterized References to Call Set and Get Methods 680
14.6 Bounded Type Parameters 684
Multiple Bounds 686
xx CONTENTS
Review Questions 686
14.7 Implementing a Simplified Generic Stack 695
14.8 Generic Methods and Constructors 697
Generic Method Declaration 699
Calling Generic Methods 700
14.9 Wildcard Capture 703
Capture Conversion 705

14.10 Flexibility with Wildcard Parameterized Types 705
Nested Wildcards 705
Wildcard Parameterized Types as Formal Parameters 707
Flexible Comparisons with Wildcards 709
Recursive Bounds 712
14.11 Type Erasure 714
Bridge Methods 716
14.12 Implications for Overloading and Overriding 716
Method Signature 716
Implications for Overloading 717
Implications for Overriding 718
14.13 Limitations and Restrictions on Generic Types 722
Reifiable Types 722
Implications for instanceof operator 723
Implications for Casting 724
Implications for Arrays 726
Implications for Varargs 729
Implications for Exception Handling 730
Implications for Nested Classes 731
Other Implications 733
Review Questions 734
Chapter Summary 744
Programming Exercises 745
15 Collections and Maps 747
15.1 Comparing Objects 748
The
equals()
Method 751
The
hashCode()

Method 760
The
Comparable<E>
Interface 765
The
Comparator<E>
Interface 771
Review Questions 775
15.2 The Java Collections Framework 777
Core Interfaces 778
Implementations 780
15.3 Collections 784
Basic Operations 784
Bulk Operations 785
Iterators 785
CONTENTS xxi
Array Operations 790
Review Questions 791
15.4 Sets 796
The
HashSet<E>
and
LinkedHashSet<E>
Classes 796
15.5 The
SortedSet<E>
and
NavigableSet<E>
Interfaces 800
The

SortedSet<E>
Interface 800
The
NavigableSet<E>
Interface 801
The
TreeSet<E>
Class 802
15.6 Lists 804
The
ArrayList<E>
,
LinkedList<E>
, and
Vector<E>
Classes 806
15.7 Queues 809
The
Queue<E>
Interface 809
The
PriorityQueue<E>
and
LinkedList<E>
Classes 810
The
Deque<E>
Interface 813
The
ArrayDeque<E>

and
LinkedList<E>
Class 815
Review Questions 816
15.8 Maps 821
Basic Operations 821
Bulk Operations 822
Collection Views 822
15.9 Map Implementations 823
The
HashMap<K,V>
,
LinkedHashMap<K,V>
, and
Hashtable<K,V>
Classes 823
15.10 The
SortedMap<K,V>
and
NavigableMap<K,V>
Interfaces 826
The
SortedMap<K,V>
Interface 826
The
NavigableMap<K,V>
Interface 827
The
TreeMap<K,V>
Class 828

Review Questions 833
15.11 Working with Collections 838
Ordering Elements in Lists 838
Searching in Collections 840
Changing Elements in Collections 841
Sorting Arrays 842
Searching in Arrays 843
Creating List Views of Arrays 845
Miscellaneous Utility Methods in the
Arrays
Class 846
Review Questions 846
Chapter Summary 849
Programming Exercises 850
A Taking the SCJP 1.6 Exam 851
A.1 Preparing for the Programmer Exam 851
A.2 Registering for the Exam 852
Obtaining an Exam Voucher 852
Signing Up for the Test 852
Contact Information 852
xxii CONTENTS
After Taking the Exam 853
A.3 How the Examination Is Conducted 853
The Testing Locations 853
Utilizing the Allotted Time 853
The Exam Program 854
A.4 The Questions 854
Types of Questions Asked 854
Types of Answers Expected 855
Topics Covered by the Questions 855

A.5 Moving on to Other Java Technology Exams 856
B Objectives for the SCJP 1.6 Exam 857
C Objectives for the SCJP 1.6 Upgrade Exam 863
D Annotated Answers to Review Questions 869
E Solutions to Programming Exercises 935
F Mock Exam 959
G Number Systems and Number Representation 1005
G.1 Number Systems 1005
Binary, Octal, and Hexadecimal Number System 1005
Converting Binary Numbers to Decimals 1006
Converting Octal and Hexadecimal Numbers to Decimals 1007
G.2 Relationship between Binary, Octal, and Hexadecimal Numbers 1007
G.3 Converting Decimals 1008
Converting Decimals to Binary Numbers 1008
Converting Decimals to Octal and Hexadecimal Numbers 1009
G.4 Representing Integers 1010
Calculating 2’s Complement 1011
Index 1013
xxiii
List of Figures
Chapter 1 1
1.1 UML Notation for Classes 3
1.2 UML Notation for Objects 5
1.3 Aliases 6
1.4 Class Diagram Showing Static Members of a Class 8
1.5 Members of a Class 9
1.6 Class Diagram Depicting Inheritance Relationship 10
1.7 Class Diagram Depicting Aggregation 12
Chapter 2 19
2.1 Primitive Data Types in Java 28

Chapter 3 39
3.1 The Event Model 43
3.2 Array of Arrays 78
3.3 Parameter Passing: Primitive Data Values 84
3.4 Parameter Passing: Reference Values 85
3.5 Parameter Passing: Arrays 87
Chapter 4 103
4.1 Java Source File Structure 104
4.2 Package Hierarchy 105
4.3 File Hierarchy 116
4.4 Searching for Classes 118
4.5 Searching in JAR files 121
4.6 Block Scope 132
4.7 Public Accessibility 141
4.8 Protected Accessibility 142
4.9 Default Accessibility 143
4.10 Private Accessibility 144
Chapter 5 159
5.1 Widening Primitive Conversions 160
5.2 Overflow and Underflow in Floating-point Arithmetic 176
5.3 Numeric Promotion in Arithmetic Expressions 181
Chapter 6 203
6.1 Activity Diagram for
if
Statements 205
6.2 Activity Diagram for a
switch
Statement 208
6.3 Activity Diagram for the
while

Statement 217
6.4 Activity Diagram for the
do-while
Statement 218
6.5 Activity Diagram for the
for
Statement 219
6.6 Enhanced
for
Statement 221
6.7 Method Execution 237
xxiv LIST OF FIGURES
6.8 Exception Propagation 238
6.9 Partial Exception Inheritance Hierarchy 240
6.10 The
try-catch-finally
Construct 246
6.11 Exception Handling (Scenario 1) 248
6.12 Exception Handling (Scenario 2) 249
6.13 Exception Handling (Scenario 3) 250
6.14 Execution of the Simple
assert
Statement (with Assertions Enabled) 266
6.15 Package Hierarchy 271
Chapter 7 283
7.1 Inheritance Hierarchy 287
7.2 Inheritance Relations 314
7.3 Reference Type Hierarchy: Arrays and Subtype Covariance 318
7.4 Type Hierarchy to Illustrate Polymorphism 340
7.5 Implementing Data Structures by Inheritance and Aggregation 342

Chapter 8 351
8.1 Static Member Classes and Interfaces 358
8.2 Outer Object with Associated Inner Objects 362
8.3 Nested Classes and Inheritance 366
8.4 Local Classes and Inheritance Hierarchy 374
Chapter 9 389
9.1 Memory Organization at Runtime 392
Chapter 10 423
10.1 Partial Inheritance Hierarchy in the
java.lang
Package 424
10.2 Converting Values Between Primitive, Wrapper, and
String
Types 429
Chapter 11 467
11.1 Partial Byte Stream Inheritance Hierarchies 476
11.2 Stream Chaining for Reading and Writing Binary Values to a File 481
11.3 Partial Character Stream Inheritance Hierarchies 489
11.4 Setting up a
PrintWriter
to Write to a File 493
11.5 Setting up Readers to read Characters 494
11.6 Buffered Writers 496
11.7 Buffered Readers 497
11.8 Keyboard and Display as Console 501
11.9 Object Stream Chaining 511
Chapter 12 531Chapter 13 613
13.1 Spawning Threads Using a
Runnable
Object 616

13.2 Spawning Threads—Extending the
Thread
Class 620
13.3 Thread States 635
13.4 Running and Yielding 639
13.5 Sleeping and Waking up 640
13.6 Waiting and Notifying 641
13.7 Thread Communication 642
13.8 Stack Users 643
13.9 Joining of Threads 648
13.10 Deadlock 652
Chapter 14 661
14.1 Extending Generic Types 668
14.2 No Subtype Covariance for Parameterized Types 674
14.4 Partial Type Hierarchy for
Node<? super Integer>
676
14.3 Partial Type Hierarchy for
Node<? extends Number>
676
14.5 Partial Type Hierarchy for Selected Parameterized Types of
Node<E>
678
14.6 Flexible Comparisons with Wildcards 709
Chapter 15 747
15.1 The Core Interfaces 778

×