Programmer's Guide to Java SCJP Certification, 3rd Edition
A Programmer’s Guide to
™ Java SCJP Certification Third EditionThis page intentionally left blank
A Programmer’s Guide to
™
Java SCJP Certification
A Comprehensive Primer Third Edition Khalid A. Mughal Rolf W. RasmussenUpper 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 [email protected]
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
6 Control Flow 203
13 Threads 613
12 Localization, Pattern Matching and Formatting 531
11 Files and Streams 467
10 Fundamental Classes 423
9 Object Lifetime 389
8 Nested Type Declarations 351
7 Object-Oriented Programming 283
5 Operators and Expressions 159
Foreword xxxv Preface xxxvii
4 Access Control 103
39
3 Declarations
19
2 Language Fundamentals
1
1 Basics of Java Programming
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
x CONTENTS
CONTENTS xi
xii CONTENTS
5 Operators and Expressions 159
CONTENTS xiii
xiv CONTENTS
7 Object-Oriented Programming 283
CONTENTS xv
8 Nested Type Declarations 351
xvi CONTENTS
CONTENTS xvii
xviii CONTENTS
12 Localization, Pattern Matching, and Formatting 531
CONTENTS xix
xx CONTENTS
CONTENTS xxi
xxii CONTENTS
Chapter 1 1
xxiii
4.10 Private Accessibility 144
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
5.1 Widening Primitive Conversions 160
1.1 UML Notation for Classes
5.2 Overflow and Underflow in Floating-point Arithmetic 176
5.3 Numeric Promotion in Arithmetic Expressions 181
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
87 Chapter 4 103
3.5 Parameter Passing: Arrays
85
1.6 Class Diagram Depicting Inheritance Relationship
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
10
3.4 Parameter Passing: Reference Values
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
Chapter 5 159
Chapter 6 203
xxiv LIST OF FIGURES
13.7 Thread Communication 642
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.8 Stack Users 643
11.4 Setting up a PrintWriter to Write to a File 493
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
11.5 Setting up Readers to read Characters 494
11.3 Partial Character Stream Inheritance Hierarchies 489
6.8 Exception Propagation 238
7.4 Type Hierarchy to Illustrate Polymorphism 340
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.5 Implementing Data Structures by Inheritance and Aggregation 342
11.2 Stream Chaining for Reading and Writing Binary Values to a File 481
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
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
Chapter 1 1
xxvii
5.1 Selected Conversion Contexts and Conversion Categories 163
2.14 Default Values
33 Chapter 3 39
3.1 Parameter Passing By Value
82 Chapter 4 103
4.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
5.3 Examples of Truncated Values 172
5.2 Operator Summary 167
2.13 Summary of Primitive Data Types
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
30
30
1.1 Terminology for Class Members
22
10 Chapter 2 19
2.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
2.6 Examples of Character Literals
2.12 Boolean Values
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
Chapter 5 159
xxviii LIST OF TABLES
13.1 Thread States 636
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 613
Chapter 14 661
12.7 Formatting Styles for Date and Time 542
14.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 747
15.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
12.8 Selected Characters 555
12.6 Selected Constants that Represent Values in a Calendar 538
5.13 Truth-values for Conditional Operators 197
11.2 Selected Output Streams 477
Chapter 6 203
6.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 283
7.1 Overriding vs. Overloading 293
7.2 Types and Values 317
Chapter 8 351
8.1 Overview of Type Declarations 354
Chapter 9 389 Chapter 10 423 Chapter 11 467
11.1 Selected Input Streams 477
11.3 The DataInput and DataOutput Interfaces 480
12.5 Selected Field Numbers to Indicate Information in a Calendar 537
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 531
12.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
Chapter 1 1
3.15 Calling a Varargs Method
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
91
75
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
3.9 Using Multidimensional Arrays
xxix
1.1 Basic Elements of a Class Declaration
35 Chapter 3 39
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
3.1 A JavaBean
73
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
3.8 Using Anonymous Arrays
xxx
LIST OF EXAMPLES
4.12 Public Accessibility of Members 139
7.11 Overloaded Method Resolution 326
7.2 Overriding, Overloading, and Hiding 290
7.3 Using the super Keyword 296
7.4 Constructor Overloading 302
7.5 The this() Constructor Call 304
7.6 The super() Constructor Call 305
7.7 Interfaces 311
7.8 Variables in Interfaces 315
7.9 Assigning and Passing Reference Values 320
7.10 Choosing the Most Specific Method (Simple Case) 325
7.12 The instanceof and Cast Operators 329
6.18 Using Assertions 267
7.13 Using the instanceof Operator 330
7.14 Polymorphism and Dynamic Method Lookup 341
7.15 Implementing Data Structures by Inheritance and Aggregation 342
8.1 Overview of Type Declarations 353
8.2 Static Member Types 355
8.3 Importing Static Member Types 357
8.4 Accessing Members in Enclosing Context (Static Member Classes) 358
8.5 Defining and Instantiating Non-static Member Classes 360
7.1 Extending Classes: Inheritance and Accessibility 285
6.17 The throws Clause 258
4.13 Accessing Static Members 147
6.5 The break Statement 224
4.14 Accessing Final Members 149
4.15 Synchronized Methods 151
5.1 Operand Evaluation Order 175
5.2 Numeric Promotion in Arithmetic Expressions 181
5.3 Short-Circuit Evaluation Involving Conditional Operators 198
6.1 Fall Through in a switch Statement 208
6.2 Using break in a switch Statement 210
6.3 Nested switch Statement 211
6.4 Enums in switch Statement 212
6.6 Labeled break Statement 225
4.11 Abstract Classes 136
6.7 The continue Statement 226
6.8 Labeled continue Statement 227
6.9 The return Statement 228
6.10 Method Execution 236
6.11 The try-catch Construct 247
6.12 Exception Propagation 250
6.13 The try-catch-finally Construct 253
6.14 The try-finally Construct 254
6.15 The finally Block and the return Statement 255
6.16 Throwing Exceptions 256
LIST OF EXAMPLES
12.2 Using the Date class 536
11.2 Copy a File 478
11.3 Reading and Writing Binary Values 482
11.4 Demonstrating Readers and Writers, and Character Encoding 498
11.5 Changing Passwords 503
11.6 Object Serialization 513
11.7 Non-Serializable Objects 515
11.8 Customized Serialization 518
11.9 Serialization and Inheritance 520
12.1 Understanding Locales 534
12.3 Using the Calendar Class 540
10.4 Reading Characters from a String 444
12.4 Formatting Date/Time 543
12.5 Using the DateFormat class 544
12.6 Using the NumberFormat class 548
12.7 Splitting 565
12.8 String Pattern Matching 568
12.9 Match and Replace 570
12.10 Tokenizing Mode 573
12.11 Parsing Primitive Values and Strings 576
12.12 Using Delimiters and Patterns with a Scanner 580
11.1 Listing Files Under a Directory 474
xxxi
8.6 Special Form of this and new Constructs in Non-static Member Classes
9.2 Using Finalizers 397
363
8.7 Inheritance Hierarchy and Enclosing Context 365
8.8 Extending Inner Classes 367
8.9 Access in Enclosing Context (Local Classes) 371
8.10 Instantiating Local Classes 374
8.11 Objects of Local Classes as Caches 376
8.12 Defining Anonymous Classes 378
8.13 Accessing Declarations in Enclosing Context (Anonymous Classes) 381
9.1 Garbage Collection Eligibility 394
9.3 Invoking Garbage Collection 400
10.2 String Representation of Integers 435
9.4 Initializer Expression Order and Method Calls 408
9.5 Exceptions in Initializer Expressions 409
9.6 Static Initializers and Forward References 411
9.7 Static Initializer Blocks and Exceptions 412
9.8 Instance Initializers and Forward References 414
9.9 Instance Initializer Block in Anonymous Class 414
9.10 Exception Handling in Instance Initializer Blocks 415
9.11 Object State Construction 417
9.12 Initialization under Object State Construction 419
10.1 Methods in the Object class 426
10.3 String Construction and Equality 441
xxxii
LIST OF EXAMPLES
12.14 Using the format() Method 603
15.10 Natural Ordering and Total Ordering 773
15.1 A Test Case for Version Numbers 749
15.2 Not Overriding the equals() and the hashCode() Methods 752
15.3 Testing the equals() and the hashCode() Methods 752
15.4 Implementing the equals() Method 756
15.5 Implications of Overriding the equals() Method 759
15.6 Implementing the hashCode() Method 762
15.7 Implications of Overriding the hashCode() Method 765
15.8 Implementing the compareTo() Method of the Comparable Interface 767
15.9 Implications of Implementing the compareTo() Method 769
15.11 Using a Comparator for Version Numbers 774
14.16 Type Parameter in throws Clause 731
15.12 Using an Iterator 786
15.13 Using a for(:) Loop to Iterate Over a Collection 789
15.14 Converting Collections to Arrays 790
15.15 Traversing Over Sets 797
15.16 Using Sets 799
15.17 Using Navigable Sets 803
15.18 Using Lists 808
15.19 Using Priority Queues 811
14.17 Generic Nested Classes 732
14.15 Genericity Cannot Be Added to Inherited Methods 722
13.1 Implementing the Runnable Interface 618
14.3 A Generic Interface and its Implementation 667
13.2 Extending the Thread Class 621
13.3 Mutual Exclusion 628
13.4 Thread States 637
13.5 Waiting and Notifying 644
13.6 Joining of Threads 648
13.7 Thread Termination 651
13.8 Deadlock 652
14.1 A Legacy Class 662
14.2 A Generic Class for Nodes 664
14.4 Extending Generic Types 669
12.13 Multi-Line Mode 582
14.5 Unchecked Warnings 671
14.6 Illustrating Get and Set Operations Using Parameterized References 681
14.7 Implementing a Simplified Generic Stack 695
14.8 Declaring and Calling Generic Methods 697
14.9 Flexible Comparisons 710
14.10 Using Recursive Bounds 712
14.11 Using the @Override Annotation 719
14.12 Subsignatures 720
14.13 Overriding from Generic Supertype 720
14.14 Missing Supertype Parameterization 721
LIST OF EXAMPLES
xxxiii
15.20 Using Deques as a Stack and as a FIFO Queue 815
15.21 Using Maps 825
15.22 Using Navigable Maps 831
This page intentionally left blank
Consider the following observations:
- Software continues to become ever more pervasive, ever more ubiquitous in our lives.
- Incompetence seems to be the only thing we can count on in today’s world and, especially, in the domain of software.
- The Java programming language has become a lingua franca for programmers all over the world.
One can draw varied conclusions from these comments. One of them is that it is of great importance that programmers working with the Java programming lan- guage should be as competent as possible. The Java certification program is an important effort aimed at precisely this goal. Practitioners looking to obtain such certification need good quality training mate- rials, which brings us to this book.
Programming is still more of an art than a science, and will continue to be so for the foreseeable future. Mastering the intricacies of a large and complex program- ming language is a challenging task that requires time and effort, and above all experience.
Real programming requires more than just mastery of a programming language. It requires mastery of a computing platform, with a rich set of libraries. These librar- ies are designed to simplify the task of building realistic applications, and they do. Again, the practitioner is faced with a daunting task. To address the clear need for professional training material, a plethora of books have been written purporting to tutor programmers in the programming language and platform skills they require. The choice is as mind boggling as the material within the books themselves. Should one try Java for Frontally Lobotomized Simians or Postmodern Java Dialectics? The readership for these books is largely self selecting. I trust that if you, the reader,
xxxv
xxxvi FOREWORD
have gotten this far, you are looking for something that is intelligent, yet practical. This book is one of the finest efforts in this crowded arena. It brings a necessary level of academic rigor to an area much in need of it, while retaining an essentially pragmatic flavor.
The material in this book is probably all you need to pass the Java certification exam. It certainly isn’t all you need to be a good software engineer. You must con- tinue learning about new technologies. The hardest part of this is dealing with things that are completely different from what you are familiar with. Yet this is what distinguishes the top flight engineer from the mediocre one. Keep an open mind; it pays.
Gilad Bracha
Computational Theologist Sun Java Software
Writing the Third Edition
The exam for the Sun Certified Programmer for Java Platform, Standard Edition 6, has changed considerably since the second edition of this book was published. The most noticeable change in the current version of the Sun Certified Java Program- mer (SCJP) 1.6 exam is the inclusion of the features of Java 5, and the shifting of emphasis towards analyzing code scenarios, rather than individual language con- structs. In our opinion, the new exam demands an even greater understanding and actual experience of the language, rather than mere recitation of facts. Proficiency in the language is the key to success.
Since the emphasis of the SCJP 1.6 exam is on the core features of Java, the third edition provides even greater in-depth coverage of the relevant topics. The book covers not just the exam objectives, but also supplementary topics that aid in mas- tering the exam topics.
The third edition is still a one-source guide for the SCJP 1.6 exam: it provides a mix- ture of theory and practice for the exam. Use the book to learn Java, pass the SCJP 1.6 exam, and afterwards, use it as a handy language guide. The book also has an appendix devoted to the SCJP 1.6 Upgrade exam.
We have taken into consideration the feedback we have received from readers. The many hours spent in handling the deluge of e-mail have not been in vain. Every single e-mail is appreciated and is hereby acknowledged. Preparing the third edition dispelled our illusions about newer editions being, to put it colloquially, a piece of cake. Every sentence from the second edition has been weighed carefully, and not many paragraphs have escaped rewriting. UML (Uni- fied Modeling Language) is also extensively employed in this edition. Numerous new review questions have been added. In covering the new topics and expanding the existing ones, new examples, figures, and tables were also specifically created for the third edition.
xxxvii
xxxviii PREFACE
About This Book
This book provides extensive coverage of the Java programming language and its core Application Programming Interfaces (APIs), with particular emphasis on its syntax and usage. The book is primarily intended for professionals who want to prepare for the SCJP 1.6 exam, but it is readily accessible to any programmer who wants to master the language. For both purposes, it provides in-depth coverage of essential features of the language and its core APIs.
There is a great and increasing demand for certified Java programmers. Sun Microsystems has defined the SCJP 1.6 exam as one that professionals can take to validate their skills. The certification provides the IT industry with a standard to use for hiring such professionals, and allows the professionals to turn their Java skills into credentials that are important for career advancement.
The book provides extensive coverage of all the objectives defined for the exam by Sun. But the exam objectives are selective and do not include many of the essential features of Java. This book covers many additional topics that every Java program- mer should master in order to be proficient. In this regard, the book is a compre- hensive primer for learning the Java programming language. After mastering the language by working through this book, the reader can confidently sit for the exam.
This book is not a complete reference for Java, as it does not attempt to list every member of every class from the Java Development Kit (JDK) API documentation. The purpose is not to document the JDK APIs. This book does not teach programming techniques. The emphasis is on the Java programming language features, their syntax and correct usage through code examples. The book assumes little background in programming. We believe the exam is accessible to any programmer who works through the book. A Java programmer can easily skip over material that is well understood and concentrate on parts that need reinforcing, whereas a programmer new to Java will find the concepts explained from basic principles. Each topic is explained and discussed thoroughly with examples, and backed by review questions and exercises to reinforce the concepts. The book is not biased toward any particular platform, but provides platform-specific details where necessary.
Using the Book
The reader can choose a linear or a non-linear route through the book, depending on her programming background. Non-Java programmers wishing to migrate to Java can read Chapter 1, which provides a short introduction to object-oriented programming concepts, and the procedure for compiling and running Java appli-
PREFACE xxxix
cations. For those preparing for the SCJP 1.6 exam, the book has a separate appen- dix providing all the pertinent information on taking the exam. The table of contents; listings of tables, examples, and figures; and a comprehen- sive index facilitate locating topics discussed in the book. In particular, we draw attention to the following features:
Exam Objectives 0.1 Exam objectives are stated clearly at the start of every chapter.
0.2 The number in front of the objective identfies the objective as defined by Sun.
0.3 The objectives are organized into major sections, detailing the curriculum for the exam.
0.4 The exam objectives are reproduced in Appendix B where, for each section of the syllabus, references are included to point the reader to relevant topics for the exam.
Supplementary Objectives
- Supplementary objectives cover topics that are not on the exam, but which we believe are important for mastering the topics that are on the exam.
- Any supplementary objectives are listed as bullets at the beginning of a chapter.
Review Questions
Review questions are provided after every major topic, in order to test and rein- force the material. These review questions reflect the kinds of questions that can be asked on the actual exam. Annotated answers to the review questions are provided in a separate appendix.
Example 0.1 Example Source Code
We encourage experimenting with the code examples in order to reinforce the material from the book. These can be downloaded from the book Web site (see p. xli).
a mono-spaced font
Java code is written in . Lines of code in the examples or in code snippets are referenced in the text by a number, which is specified by using a single-line comment in the code. For example, in the following code snippet, the
doSomethingInteresting()
call to the method hopefully does something interesting at (1).
xl PREFACE
// ... doSomethingInteresting(); // (1) // ...
Names of classes and interfaces start with an uppercase letter. Names of packages, variables, and methods start with a lowercase letter. Constants are all in uppercase
'I'
letters. Interface names begin with the prefix . Coding conventions are fol- lowed, except when we have had to deviate in the interest of space or clarity.
Chapter Summary
Each chapter concludes with a summary of the topics, pointing out the major con- cepts discussed in the chapter.
Programming Exercises
Programming exercises at the end of each chapter provide the opportunity to put concepts into practice. Solutions to the programming exercises are provided in a separate appendix.
Mock Exam
A complete mock exam is provided in a separate appendix, which the reader can try when she is ready.
Java SE API Documentation