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
[email protected] 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
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
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
Thechar Type 29
The Floating-Point Types 29
Theboolean 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
3 Declarations 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
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
Theif-else Statement 205
Theswitch Statement 207
Review Questions 212
6.3 Iteration Statements 216
Thewhile Statement 217
Thedo-while Statement 217
Thefor(;;) Statement 218
Thefor(:) Statement 220
6.4 Transfer Statements 223
Labeled Statements 223
Thebreak Statement 224
Thecontinue Statement 226
Thereturn Statement 228
Review Questions 229
6.5 Stack-Based Execution and Exception Propagation 235
6.6 Exception Types 239
TheException Class 241
TheRuntimeException Class 241
TheError Class 242
Checked and Unchecked Exceptions 243
Defining New Exceptions 244
6.7 Exception Handling: try,catch, and finally 245
Thetry Block 245
Thecatch Block 246
Thefinally Block 251
6.8 The throw Statement 255
6.9 The throws Clause 257
Review Questions 260
6.10 Assertions 265
Theassert 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
Covariantreturn 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
Thethis() Constructor Call 302
CONTENTS xv
Thesuper() 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
Theinstanceof 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
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
TheCharacter Class 436
TheBoolean Class 437
Review Questions 437
10.4 The String Class 439
Immutability 439
Creating and Initializing Strings 439
TheCharSequence 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
TheObjectOutputStream Class 511
TheObjectInputStream Class 512
Customizing Object Serialization 517
Serialization and Inheritance 519
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
Thejava.util.regex.Pattern Class 562
Thejava.util.regex.Matcher Class 566
Thejava.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
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
Theequals() Method 751
ThehashCode() Method 760
TheComparable<E> Interface 765
TheComparator<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
TheHashSet<E> and LinkedHashSet<E> Classes 796 15.5 The SortedSet<E> and NavigableSet<E> Interfaces 800
TheSortedSet<E> Interface 800
TheNavigableSet<E> Interface 801
TheTreeSet<E> Class 802
15.6 Lists 804
TheArrayList<E>,LinkedList<E>, and Vector<E> Classes 806
15.7 Queues 809
TheQueue<E> Interface 809
ThePriorityQueue<E> and LinkedList<E> Classes 810
TheDeque<E> Interface 813
TheArrayDeque<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
TheHashMap<K,V>,LinkedHashMap<K,V>, and Hashtable<K,V> Classes 823 15.10 The SortedMap<K,V> and NavigableMap<K,V> Interfaces 826
TheSortedMap<K,V> Interface 826
TheNavigableMap<K,V> Interface 827
TheTreeMap<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
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
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 531 Chapter 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
LIST OF FIGURES XXV
15.2 The Core Collection Interfaces and Their Implementations 781 15.3 The Core Map Interfaces and Their Implementations 782
15.4 Bulk Operations on Collections 785
G.1 Converting between Binary, Octal, and Hexadecimal 1008
This page intentionally left blank
xxvii
List of Tables
Chapter 1 11.1 Terminology for Class Members 10
Chapter 2 192.1 Keywords in Java 21
2.2 Reserved Literals in Java 21
2.3 Reserved Keywords not Currently in Use 21
2.4 Examples of Literals 21
2.5 Examples of Decimal, Octal, and Hexadecimal Literals 22
2.6 Examples of Character Literals 23
2.7 Escape Sequences 24
2.8 Examples of Escape Sequence \ddd 25
2.9 Range of Integer Values 28
2.10 Range of Character Values 29
2.11 Range of Floating-Point Values 29
2.12 Boolean Values 30
2.13 Summary of Primitive Data Types 30
2.14 Default Values 33
Chapter 3 393.1 Parameter Passing By Value 82
Chapter 4 1034.1 Accessing Members within a Class 130 4.2 Summary of Accessibility Modifiers for Top-Level Types 135
4.3 Summary of Other Modifiers for Types 137
4.4 Summary of Accessibility Modifiers for Members 144
4.5 Summary of Other Modifiers for Members 153
Chapter 5 1595.1 Selected Conversion Contexts and Conversion Categories 163
5.2 Operator Summary 167
5.3 Examples of Truncated Values 172
5.4 Arithmetic Operators 174
5.5 Examples of Arithmetic Expression Evaluation 180
5.6 Arithmetic Compound Assignment Operators 183
5.7 Relational Operators 191
5.9 Reference Equality Operators 192
5.8 Primitive Data Value Equality Operators 192
5.10 Truth-Values for Boolean Logical Operators 195
5.11 Boolean Logical Compound Assignment Operators 196
5.12 Conditional Operators 196
5.13 Truth-values for Conditional Operators 197
Chapter 6 2036.1 The return Statement 228
6.2 Granularities for Enabling and Disabling Assertions at Runtime 269 6.3 Enabling and Disabling Assertions in All System Classes at Runtime 272
Chapter 7 2837.1 Overriding vs. Overloading 293
7.2 Types and Values 317
Chapter 8 3518.1 Overview of Type Declarations 354 Chapter 9 389
Chapter 10 423
Chapter 11 46711.1 Selected Input Streams 477
11.2 Selected Output Streams 477
11.3 The DataInput and DataOutput Interfaces 480
11.4 Selected Readers 488
11.5 Selected Writers 490
11.6 Print Methods of the PrintWriter Class 491
11.7 Correspondence Between Selected Byte and Character Streams 500
Chapter 12 53112.1 Selected Language Codes 532
12.2 Selected Country Codes 532
12.3 Selected Predefined Locales for Languages 533
12.4 Selected Predefined Locales for Countries 533
12.5 Selected Field Numbers to Indicate Information in a Calendar 537 12.6 Selected Constants that Represent Values in a Calendar 538
12.7 Formatting Styles for Date and Time 542
12.8 Selected Characters 555
12.9 Selected Character Classes 556
12.10 Selected Predefined Character Classes 557
12.11 Boundary Matchers 557
12.12 Selected Logical Operators 558
12.13 Quantifier Classification 561
12.14 Implications of the Limit Value in the split() Method 564
12.15 Formatting Conversions 596
12.16 Flags 597
12.18 Selected Format Exceptions 601
12.17 Selected Time/Date Composition Conversions 601
Chapter 13 61313.1 Thread States 636
Chapter 14 66114.1 Summary of Subtyping Relationships for Generic Types 675 14.2 Get and Set Operations Using Parameterized References 682 14.3 Summary of Get and Set Operations using Parameterized References 684
14.4 Examples of Type Erasure 714
14.5 Examples of Reifiable Types 723
14.6 Examples of Non-Reifiable Types 723
Chapter 15 74715.1 Core Interfaces in the Collections Framework 779 15.2 Summary of Collection and Map Implementations 782
15.3 Bulk Operations and Set Logic 796
G.1 Number Systems 1005
G.2 Representing Signed byte Values Using 2’s Complement 1010
xxix
List of Examples
Chapter 1 1
1.1 Basic Elements of a Class Declaration 3
1.2 Static Members in Class Declaration 8
1.3 Defining a Subclass 11
1.4 An Application 15
Chapter 2 19
2.1 Default Values for Fields 33
2.2 Flagging Uninitialized Local Variables of Primitive Data Types 34 2.3 Flagging Uninitialized Local Reference Variables 35
Chapter 3 39
3.1 A JavaBean 42
3.2 Using the this Reference 46
3.3 Namespaces 49
3.4 Using Enums 55
3.5 Declaring Enum Constructors and Members 56
3.6 Declaring Constant-Specific Class Bodies 60
3.7 Using Arrays 73
3.8 Using Anonymous Arrays 75
3.9 Using Multidimensional Arrays 78
3.10 Passing Primitive Values 83
3.11 Passing Reference Values 84
3.12 Passing Arrays 86
3.13 Array Elements as Primitive Data Values 88
3.14 Array Elements as Reference Values 88
3.15 Calling a Varargs Method 91
3.16 Passing Program Arguments 95
Chapter 4 103
4.1 Defining Packages and Using Type Import 107
4.2 Single Static Import 110
4.3 Avoiding the Interface Constant Antipattern 110
4.4 Importing Enum Constants 111
4.5 Shadowing by Importing 112
4.6 Conflict in Importing Static Method with the Same Signature 113
4.7 Importing Nested Static Types 114
4.8 Using Properties 123
4.9 Class Scope 131
4.10 Accessibility Modifiers for Classes and Interfaces 133