Direct from the creators of the Java programming language, the completely revised fourth edition of The Java Programming Language is an indispensable resource for novice and advanced programmers alike. Developers around the world have used previous editions to quickly gain a deep understanding of the Java programming language, its design goals, and how to use it most effectively in real-world development. Now, Ken Arnold, James Gosling, and David Holmes have updated this classic to reflect the major enhancements in Java 2 Standard Edition 5.0 (J2SE 5.0).
The authors systematically cover most classes in Java's main packages, java.lang.*, java.util, and java.io, presenting in-depth explanations of why these classes work as they do, with informative examples. Several new chapters and major sections have been added, and every chapter has been updated to reflect today's best practices for building robust, efficient, and maintainable Java software.
Key changes in this edition include
New chapters on generics, enums, and annotations, the most powerful new language features introduced in J2SE 5.0
Changes to classes and methods throughout to reflect the addition of generics
Major new sections on assertions and regular expressions
Coverage of all the new language features, from autoboxing and variable argument methods to the enhanced for-loop and covariant return types
Coverage of key new classes, such as Formatter and Scanner
The Java Programming Language, Fourth Edition, is the definitive tutorial introduction to the Java language and essential libraries and an indispensable reference for all programmers, including those with extensive experience. It brings together insights you can only get from the creators of Java: insights that will help you write software of exceptional quality.
Table of Contents
Preface
xxi
Chapter 1: A Quick Tour
1
1.1
Getting Started
1
1.2
Variables
3
1.3
Comments in Code
6
1.4
Named Constants
7
1.5
Unicode Characters
8
1.6
Flow of Control
9
1.7
Classes and Objects
12
1.8
Methods and Parameters
15
1.9
Arrays
18
1.10
String Objects
21
1.11
Extending a Class
24
1.12
Interfaces
27
1.13
Generic Types
29
1.14
Exceptions
32
1.15
Annotations
35
1.16
Packages
36
1.17
The Java Platform
38
1.18
Other Topics Briefly Noted
39
Chapter 2: Classes and Objects
41
2.1
A Simple Class
42
2.2
Fields
44
2.3
Access Control
47
2.4
Creating Objects
49
2.5
Construction and Initialization
50
2.6
Methods
56
2.7
this
68
2.8
Overloading Methods
69
2.9
Importing Static Member Names
71
2.10
The main Method
73
2.11
Native Methods
74
Chapter 3: Extending Classes
75
3.1
An Extended Class
76
3.2
Constructors in Extended Classes
80
3.3
Inheriting and Redefining Members
84
3.4
Type Compatibility and Conversion
90
3.5
What protected Really Means
93
3.6
Marking Methods and Classes final
96
3.7
Abstract Classes and Methods
97
3.8
The Object Class
99
3.9
Cloning Objects
101
3.10
Extending Classes: How and When
107
3.11
Designing a Class to Be Extended
108
3.12
Single Inheritance versus Multiple Inheritance
114
Chapter 4: Interfaces
117
4.1
A Simple Interface Example
118
4.2
Interface Declarations
120
4.3
Extending Interfaces
122
4.4
Working with Interfaces
126
4.5
Marker Interfaces
130
4.6
When to Use Interfaces
131
Chapter 5: Nested Classes and Interfaces
133
5.1
Static Nested Types
133
5.2
Inner Classes
136
5.3
Local Inner Classes
142
5.4
Anonymous Inner Classes
144
5.5
Inheriting Nested Types
146
5.6
Nesting in Interfaces
148
5.7
Implementation of Nested Types
149
Chapter 6: Enumeration Types
151
6.1
A Simple Enum Example
151
6.2
Enum Declarations
152
6.3
Enum Constant Declarations
154
6.4
java.lang.Enum
159
6.5
To Enum or Not
160
Chapter 7: Tokens, Values, and Variables
161
7.1
Lexical Elements
161
7.2
Types and Literals
166
7.3
Variables
169
7.4
Array Variables
173
7.5
The Meanings of Names
178
Chapter 8: Primitives as Types
183
8.1
Common Fields and Methods
184
8.2
Void
187
8.3
Boolean
187
8.4
Number
188
8.5
Character
192
8.6
Boxing Conversions
198
Chapter 9: Operators and Expressions
201
9.1
Arithmetic Operations
201
9.2
General Operators
204
9.3
Expressions
214
9.4
Type Conversions
216
9.5
Operator Precedence and Associativity
221
9.6
Member Access
223
Chapter 10: Control Flow 229
10.1
Statements and Blocks
229
10.2
if-else
230
10.3
switch
232
10.4
while and do-while
235
10.5
for
236
10.6
Labels
241
10.7
break
241
10.8
continue
244
10.9
return
245
10.10
What, No goto?
246
Chapter 11: Generic Types
247
11.1
Generic Type Declarations
250
11.2
Working with Generic Types
256
11.3
Generic Methods and Constructors
260
11.4
Wildcard Capture
264
11.5
Under the Hood: Erasure and Raw Types
267
11.6
Finding the Right Method--Revisited
272
11.7
Class Extension and Generic Types
276
Chapter 12: Exceptions and Assertions 279
12.1
Creating Exception Types
280
12.2
throw
282
12.3
The throws Clause
283
12.4
try, catch, and finally
286
12.5
Exception Chaining
291
12.6
Stack Traces
294
12.7
When to Use Exceptions
294
12.8
Assertions
296
12.9
When to Use Assertions
297
12.10
Turning Assertions On and Off
300
Chapter 13: Strings and Regular Expressions
305
13.1
Character Sequences
305
13.2
The String Class
306
13.3
Regular Expression Matching
321
13.4
The StringBuilder Class
330
13.5
Working with UTF-16
336
Chapter 14: Threads
337
14.1
Creating Threads
339
14.2
Using Runnable
341
14.3
Synchronization
345
14.4
wait, notifyAll, and notify
354
14.5
Details of Waiting and Notification
357
14.6
Thread Scheduling
358
14.7
Deadlocks
362
14.8
Ending Thread Execution
365
14.9
Ending Application Execution
369
14.10
The Memory Model: Synchronization and volatile
370
14.11
Thread Management, Security, and ThreadGroup
375
14.12
Threads and Exceptions
379
14.13
ThreadLocal Variables
382
14.14
Debugging Threads
384
Chapter 15: Annotations
387
15.1
A Simple Annotation Example
388
15.2
Annotation Types
389
15.3
Annotating Elements
392
15.4
Restricting Annotation Applicability
393
15.5
Retention Policies
395
15.6
Working with Annotations
395
Chapter 16: Reflection
397
16.1
The Class Class
399
16.2
Annotation Queries
414
16.3
The Modifier Class
416
16.4
The Member classes
416
16.5
Access Checking and AccessibleObject
417
16.6
The Field Class
418
16.7
The Method Class
420
16.8
Creating New Objects and the Constructor Class
423
16.9
Generic Type Inspection
426
16.10
Arrays
429
16.11
Packages
432
16.12
The Proxy Class
432
16.13
Loading Classes
435
16.14
Controlling Assertions at Runtime
444
Chapter 17: Garbage Collection and Memory
447
17.1
Garbage Collection
447
17.2
A Simple Model
448
17.3
Finalization
449
17.4
Interacting with the Garbage Collector
452
17.5
Reachability States and Reference Objects
454
Chapter 18: Packages
467
18.1
Package Naming
468
18.2
Type Imports
469
18.3
Package Access
471
18.4
Package Contents
475
18.5
Package Annotations
476
18.6
Package Objects and Specifications
477
Chapter 19: Documentation Comments
481
19.1
The Anatomy of a Doc Comment
482
19.2
Tags
483
19.3
Inheriting Method Documentation Comments
489
19.4
A Simple Example
491
19.5
External Conventions
496
19.6
Notes on Usage
497
Chapter 20: The I/O Package
499
20.1
Streams Overview
500
20.2
Byte Streams
501
20.3
Character Streams
507
20.4
InputStreamReader and OutputStreamWriter
512
20.5
A Quick Tour of the Stream Classes
514
20.6
The Data Byte Streams
537
20.7
Working with Files
540
20.8
Object Serialization
549
20.9
The IOException Classes
563
20.10
A Taste of New I/O
565
Chapter 21: Collections
567
21.1
Collections
567
21.2
Iteration
571
21.3
Ordering with Comparable and Comparator
574
21.4
The Collection Interface
575
21.5
Set and SortedSet
577
21.6
List
580
21.7
Queue
585
21.8
Map and SortedMap
587
21.9
enum Collections
594
21.10
Wrapped Collections and the Collections Class
597
21.11
Synchronized Wrappers and Concurrent Collections
602
21.12
The Arrays Utility Class
607
21.13
Writing Iterator Implementations
609
21.14
Writing Collection Implementations
611
21.15
The Legacy Collection Types
616
21.16
Properties
620
Chapter 22: Miscellaneous Utilities
623
22.1
Formatter
624
22.2
BitSet
632
22.3
Observer/Observable
635
22.4
Random
639
22.5
Scanner
641
22.6
StringTokenizer
651
22.7
Timer and TimerTask
653
22.8
UUID
656
22.9
Math and StrictMath
657
Chapter 23: System Programming
661
23.1
The System Class
662
23.2
Creating Processes
666
23.3
Shutdown
672
23.4
The Rest of Runtime
675
23.5
Security
677
Chapter 24: Internationalization and Localization
685
24.1
Locale
686
24.2
Resource Bundles
688
24.3
Currency
694
24.4
Time, Dates, and Calendars
695
24.5
Formatting and Parsing Dates and Times
703
24.6
Internationalization and Localization for Text
708
Chapter 25: Standard Packages 715
25.1
java.awt--The Abstract Window Toolkit
717
25.2
java.applet--Applets
720
25.3
java.beans--Components
721
25.4
java.math--Mathematics
722
25.5
java.net--The Network
724
25.6
java.rmi--Remote Method Invocation
727
25.7
java.security and Related Packages--Security Tools
732
25.8
java.sql--Relational Database Access
732
25.9
Utility Subpackages
733
25.10
javax.* --Standard Extensions
737
25.11
javax.accessibility--Accessibility for GUIs
737
25.12
javax.naming--Directory and Naming Services
738
25.13
javax.sound--Sound Manipulation
739
25.14
javax.swing--Swing GUI Components
740
25.15
org.omg.CORBA--CORBA APIs
740
Appendix A: Application Evolution
741
A.1
Language, Library, and Virtual Machine Versions
741
A.2
Dealing with Multiple Dialects
743
A.3
Generics: Reification, Erasure, and Raw Types
744
Appendix B: Useful Tables
749
Further Reading
755
Index
761