Tải bản đầy đủ (.pdf) (669 trang)

Oracle press java programming

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 (8.69 MB, 669 trang )


®

Java Programming



About the Author
Poornachandra Sarang (popularly known as Dr. Sarang) has been a Java
programmer since its inception way back in 1996. Over the last 15 years,
Dr. Sarang has conducted many train-the-trainer programs, instructor authorization
tests, and corporate training sessions based on Sun Microsystems’ official
curriculum. He has authored several books and journal articles on Java and
various other similar topics. He has been a regular speaker at many international
conferences, including the recent JavaOne 2011. He is also associated with the
University of Mumbai and a few other universities of repute as a visiting/adjunct
faculty and Ph.D. advisor in Computer Science. Dr. Sarang has been invited to
deliver keynote addresses and technical talks at many international research and
technology conferences. Besides Java coding, Dr. Sarang does some architecture
work and is also well recognized in the Enterprise Architecture space.


®

Java Programming


Poornachandra Sarang

New Yorkâ•… Chicagoâ•… San Franciscoâ•…
Lisbonâ•… Londonâ•… Madridâ•… Mexico Cityâ•… Milanâ•…


New Delhiâ•… San Juanâ•… Seoulâ•… Singaporeâ•… Sydneyâ•… Toronto


Copyright © 2012 by The McGraw-Hill Companies. All rights reserved. Except as permitted under the United States Copyright Act of 1976, no
part of this publication may be reproduced or distributed in any form or by any means, or stored in a database or retrieval system, without the
prior written permission of the publisher.
ISBN: 978-0-07-163361-1
MHID: 0-07-163361-8
The material in this eBook also appears in the print version of this title: ISBN: 978-0-07-163360-4,
MHID: 0-07-163360-X
McGraw-Hill eBooks are available at special quantity discounts to use as premiums and sales promotions, or for use in corporate training programs. To contact a representative please e-mail us at
All trademarks are trademarks of their respective owners. Rather than put a trademark symbol after every occurrence of a trademarked name, we
use names in an editorial fashion only, and to the benefit of the trademark owner, with no intention of infringement of the trademark. Where such
designations appear in this book, they have been printed with initial caps.
Information has been obtained by McGraw-Hill from sources believed to be reliable. However, because of the possibility of human or mechanical
error by our sources, McGraw-Hill, or others, McGraw-Hill does not guarantee the accuracy, adequacy, or completeness of any information and
is not responsible for any errors or omissions or the results obtained from the use of such information.
TERMS OF USE
This is a copyrighted work and The McGraw-Hill Companies, Inc. (“McGrawHill”) and its licensors reserve all rights in and to the work. Use
of this work is subject to these terms. Except as permitted under the Copyright Act of 1976 and the right to store and retrieve one copy of the
work, you may not decompile, disassemble, reverse engineer, reproduce, modify, create derivative works based upon, transmit, distribute,
disseminate, sell, publish or sublicense the work or any part of it without McGraw-Hill’s prior consent. You may use the work for your own
noncommercial and personal use; any other use of the work is strictly prohibited. Your right to use the work may be terminated if you fail to
comply with these terms.
THE WORK IS PROVIDED “AS IS.” McGRAW-HILL AND ITS LICENSORS MAKE NO GUARANTEES OR WARRANTIES AS TO THE
ACCURACY, ADEQUACY OR COMPLETENESS OF OR RESULTS TO BE OBTAINED FROM USING THE WORK, INCLUDING ANY
INFORMATION THAT CAN BE ACCESSED THROUGH THE WORK VIA HYPERLINK OR OTHERWISE, AND EXPRESSLY DISCLAIM
ANY WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY
OR FITNESS FOR A PARTICULAR PURPOSE. McGraw-Hill and its licensors do not warrant or guarantee that the functions contained in the
work will meet your requirements or that its operation will be uninterrupted or error free. Neither McGraw-Hill nor its licensors shall be liable to

you or anyone else for any inaccuracy, error or omission, regardless of cause, in the work or for any damages resulting therefrom. McGraw-Hill has
no responsibility for the content of any information accessed through the work. Under no circumstances shall McGraw-Hill and/or its licensors be
liable for any indirect, incidental, special, punitive, consequential or similar damages that result from the use of or inability to use the work, even if
any of them has been advised of the possibility of such damages. This limitation of liability shall apply to any claim or cause whatsoever whether
such claim or cause arises in contract, tort or otherwise.


A deep reverence to my beloved late father-in-law


Contents at a Glance
)>>

1)>> Introduction to Javaâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

1

)>>

2)>> Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 17

)>>

3)>> Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 41

)>>

4)>> Inheritanceâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 67

)>>


5)>> Object Creation and Member Visibilityâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 93

)>>

6)>> Static Modifier and Interfacesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 121

)>>

7)>> Nested Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 153

)>>

8)>> Exception Handlingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .)>> 169

)>>

9)>> Java I/Oâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 199

)>>

10)>> Advanced I/Oâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 225

)>>

11)>> Enums, Autoboxing, and Annotationsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 255

)>>

12)>> Genericsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 291


)>>

13)>> Event Processing and GUI Buildingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .)>> 317

)>>

14)>> Creating Layoutsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 343

)>>

15)>> Graphics and User Gestures Processingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 377

)>>

16)>> Collectionsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 409

)>>

17)>> Threadsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 435

)>>

18)>> Blocking Queues and Synchronizersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 473

)>>

19)>> Callables, Futures, Executors, and Fork/Joinâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 509

)>>


20)>> Network Programmingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 543

)>>

21)>> Utility Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 585

ç’•å±´ Indexâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .)>> 617

vii


Contents
Forewordâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> xix
Acknowledgmentsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> xxi
Introductionâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> xxiii

)>>

1)>> Introduction to Javaâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

1

Why Java?â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
So What Is Java?â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Java Virtual Machineâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Features of Javaâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Smallâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Simpleâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Object Orientedâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

Compiled and Interpretedâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Platform Independentâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Robust and Secureâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Multithreadedâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Dynamicâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Java’s Evolutionâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
JDK 1.0 (January 23, 1996): Codename Oakâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
JDK 1.1 (February 19, 1997)â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
J2SE 1.2 (December 8, 1998): Codename Playgroundâ•… . . . . . . . . . . . . . . . . . . . )>>
J2SE 1.3 (May 8, 2000): Codename Kestrelâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
J2SE 1.4 (Feb 6, 2002): Codename Merlinâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
J2SE 5.0 (Sept 30, 2004): Codename Tigerâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Java SE 6 (Dec 11, 2006): Codename Mustangâ•… . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Java SE 7 (July 7, 2011): Codename Dolphinâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

2
3
3
4
4
5
5
5
6
6
8
8
9
9

10
11
13
13
14
15
15
16

ix


xâ•…

Java Programming
)>>

2)>> Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 17
Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Declaring Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Accessing and Modifying Array Elementsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Initializing Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Initializing at Runtimeâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Initializing Using Array Literalsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The for-each Loopâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Multidimensional Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Two-dimensional Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Initializing Two-dimensional Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Looping Using the for-each Constructâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

N-dimensional Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Nonrectangular Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Runtime Initializationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Initialization Using Array Literalsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
A Few Goodiesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Determining the Array Lengthâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Cloning an Arrayâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Finding Out the Class of an Arrayâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

)>>

18
19
20
20
22
22
23
26
28
28
29
33
33
33
34
35
35
35

37
38
40

3)>> Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 41
Object-Oriented Programming (OOP) Conceptsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
OOP Featuresâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
OOP Benefitsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Defining a Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Declaring a Point Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Using Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Accessing/Modifying Fieldsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Class Example Programâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Declaring Methodsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Memory Representation of Objectsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Information Hidingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Encapsulationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Declaring Constructorsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Default Constructorâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Rules for Defining a Constructorâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Source File Layoutâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The package Statementâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The import Statementâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Directory Layout and Packagesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

42
43
45

45
45
46
47
48
48
49
51
52
56
57
60
61
61
62
63
64
65


Contentsâ•…


4 Inheritanceâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . 67
Why Inheritance?â•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . .
What Is Inheritance?â•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . .
Defining Single-level Inheritanceâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . .
Capturing Multilevel Inheritanceâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . .
Writing a Multilevel Inheritance Programâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . .
Polymorphismâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ .

Creating a Heterogeneous Collection of Objectsâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . .
A Program That Demonstrates a Heterogeneous Collectionâ•… . . . . . . . . . . . . . . .
Detecting the Object Typeâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . .
Typecasting Rules on Inheritance Hierarchiesâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . .
Preventing Method Overridingâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ .
Preventing Subclassingâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . .
Summaryâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . .



68
69
72
73
74
80
81
81
88
90
90
90
91

5 Object Creation and Member Visibilityâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . 93
Instantiating a Subclassâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . .
The Object-Creation Processâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . .
Calling the super Constructorâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . .
Method Overloadingâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . .
Rules of Method Overloadingâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . .

Creating a Copy Constructorâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . .
Invoking Constructors: Summaryâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . .
The final Keywordâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . .
The final Classesâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . .
The final Methodsâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . .
The final Variablesâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . .
The final Variables of the Class Typeâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . .
Important Points Related to the final Keywordâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . .
Understanding Member Visibility Rulesâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“
The public Modifierâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . .
The private Modifierâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . .
The protected Modifierâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . .
The Default Modifierâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . .
A Few Rules on Inheritingâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . .
Summaryâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . .



xi

94
95
98
102
104
104
105
105
106
106

108
109
110
111
113
114
115
117
119
120

6 Static Modifier and Interfacesâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . 121
The static Keywordâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . .
The Static Fieldsâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . .
The Static Methodsâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . .
The Static Initializersâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . .
Interfacesâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“ . . . . .
A Real-life Example of an Interfaceâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . .
Understanding Interface Syntaxâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . . . . . . . . . . . . .å°“
Understanding Interfaces Through an Exampleâ•… . . . . . . . . . . . . . . . . . .å°“ . . . . . . .

122
122
126
132
135
137
139
140



xiiâ•…

Java Programming
Extending Interfacesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Implementing Multiple Interfacesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Combining Interfacesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
A Few Important Points on Interfacesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Abstract Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

)>>

7)>> Nested Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 153
Nested Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Why Use Nested Classes?â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Classifications of Nested Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Demonstrating the Use of Inner Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Accessing an Inner Class from the Outsideâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Accessing Shadowed Variablesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Important Points to Noteâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Member Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Local Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Defining an Inner Class within Method Scopeâ•… . . . . . . . . . . . . . . . . . . . . . . . . . )>>
A Few Important Points on Local Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Anonymous Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating Anonymous Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Restrictions on the Use of Anonymous Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Compiled Anonymous Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Guidelines on Using Anonymous Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

)>>

142
145
149
149
149
151
154
155
155
156
159
160
162
162
162
163
164
165
167
167
167
168
168

8)>> Exception Handlingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 169
What Is an Exception?â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

Error Typesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Non-fatal Errorsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The try-catch Statementsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Classifying Exceptionsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Combining Exception Handlersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
How Runtime Matches catch Blocksâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The finally Statementâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Guidelines on the Use of the finally Blockâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Rules for Using the try/catch/finally Blockâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The try-with-resources Statementâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Checked/Unchecked Exceptionsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The throws Constructâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Throwing Multiple Exceptionsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
User-defined Exceptionsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The throw Statementâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Re-throwing Exceptionsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

171
171
172
174
175
179
180
180
182
183
183
184
185

188
188
190
190


Contentsâ•…
Difference Between the throw and throws Keywordsâ•… . . . . . . . . . . . . . . . . . . . . )>>
The final Re-throw in Java SE 7â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Declaring Exceptions in Overridden Methodsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Printing a Stack Traceâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Asynchronous Exceptionsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Guidelines for Using Exceptionsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

)>>

192
192
192
195
196
197
198

9)>> Java I/Oâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 199
Input/Output Streamsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The I/O Class Hierarchyâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Byte Streamsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Determining File Lengthâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

The InputStream Methodsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The OutputStream Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
File Copy Utilityâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The OutputStream Methodsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Character Streamsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
File Viewer Utilityâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Buffered Readers/Writersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Binary Versus Character Streamsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Chaining Streamsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Line Count Programâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
File Concatenationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Accessing the Host File Systemâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Directory Listing Programâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Filtering the Directory Listingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Reading/Writing Objectsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

)>>

xiii

200
201
201
202
206
207
207
210
210

211
213
214
215
216
218
220
220
221
222
224

10)>> Advanced I/Oâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 225
The Byte-Oriented Stream Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The PushbackInputStream Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The SequenceInputStream Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The PrintStream Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Character-Oriented Stream Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The CharArray Reader/Writer Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Console Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The StreamTokenizer Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Object-Oriented Streamsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Externalizable Interfaceâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Nested Objects Serializationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Versioning Objectsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

227
231
234

238
239
239
239
241
243
244
248
250
253


xivâ•…

Java Programming
)>>

11)>> Enums, Autoboxing, and Annotationsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 255
Typesafe Enumerationsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating Integer Patterns for Enumerationsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The enum Typeâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Serializing enum Typesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Autoboxingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Wrapper Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
A Few Additions in J2SE 5.0â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Autoboxing/Unboxingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Annotationsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Built-in Annotationsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Declaring Annotationsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Annotating an Annotationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

)>>

256
256
257
263
264
264
268
271
273
273
277
280
289

12)>> Genericsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 291
Genericsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
What Are Generics?â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Why Do We Need Generics?â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
A Sample Generics Programâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Type Safetyâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating a Parameterized Stack Typeâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Declaration Syntaxâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
A Generic Stack Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Examining Intermediate Codeâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Testing the Stack Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Bounded Typesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

Using Wildcardsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Bounded Wildcardsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Raw Typesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
More on Generic Typesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Class with Two Generic Parametersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Casting Typesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Comparing and Assigning Generic Typesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Generic Methodsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Declaring Generic Interfacesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Restrictions in Genericsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating Arraysâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Instantiating Type Parametersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Use of the static Keywordâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

292
292
293
295
297
298
298
299
300
301
304
305
308
310
310

310
312
313
314
314
314
314
315
315
316


Contentsâ•…
)>>

13)>> Event Processing and GUI Buildingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 317
Event Processing Modelâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Delegation Event Modelâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Event Sourceâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Event Listenerâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Event Processing Sequenceâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Registering on Multiple Event Sourcesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Multiple Event Typesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Building a GUIâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating the User Interfaceâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Demonstrating the Button Controlâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Demonstrating the Edit Controlâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Demonstrating the List Box Controlâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>


)>>

319
321
322
322
323
324
324
325
326
326
330
335
342

14)>> Creating Layoutsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 343
Layout Managersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Types of Layout Managersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Building the GUIâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
How Do Layout Managers Work?â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Using Layout Managersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
BorderLayoutâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Using NetBeans to Build the GUIâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
FlowLayoutâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
CardLayoutâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
GridLayoutâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
GridBagLayoutâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
BoxLayoutâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Tabbed Dialog Boxâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

Advanced Layout Managersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

)>>

xv

344
344
345
346
346
346
347
354
356
360
361
367
372
375
375

15)>> Graphics and User Gestures Processingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 377
What Is an Applet?â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating Your First Appletâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Running the Appletâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Using AppletViewerâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Understanding Applet Life-cycle Methodsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Processing Mouse Eventsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

Creating Popup Menusâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Customizing the Drawing Colorâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Processing Keyboard Eventsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

378
379
380
381
382
383
390
395
403
407


xviâ•…

Java Programming
)>>

16)>> Collectionsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 409
What Is the Java Collections Framework?â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Benefits of the Collections Frameworkâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
What the Collections Framework Offersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Collections Framework Interfacesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Collections Framework Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Listâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Optional Operations of the List Interfaceâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

Setâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Queueâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Mapâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Algorithmsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

)>>

17)>> Threadsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 435
Processes and Threadsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Thread Statesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
JVM Threading Implementationsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Daemon Versus Non-Daemon Threadsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating Threadsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating Your First Threaded Applicationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating Non-Daemon Threadsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Thread Class Constructorsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Static Methods of Threadâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Some Essential Operations on Threadâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Thread Synchronizationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Bucket Transfersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Producer/Consumer Problemâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Object Locksâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
When to Synchronizeâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Deadlockâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Solutions to Deadlockâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

)>>


410
411
411
412
414
414
417
418
424
427
430
433
437
438
440
442
442
443
447
449
449
450
457
458
461
465
466
467
468
471


18)>> Blocking Queues and Synchronizersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 473
Blocking Queuesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Characteristics of Blocking Queuesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The BlockingQueue Interfaceâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Implementations of the BlockingQueue Interfaceâ•… . . . . . . . . . . . . . . . . . . . . . . . )>>
Stock-trading Systemâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The LinkedTransferQueue Exampleâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Synchronizersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Semaphoresâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Barriersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Countdown Latchesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

475
476
477
477
479
484
486
486
490
493


Contentsâ•…

xvii

Phaserâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 497

Exchangersâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 501
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 507

)>>

19)>> Callables, Futures, Executors, and Fork/Joinâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 509
Callables and Futuresâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Callable Interfaceâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Future Interfaceâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
How Callable and Future Workâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Using Callables in Parallelizing Large Tasksâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The FutureTask Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating Cancellable Tasksâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Executorsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating a Thread Pool for Scheduled Executionsâ•… . . . . . . . . . . . . . . . . . . . . . . . )>>
The ScheduledExecutorService Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Demonstrating Scheduled Task Executionâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Obtaining the Results of the First Completed Executionâ•… . . . . . . . . . . . . . . . . . . )>>
Demonstrating the ExecutorCompletionService Classâ•… . . . . . . . . . . . . . . . . . . . . )>>
Fork/Join Frameworkâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The ForkJoinPool Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The ForkJoinTask Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Sorting an Enormous Array of Floatsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Thread-safe Collectionsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The ThreadLocalRandom Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

)>>

510

511
511
511
512
518
518
523
524
524
525
528
529
533
534
535
535
540
541
541

20)>> Network Programmingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 543
Networkingâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Simple Home Page Readerâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The URL Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The URLConnection Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Webpage Readerâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The HttpCookie Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Spying for Cookiesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Echo Server Applicationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Testing the Echo Server Applicationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

Serving Multiple Clientsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Serving Simultaneous Clientsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Running the EchoMultiServer Applicationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Testing the EchoMultiServer Applicationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Writing a File Storage Server Applicationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
A Cloud Storage Serverâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
A Cloud Store Clientâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Testing the File Upload/Download Utilityâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

544
547
550
550
551
552
553
556
559
560
561
563
564
566
566
570
573


xviiiâ•…


Java Programming
The InetAddress Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Broadcasting Messagesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Writing a Stock Quotes Serverâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Writing the Stock Trader Clientâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Running the Server and Clientâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Support for SCTPâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

)>>

574
575
576
579
581
582
583

21)>> Utility Classesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 585
The String Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
A Few Important Methodsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Practical Demonstration of String Methodsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Comparing Stringsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Creating Formatted Outputâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Calendar Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The GregorianCalendar Methodsâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Local Time Converter Applicationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Introspection and Reflectionâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Class Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

The Method Classâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Class Browser Applicationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Introspection Test Applicationâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
The Class Browserâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Disadvantagesâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
What’s Next?â•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>
Summaryâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>>

586
586
588
590
591
594
594
595
600
601
603
604
605
606
614
614
615

ç’•å±´ Indexâ•… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )>> 617


Foreword

Java has been a part of my career and my life nearly since its beginning. I started using
Java 1.0 in 1996, and joined the Java team at Sun later that year. It was a rocky beginning,
but something quite special happened: Many brilliant people brought together countless
ideas to create a platform that changed how people think about software. Many existing
companies adopted Java as a core technology, and many new companies were formed
either to add to the Java ecosystem or to leverage it in another arena.
Java isn’t just a language. It is a platform that consists of many parts, including the Java
language, the Java Virtual Machine (VM) core libraries, and many other components. These
components make for a flexible, powerful, and versatile technology that reaches into the
most diverse range of applications anywhere.
Java isn’t just a platform. It is its own ecosystem. Built on top of the Java platform are
IDEs, monitoring and management tools, libraries, application servers, test and debug tools,
development tools, and, of course, applications of almost every variety.
Developer usage has grown in the years I’ve worked on Java. In the late 1990s, developers
were counted in the tens and hundreds of thousands. Today, Oracle reports that over nine
million developers use Java. Deployments, including Java ME on consumer devices, measure
in the billions.
Java continues to improve. By some measures, Oracle JDK performance has nearly
tripled since JDK 5. These improvements reflect changes throughout the platform.
The improvements don’t stop with performance, but include a wide range of capabilities
and features added in every release. The evolution of Java is carefully shepherded by talented
technologists with a wide range of expertise who pay an enormous level of attention to
maintaining compatibility and uniformity.
Even with this, the scope of a major Java release, combined with its occasional obscure
characteristics, makes a book like Java Programming crucial for developers. Books like this
one were a huge influence on the adoption of Java by millions of developers, including
myself, and I am grateful that Poornachandra Sarang has the patience and skills needed,
and has taken the time to effectively communicate the intricate details of the Java platform.
John Pampuch
Director, Java VM Technology, Oracle

December 15, 2011

xix


Acknowledgments
Since embracing Java in 1996, I have conducted several train-the-trainer programs and
instruction authorization tests for Sun Microsystems (now Oracle). All these years, I always
wanted to write a book on Java programming that provides accurate and authentic knowledge
of the language to professionals who want to master Java. However, this goal always seemed
to be a low priority until, finally, my dream took concrete shape when McGraw-Hill became
interested in publishing this book. Naturally, my first thanks go to the acquisitions editors of
McGraw-Hill. But thanks also go to the editorial and production teams who painstakingly
helped me bring my idea for a book into a reality. I would like to specifically mention a few
names from the teams with whom I had direct interactions. I wish to thank Joya Anthony, Jane
Brownlow, and Megg Morin from the acquisitions department as well as Bart Reed, Harleen
Chopra, and Sapna Rastogi from the editorial and production teams. Also, many thanks to
Jody McKenzie, who helped in resolving several issues during production and creating this
beautiful and technically accurate book.
My thanks also go to the members of the Oracle family. Without their help, this book
would have never achieved the technical accuracy that it has today. I first wish to thank Pratik
Parekh, a good long-time friend and the current Director of Production Management for Fusion
Middleware at Oracle Corporation. Pratik helped in introducing and establishing contacts with
the right people at Oracle. I wish to thank John Pampuch (Director, Java VM Technology at
Oracle), who took immediate action on my request and provided me with the best person in
the world to technically review the manuscript. That reviewer was none other than Danny
Coward, Chief Architect of Client Software at Oracle. Danny’s review and comments were so
deep and insightful that I decided to rewrite the entire book. My special thanks go to Danny for
agreeing to do a second round of technical reviews on the revised manuscript. On several
occasions, he went out of his way to guide me and provide the accurate technical information

that the book needed. I must admit that in spite of my many years of Java coding experience,
I still had many misconceptions that were cleared up due to my constant interaction with
Danny during the writing of this book. Danny was very particular in his reviews, even insisting
on strictly following the naming conventions and observing the code formatting per JLS
standards, thus taking care of some minor details such as required line spaces and the spacing
between the characters. Without his critical reviews, I probably would have never achieved
the level of technical accuracy that I desired for this book. Once again, many, many thanks to
you, Danny. Whatever errors may have remained in the book are now solely mine.

xxi


xxiiâ•…

Java Programming

My special thanks also go to my students, especially Ishita Patel, who read the manuscript
with careful eyes, locating many errors and omissions. Ishita also helped in developing and
testing all the code examples in this book. I also want to thank Rashmi Singh, who provided me
with constructive feedback on several chapters. I must also mention Steven Suting, who helped
in correcting all Java Language Syntax specifications in the book.
I am also indebted to Vijay Jadhav, who helped create the illustrations for this book as well as
formatted, organized, and tracked the manuscript.
Finally, my sincere thanks go to John Pampuch, who readily agreed to provide the foreword
to this book.


Introduction
You are holding a book that has been written by a veteran Java programmer and technically
reviewed by none other than Sun Microsystems (now Oracle). This book provides in-depth

coverage of Java language features, including the latest additions introduced in Java SE 7.
So whether you are new to Java programming, a student studying for Java certification, or
a€professional programmer in other languages, you will find this book extremely useful in
taking you into the Java domain.

How This Book Is Organized

The book consists of a total 24 chapters, with three initial chapters located on the Web
(www.oraclepressbooks.com). The conventional Hello World program and basic Java
syntax are covered in these three chapters. They have been placed on the Web because
most of the readers of this book are likely to be professional programmers who want to
jump directly into the more advanced topics of the language. After an initial introduction
to Java and its path toward the latest version in Chapter 1, we jump directly to Java arrays
in Chapter 2. Up to Chapter 9, you’ll find an in-depth treatment of the Java language,
focusing mainly on object orientation in Java and dealing with many intricacies such as
the object-creation process; creating inheritance hierarchies; appropriate usage of final,
static modifiers; effectively using public, protected, and private modifiers; defining nested,
local, and anonymous classes; and, finally, how to effectively handle exceptions in your
Java applications.
From here, we take a break from the Java language syntax and move into discussing Java
libraries, covering I/O programming with several practical coding examples. Then we cover
some more advanced syntax topics such as enums, autoboxing, annotations, and generics.
The remainder of the book focuses on real-world application development, including GUI
building, event and user gesture processing, understanding data structures, thread and
network programming, and assorted important Java classes.

xxiii


xxivâ•…


Java Programming

All the chapters of this book have been structured carefully to avoid forward references.
Therefore, the book is meant to be read chapter by chapter. Those who know Java and want to
get in-depth and accurate information on a particular topic can just read the relevant chapter
of interest.

The Chapters
The book consists of 21 carefully organized chapters, with three additional chapters on Java syntax
available at www.oraclepressbooks.com. Here’s a rundown of the chapters in this book:
■⌀ Chapter 1 gives a brief history of Java, tells you why Java was created, what Java is, and
what its prominent features are.
■⌀ Chapter 2 discusses how to declare and use both single- and multidimensional arrays.
■⌀ Chapter 3 begins your study of object-oriented language by discussing what a class is. This
chapter covers the major features of an object-oriented language, such as encapsulation,
inheritance, and polymorphism.
■⌀ Chapter 4 provides an in-depth treatment of the inheritance feature in regard to Java’s
object orientation. This chapter teaches you how to create single- and multilevel
inheritance hierarchies.
■⌀ Chapter 5 explains the object-creation process and how superclass objects are constructed
during object creation.
■⌀ Chapter 6 takes you further into the realm of object-oriented programming by discussing
static fields, methods, and initializers.
■⌀ Chapter 7 provides a grand finale to Java’s classes and covers nested, local, and anonymous
classes.
■⌀ Chapter 8 talks about exception handling in Java. You may find this to be a nice change of
pace after a heavy dose of the intricacies of the Java language in the previous two chapters.
■⌀ Chapters 9 and 10 cover I/O programming in Java, including the new java.nio package.
■⌀ Chapter 11 takes you further into Java language syntax and introduces enums, autoboxing,

and annotations.
■⌀ Chapter 12 covers generics, giving you a deep technical understanding of its many features.
■⌀ Chapter 13 is a move toward practical application development in Java. It deals with GUI
building and how events are processed in such GUI applications.
■⌀ Chapter 14 provides an in-depth treatment of the various layout managers used in creating
sophisticated screen layouts.
■⌀ Chapter 15 shows you how to draw graphics and process user gestures.
■⌀ Chapter 16 is all about the Collections API—an important API for organizing your data.
■⌀ Chapter 17 is the first of three chapters on thread programming. It provides in-depth
knowledge on how threading is implemented in JVMs and discusses the basic
synchronization mechanism.


Introductionâ•…

xxv

■⌀ Chapter 18 discusses blocking queues and synchronizers such as countdown latches,
semaphores, and more.
■⌀ Chapter 19 covers callables, futures, executors, and the latest fork/join framework
introduced in Java SE 7.
■⌀ Chapter 20 is on network programming, a very vital facet of Java applications.
■⌀ Chapter 21 provides the grand finale by discussing a few assorted classes and APIs that
set a path for you to learn the rich repertoire of classes in Java.
Note
Syntax Reference 1, Syntax Reference 2, and Syntax Reference 3
discuss basic Java syntax and are available at www.oraclepressbooks
.com. These three web chapters start with a discussion of the
conventional Hello World program and walk you through basic
constructs, operators, and control flow statements. The three

web€chapters are up to date with all the additions made to basic
Java€syntax up through Java SE 7. Many features that are easily missed
are discussed in these chapters.


Chapter

1

Introduction to Java

1


2â•…

Java Programming

S

ince its release in 1996, Java has been a popular language among developers
worldwide. As of this writing, official sources (namely Oracle) claim that there are
about 9 million active Java developers worldwide. Java has been widely accepted as
the language of choice for developing almost every kind of application, ranging
from small web-based Java applets to large distributed enterprise applications. You
will also find Java being used in small-embedded devices as well as very large mission-critical
applications. You will find Java being used in colleges by students doing their projects, in industries
by developers for their commercial projects, in government for their scalable applications, in banks
for their time-critical reliable applications, and in militaries for their robust mission-critical
applications. You will find that Java is used in almost every corner of the world.

So what is it that has made Java so popular? Is Java merely a programming language like
Pascal, C, or C++? Is it a tool for creating applications of various sizes and complexities? Is it a
platform for running applications right from embedded to enterprise level? In this chapter, I will
try to answer these questions and many more. You will learn what is so special about Java that
has made it so popular. In particular you will learn the following:
■■ Why Java was created
■⌀ What Java is
■⌀ The features of Java
■■ Java’s evolution

Why Java?

Java was publicly released in 1996. At that time, C++ substantially dominated the market and was
widely used for creating many kinds of software applications. With C++ having such a stronghold in
the market, almost nobody would have thought of bringing a new programming language into the
world of computing—but Sun Microsystems did. When they came out with Java, they had specific
reasons for developing a new language at that time. One of the primary goals for developing a new
language was the need for an appropriate language in developing embedded device applications.
There were many issues with then existing languages. C++ has always been known as “resource
hungry.” C++ developers are required to manage memory themselves. A typical “Hello World”
program written in C++ with, say, Microsoft’s Visual Studio requires several megabytes of memory
to run the code. Though C++ generates highly optimized code, the runtime requirements to run it
are typically very high. This was also true for other development and runtime systems available in
the market at that time, such as Borland C++ and Turbo Pascal—thus the strong need for a language
that would generate small code and use a runtime environment that would not occupy a lot of
memory space on the target device.
Programming for embedded devices also demands portability, and these devices typically use a
wide variety of CPUs and different architectures. Each architecture made C++ applications behave
differently and typically needed to be rewritten for new devices. The complexity of managing
multiple build environments and codebases was the biggest challenge in supporting multidevice

development. Java was an attempt to create a higher-level language that eliminated these problems—
and it largely succeeded in its attempt. It eliminated the multidevice development problems with the
introduction of a virtual machine (VM) and portable bytecode architecture. Sun Microsystems aptly
came up with the marketing slogan “Write Once, Run Anywhere.”


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×