Home
Engineering
Herbert schildt__java_the_complete_reference__sev_book_fi.org_
1 1057
100%
Actual Size
Fit Width
Fit Height
Fit Page
Automatic
Herbert schildt__java_the_complete_reference__sev_book_fi.org_
Embed Size (px)
344 x 292
429 x 357
514 x 422
599 x 487
Citation preview
1. Java:The Complete Reference,Seventh Edition
2. About the AuthorHerbert Schildt is a leading authority on
theJava, C, C++, and C# languages, and is a masterWindows
programmer. His programming bookshave sold more than 3.5 million
copies worldwideand have been translated into all major
foreignlanguages. He is the author of the best-sellingThe Art of
Java, Java: A Beginners Guide, andSwing: A Beginners Guide. Among
his otherbestsellers are C++: The Complete Reference, C++:A
Beginners Guide, C#: The Complete Reference, andC#: A Beginners
Guide. Schildt holds both graduateand undergraduate degrees from
the Universityof Illinois. He can be reached at his
consultingoffice at (217) 586-4683. His Web site
iswww.HerbSchildt.com.
3. Java:The Complete Reference,Seventh EditionHerbert
SchildtNew York Chicago San FranciscoLisbon London Madrid Mexico
CityMilan New Delhi San JuanSeoul Singapore Sydney Toronto
4. Copyright 2007 by The McGraw-Hill Companies. All rights
reserved. Except as permitted under the United States Copyright Act
of 1976, nopart of this publication may be reproduced or
distributed in any form or by any means, or stored in a database or
retrieval system, without theprior written permission of the
publisher.ISBN: 978-0-07-163177-8MHID: 0-07-163177-1The material in
this eBook also appears in the print version of this title: ISBN:
978-0-07-226385-5,MHID: 0-07-226385-7.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 benefi t of the trademark owner,
with no intention of infringement of the trademark. Wheresuch
designations appear in this book, they have been printed with
initial caps.McGraw-Hill eBooks are available at special quantity
discounts to use as premiums and sales promotions, or for use in
corporate trainingprograms. To contact a representative please
e-mail us at [email protected] has been
obtained by McGraw-Hill from sources believed to be reliable.
However, because of the possibility of human ormechanical error by
our sources, McGraw-Hill, or others, McGraw-Hill does not guarantee
the accuracy, adequacy, or completeness of anyinformation and is
not responsible for any errors or omissions or the results obtained
from the use of such information.TERMS OF USEThis is a copyrighted
work and The McGraw-Hill Companies, Inc. (McGrawHill) and its
licensors reserve all rights in and to the work. Useof 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 thework,
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-Hills prior consent. You may use the work
for your ownnoncommercial and personal use; any other use of the
work is strictly prohibited. Your right to use the work may be
terminated if you fail tocomply with these terms.THE WORK IS
PROVIDED AS IS. McGRAW-HILL AND ITS LICENSORS MAKE NO GUARANTEES OR
WARRANTIES ASTO 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, ANDEXPRESSLY DISCLAIM ANY WARRANTY, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OFMERCHANTABILITY
OR FITNESS FOR A PARTICULAR PURPOSE. McGraw-Hill and its licensors
do not warrant or guarantee that thefunctions contained in the work
will meet your requirements or that its operation will be
uninterrupted or error free. Neither McGraw-Hill norits licensors
shall be liable to you or anyone else for any inaccuracy, error or
omission, regardless of cause, in the work or for any
damagesresulting therefrom. McGraw-Hill has no responsibility for
the content of any information accessed through the work. Under no
circumstancesshall McGraw-Hill and/or its licensors be liable for
any indirect, incidental, special, punitive, consequential or
similar damages that result fromthe 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 shallapply to any claim
or cause whatsoever whether such claim or cause arises in contract,
tort or otherwise.
5. Contents at a GlancePart I The Java Language1 The History
and Evolution of Java . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 32 An Overview of Java . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 153 Data Types,
Variables, and Arrays . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 334 Operators . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
Control Statements . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 776 Introducing Classes . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 1057 A Closer Look at Methods and Classes . . . . . . . . . .
. . . . . . . . . . . . . . 1258 Inheritance . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 1579 Packages and Interfaces . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 18310 Exception
Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 20511 Multithreaded Programming . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 22312
Enumerations, Autoboxing, and Annotations (Metadata) . . . . . . .
. . 25513 I/O, Applets, and Other Topics . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 28514 Generics . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 315Part II The Java Library15 String Handling . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 35916 Exploring java.lang . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 38517
java.util Part 1: The Collections Framework . . . . . . . . . . . .
. . . . . . . . 43718 java.util Part 2: More Utility Classes . . .
. . . . . . . . . . . . . . . . . . . . . . . . 50319 Input/Output:
Exploring java.io . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 55520 Networking . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 59921 The
Applet Class . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 61722 Event Handling . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 63723 Introducing the AWT:Working withWindows, Graphics, and
Text . . 66324 Using AWT Controls, Layout Managers, and Menus . . .
. . . . . . . . . 70125 Images . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75526 The Concurrency Utilities . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 78727 NIO, Regular Expressions,
and Other Packages . . . . . . . . . . . . . . . . . 813v
6. vi J a v a : T h e C o m p l e t e R e f e r e n c ePart III
Software Development Using Java28 Java Beans . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 84729 Introducing Swing . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 85930 Exploring
Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 87931 Servlets . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 907Part IV Applying Java32 Financial Applets and Servlets
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
93133 Creating a Download Manager in Java . . . . . . . . . . . . .
. . . . . . . . . . . . 965A Using Javas Documentation Comments . .
. . . . . . . . . . . . . . . . . . . . . 991Index . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 997
7. ContentsPreface . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xxixPart I The Java Language1 The History and Evolution of Java . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 3Javas Lineage
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 3The Birth of Modern Programming: C . . . .
. . . . . . . . . . . . . . . 4C++: The Next Step . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 5The Stage Is
Set for Java . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 6The Creation of Java . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 6The C# Connection .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 8How Java Changed the Internet . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 8Java Applets . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Security .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 9Portability . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 9Javas Magic:
The Bytecode . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 9Servlets: Java on the Server Side . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 10The Java Buzzwords . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 10Simple . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 11Object-Oriented . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 11Robust . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 11Multithreaded . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12Architecture-Neutral . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 12Interpreted and High Performance . . . .
. . . . . . . . . . . . . . . . . . 12Distributed . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12Dynamic . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 13The Evolution of Java . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13Java SE 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 14A Culture of Innovation . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
142 An Overview of Java . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 15Object-Oriented Programming .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Two
Paradigms . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 15Abstraction . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 16The Three OOP
Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 16A First Simple Program . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 21Entering the Program . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21Compiling the Program . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 22A Closer Look at the First Sample Program . .
. . . . . . . . . . . . . 22v i i
8. viii J a v a : T h e C o m p l e t e R e f e r e n c eA
Second Short Program . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 24Two Control Statements . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26The
if Statement . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 26The for Loop . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 27Using Blocks
of Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 29Lexical Issues . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30Whitespace . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 30Identifiers . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 31Comments . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31Separators . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 31The Java Keywords . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 31The Java
Class Libraries . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 323 Data Types, Variables, and Arrays . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 33Java Is a
Strongly Typed Language . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 33The Primitive Types . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 33Integers . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 34byte . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35short . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 35int . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 35long . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 35Floating-Point Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 36float . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 36double . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 36Characters . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37Booleans . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 38A Closer Look at
Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 39Integer Literals . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 39Floating-Point
Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 40Boolean Literals . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 40Character Literals . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40String Literals . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 40Variables . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 41Declaring a Variable . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 41Dynamic Initialization . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 42The Scope
and Lifetime of Variables . . . . . . . . . . . . . . . . . . . . .
42Type Conversion and Casting . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 45Javas Automatic Conversions . . . . . .
. . . . . . . . . . . . . . . . . . . . 45Casting Incompatible
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45Automatic Type Promotion in Expressions . . . . . . . . . . . . .
. . . . . . . . 47The Type Promotion Rules . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 47Arrays . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 48One-Dimensional Arrays . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 48Multidimensional Arrays . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 51Alternative
Array Declaration Syntax . . . . . . . . . . . . . . . . . . . .
55
9. C o n t e n t s ixA Few Words About Strings . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 55A Note to
C/C++ Programmers About Pointers . . . . . . . . . . . . . . . . .
564 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 57Arithmetic
Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 57The Basic Arithmetic Operators . . . . . .
. . . . . . . . . . . . . . . . . . . 58The Modulus Operator . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59Arithmetic Compound Assignment Operators . . . . . . . . . . . .
59Increment and Decrement . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 60The Bitwise Operators . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 62The Bitwise
Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . .
. 63The Left Shift . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 65The Right Shift . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66The
Unsigned Right Shift . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 68Bitwise Operator Compound Assignments . . . . . . .
. . . . . . . . 69Relational Operators . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 70Boolean
Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 71Short-Circuit Logical Operators . . . . . . .
. . . . . . . . . . . . . . . . . . 72The Assignment Operator . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73The ? Operator . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 73Operator Precedence . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 74Using Parentheses . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 745 Control Statements .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 77Javas Selection Statements . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 77if . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 77switch . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 80Iteration
Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 84while . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 86for . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 88The For-Each Version of the for Loop . . . . . . . . . . . .
. . . . . . . . 92Nested Loops . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 97Jump Statements . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 98Using break . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 98Using continue . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 102return . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 1036 Introducing Classes .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 105Class Fundamentals . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 105The General Form
of a Class . . . . . . . . . . . . . . . . . . . . . . . . . . . .
105A Simple Class . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 106Declaring Objects . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
109A Closer Look at new . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 109Assigning Object Reference Variables . .
. . . . . . . . . . . . . . . . . . . . . . . . 111Introducing
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 111Adding a Method to the Box Class . . . . . .
. . . . . . . . . . . . . . . . 112
10. x J a v a : T h e C o m p l e t e R e f e r e n c
eReturning a Value . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 114Adding a Method That Takes Parameters
. . . . . . . . . . . . . . . . 115Constructors . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 117Parameterized Constructors . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 119The this Keyword . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
120Instance Variable Hiding . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 121Garbage Collection . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121The
finalize( ) Method . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 121A Stack Class . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 1227 A Closer Look at Methods and Classes . . . . . . . . . .
. . . . . . . . . . . . . . 125Overloading Methods . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
125Overloading Constructors . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 128Using Objects as Parameters . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 130A Closer
Look at Argument Passing . . . . . . . . . . . . . . . . . . . . .
. . . . . . 132Returning Objects . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 134Recursion .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 135Introducing Access Control . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
138Understanding static . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 141Introducing final . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 143Arrays Revisited . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 143Introducing
Nested and Inner Classes . . . . . . . . . . . . . . . . . . . . .
. . . . 145Exploring the String Class . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 148Using Command-Line
Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . .
150Varargs: Variable-Length Arguments . . . . . . . . . . . . . . .
. . . . . . . . . . . 151Overloading Vararg Methods . . . . . . . .
. . . . . . . . . . . . . . . . . . . 154Varargs and Ambiguity . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558
Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 157Inheritance Basics . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 157Member Access and Inheritance . . . . . . . . . . .
. . . . . . . . . . . . . 159A More Practical Example . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 160A Superclass
Variable Can Reference a Subclass Object . . . . . 162Using super .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 163Using super to Call Superclass
Constructors . . . . . . . . . . . . . . 163A Second Use for super
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
166Creating a Multilevel Hierarchy . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 167When Constructors Are Called . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 170Method
Overriding . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 171Dynamic Method Dispatch . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 174Why
Overridden Methods? . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 175Applying Method Overriding . . . . . . . . . . . . . . .
. . . . . . . . . . . 176Using Abstract Classes . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 177Using
final with Inheritance . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 180Using final to Prevent Overriding . . .
. . . . . . . . . . . . . . . . . . . . 180Using final to Prevent
Inheritance . . . . . . . . . . . . . . . . . . . . . . . 181The
Object Class . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 181
11. C o n t e n t s xi9 Packages and Interfaces . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
183Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 183Defining a Package .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 184Finding Packages and CLASSPATH . . . . . . . . . . . . . . . .
. . . . . 184A Short Package Example . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 185Access Protection . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 186An Access Example . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 187Importing Packages . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
190Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 192Defining an
Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 193Implementing Interfaces . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 194Nested Interfaces . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
196Applying Interfaces . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 197Variables in Interfaces . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 200Interfaces
Can Be Extended . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 20210 Exception Handling . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 205Exception-Handling
Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . .
205Exception Types . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 206Uncaught Exceptions . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 206Using try and catch . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 207Displaying a
Description of an Exception . . . . . . . . . . . . . . . .
209Multiple catch Clauses . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 209Nested try Statements . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 211throw . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 213throws . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 214finally . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 216Javas Built-in Exceptions . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 217Creating Your Own
Exception Subclasses . . . . . . . . . . . . . . . . . . . . . .
219Chained Exceptions . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 221Using Exceptions . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 22211 Multithreaded Programming . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 223The Java Thread Model . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
224Thread Priorities . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 224Synchronization . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
225Messaging . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 225The Thread Class and the
Runnable Interface . . . . . . . . . . . . . 226The Main Thread . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 226Creating a Thread . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
228Implementing Runnable . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 228Extending Thread . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 230Choosing an
Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 232Creating Multiple Threads . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 232Using isAlive( ) and join(
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 233Thread Priorities . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 236
12. xii J a v a : T h e C o m p l e t e R e f e r e n c
eSynchronization . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 238Using Synchronized Methods
. . . . . . . . . . . . . . . . . . . . . . . . . . 239The
synchronized Statement . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 241Interthread Communication . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 242Deadlock . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 247Suspending, Resuming, and Stopping Threads . . . . . . . .
. . . . . . . . . . 249Suspending, Resuming, and Stopping
ThreadsUsing Java 1.1 and Earlier . . . . . . . . . . . . . . . . .
. . . . . . . . . . 249The Modern Way of Suspending, Resuming,and
Stopping Threads . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 251Using Multithreading . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 25412 Enumerations,
Autoboxing, and Annotations (Metadata) . . . . . . . .
255Enumerations . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 255Enumeration Fundamentals
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 255The
values( ) and valueOf( ) Methods . . . . . . . . . . . . . . . . .
. . . 258Java Enumerations Are Class Types . . . . . . . . . . . .
. . . . . . . . . 259Enumerations Inherit Enum . . . . . . . . . .
. . . . . . . . . . . . . . . . . 261Another Enumeration Example .
. . . . . . . . . . . . . . . . . . . . . . . . 263Type Wrappers .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 264Autoboxing . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
266Autoboxing and Methods . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 267Autoboxing/Unboxing Occurs in Expressions . .
. . . . . . . . . . 268Autoboxing/Unboxing Boolean and Character
Values . . . . . 270Autoboxing/Unboxing Helps Prevent Errors . . .
. . . . . . . . . . 271AWord of Warning . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 271Annotations (Metadata)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 272Annotation Basics . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 272Specifying a Retention Policy
. . . . . . . . . . . . . . . . . . . . . . . . . . . 273Obtaining
Annotations at Run Time by Use of Reflection . . . 273The
AnnotatedElement Interface . . . . . . . . . . . . . . . . . . . .
. . . . 278Using Default Values . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 279Marker Annotations . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
280Single-Member Annotations . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 281The Built-In Annotations . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 282Some Restrictions . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28413 I/O, Applets, and Other Topics . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 285I/O Basics . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 285Streams . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 286Byte Streams and
Character Streams . . . . . . . . . . . . . . . . . . . . . 286The
Predefined Streams . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 288Reading Console Input . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 288Reading
Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 289Reading Strings . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 290
13. C o n t e n t s xiiiWriting Console Output . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292The
PrintWriter Class . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 292Reading and Writing Files . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
293Applet Fundamentals . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 296The transient and volatile
Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . .
299Using instanceof . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 300strictfp . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 302Native Methods . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
302Problems with Native Methods . . . . . . . . . . . . . . . . . .
. . . . . . . 306Using assert . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
306Assertion Enabling and Disabling Options . . . . . . . . . . . .
. . . 309Static Import . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 309Invoking
Overloaded Constructors Through this( ) . . . . . . . . . . . . . .
31214 Generics . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 315What Are
Generics? . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 316A Simple Generics Example . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 316Generics
Work Only with Objects . . . . . . . . . . . . . . . . . . . . . .
. 320Generic Types Differ Based on Their Type Arguments . . . . .
320How Generics Improve Type Safety . . . . . . . . . . . . . . . .
. . . . . 320A Generic Class with Two Type Parameters . . . . . . .
. . . . . . . . . . . . . 322The General Form of a Generic Class .
. . . . . . . . . . . . . . . . . . . . . . . . . 324Bounded Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 324Using Wildcard Arguments . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 327Bounded
Wildcards . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 329Creating a Generic Method . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 334Generic Constructors
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
336Generic Interfaces . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 337Raw Types and Legacy
Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 339Generic Class Hierarchies . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 342Using a Generic Superclass
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342A
Generic Subclass . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 344Run-Time Type ComparisonsWithin a Generic
Hierarchy . . . 345Casting . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 348Overriding
Methods in a Generic Class . . . . . . . . . . . . . . . . . .
348Erasure . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 349Bridge Methods .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 351Ambiguity Errors . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 353Some Generic
Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 354Type Parameters Cant Be Instantiated . . . . . .
. . . . . . . . . . . . . 354Restrictions on Static Members . . . .
. . . . . . . . . . . . . . . . . . . . . 354Generic Array
Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 355Generic Exception Restriction . . . . . . . . . . . . . . .
. . . . . . . . . . . 356Final Thoughts on Generics . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 356
14. xiv J a v a : T h e C o m p l e t e R e f e r e n c ePart
II The Java Library15 String Handling . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359The
String Constructors . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 359String Length . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
362Special String Operations . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 362String Literals . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
362String Concatenation . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 362String Concatenation with Other Data
Types . . . . . . . . . . . . . 363String Conversion and toString(
) . . . . . . . . . . . . . . . . . . . . . . . 364Character
Extraction . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 365charAt( ) . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
365getChars( ) . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 365getBytes( ) . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
366toCharArray( ) . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 366String Comparison . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
366equals( ) and equalsIgnoreCase( ) . . . . . . . . . . . . . . .
. . . . . . . . 366regionMatches( ) . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 367startsWith( ) and
endsWith( ) . . . . . . . . . . . . . . . . . . . . . . . . . . .
368equals( ) Versus == . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 368compareTo( ) . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
369Searching Strings . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 370Modifying a String . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 372substring( ) . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 372concat( ) . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 373replace( ) . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 373trim( ) . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 373Data Conversion Using valueOf( ) . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 374Changing the Case of
Characters Within a String . . . . . . . . . . . . . . . .
375Additional String Methods . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 376StringBuffer . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 377StringBuffer Constructors . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 377length( ) and capacity( ) . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
378ensureCapacity( ) . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 378setLength( ) . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
378charAt( ) and setCharAt( ) . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 379getChars( ) . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 379append(
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 380insert( ) . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
381reverse( ) . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 381delete( ) and deleteCharAt( )
. . . . . . . . . . . . . . . . . . . . . . . . . . . 382replace( )
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 382substring( ) . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
383Additional StringBuffer Methods . . . . . . . . . . . . . . . .
. . . . . . . 383StringBuilder . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
15. C o n t e n t s xv16 Exploring java.lang . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
385Primitive Type Wrappers . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 386Number . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
386Double and Float . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 386Byte, Short, Integer, and Long . . . .
. . . . . . . . . . . . . . . . . . . . . . 390Character . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 398Recent Additions to Character for Unicode CodePoint
Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 401Boolean . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 402Void . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 403Process . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 403Runtime . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
404Memory Management . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 405Executing Other Programs . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 406ProcessBuilder . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 407System . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 409Using
currentTimeMillis( ) to Time Program Execution . . . . . 410Using
arraycopy( ) . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 411Environment Properties . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 412Object . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 412Using clone( ) and the Cloneable Interface .
. . . . . . . . . . . . . . . . . . . . . 413Class . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 415ClassLoader . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
418Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 418Transcendental
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 418Exponential Functions . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 419Rounding Functions . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 419Miscellaneous
Math Methods . . . . . . . . . . . . . . . . . . . . . . . . . . .
420StrictMath . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 422Compiler . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 422Thread, ThreadGroup, and Runnable . . . . .
. . . . . . . . . . . . . . . . . . . . . 422The Runnable Interface
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
422Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 422ThreadGroup . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
424ThreadLocal and InheritableThreadLocal . . . . . . . . . . . . .
. . . . . . . . . 429Package . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
429RuntimePermission . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 431Throwable . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 431SecurityManager . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
431StackTraceElement . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 431Enum . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 432The CharSequence Interface . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 433The Comparable
Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 433The Appendable Interface . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 434
16. xvi J a v a : T h e C o m p l e t e R e f e r e n c eThe
Iterable Interface . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 434The Readable Interface . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
434The java.lang Subpackages . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 435java.lang.annotation . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
435java.lang.instrument . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 435java.lang.management . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 435java.lang.ref . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 435java.lang.reflect . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 43617 java.util Part 1:
The Collections Framework . . . . . . . . . . . . . . . . . . .
437Collections Overview . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 438Recent Changes to Collections
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
439Generics Fundamentally Change the CollectionsFramework . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 439Autoboxing Facilitates the Use of Primitive Types . . . . . .
. . . 439The For-Each Style for Loop . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 440The Collection Interfaces . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
440The Collection Interface . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 441The List Interface . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 441The Set
Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 443The SortedSet Interface . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 444The NavigableSet
Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
444The Queue Interface . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 445The Deque Interface . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 446The
Collection Classes . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 448The ArrayList Class . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 448The
LinkedList Class . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 451The HashSet Class . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 453The LinkedHashSet
Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
454The TreeSet Class . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 455The PriorityQueue Class . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 456The ArrayDeque
Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 457The EnumSet Class . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 458Accessing a Collection via an
Iterator . . . . . . . . . . . . . . . . . . . . . . . . . .
458Using an Iterator . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 459The For-Each Alternative to
Iterators . . . . . . . . . . . . . . . . . . . . 461Storing
User-Defined Classes in Collections . . . . . . . . . . . . . . . .
. . . . 462The RandomAccess Interface . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 463Working with Maps . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 464The Map Interfaces . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 464The NavigableMap Interface . . . .
. . . . . . . . . . . . . . . . . . . . . . . 466The Map Classes .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 468Comparators . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 472Using a
Comparator . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 473The Collection Algorithms . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 475
17. C o n t e n t s xviiArrays . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 480Why Generic Collections? . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 484The Legacy Classes and
Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . .
487The Enumeration Interface . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 487Vector . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 487Stack .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 491Dictionary . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
493Hashtable . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 494Properties . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
497Using store( ) and load( ) . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 500Parting Thoughts on Collections . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 50118 java.util
Part 2: More Utility Classes . . . . . . . . . . . . . . . . . . .
. . . . . . . 503StringTokenizer . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 503BitSet . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 505Date . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 507Calendar . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
509GregorianCalendar . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 512TimeZone . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 513SimpleTimeZone . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 514Locale . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 515Random . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 516Observable . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 518The Observer
Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 519An Observer Example . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 519Timer and TimerTask . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
522Currency . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 524Formatter . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 525The Formatter Constructors . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 526The Formatter Methods .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
526Formatting Basics . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 526Formatting Strings and Characters .
. . . . . . . . . . . . . . . . . . . . . 529Formatting Numbers . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
529Formatting Time and Date . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 530The %n and %% Specifiers . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 532Specifying a Minimum Field
Width . . . . . . . . . . . . . . . . . . . . . 533Specifying
Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 534Using the Format Flags . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 535Justifying Output . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
535The Space, +, 0, and ( Flags . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 536The Comma Flag . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 537The # Flag . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 537The Uppercase Option . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 537Using an Argument Index . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 538The Java
printf( ) Connection . . . . . . . . . . . . . . . . . . . . . . .
. . . . 539
18. xviii J a v a : T h e C o m p l e t e R e f e r e n c
eScanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 540The Scanner
Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 540Scanning Basics . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 541Some Scanner Examples . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 544Setting
Delimiters . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 547Other Scanner Features . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 548The ResourceBundle,
ListResourceBundle,and PropertyResourceBundle Classes . . . . . . .
. . . . . . . . . . . . . . . . 549Miscellaneous Utility Classes
and Interfaces . . . . . . . . . . . . . . . . . . . . 553The
java.util Subpackages . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 554java.util.concurrent,
java.util.concurrent.atomic, andjava.util.concurrent.locks . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 554java.util.jar
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 554java.util.logging . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 554java.util.prefs
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 554java.util.regex . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 554java.util.spi . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 554java.util.zip . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 55419 Input/Output:
Exploring java.io . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 555The Java I/O Classes and Interfaces . . . . . . . . .
. . . . . . . . . . . . . . . . . . 555File . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 556Directories . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 559Using
FilenameFilter . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 560The listFiles( ) Alternative . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 561Creating Directories . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
561The Closeable and Flushable Interfaces . . . . . . . . . . . . .
. . . . . . . . . . . 561The Stream Classes . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562The
Byte Streams . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 562InputStream . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
562OutputStream . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 562FileInputStream . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
564FileOutputStream . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 565ByteArrayInputStream . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
567ByteArrayOutputStream . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 568Filtered Byte Streams . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 569Buffered Byte
Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 569SequenceInputStream . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 573PrintStream . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
574DataOutputStream and DataInputStream . . . . . . . . . . . . . .
. . 576RandomAccessFile . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 578The Character Streams . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
578Reader . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 579Writer . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 579FileReader . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 579FileWriter . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
579
19. C o n t e n t s xixCharArrayReader . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
582CharArrayWriter . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 582BufferedReader . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
583BufferedWriter . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 585PushbackReader . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
585PrintWriter . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 586The Console Class . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 587Using Stream I/O . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 589Improving wc( ) Using
a StreamTokenizer . . . . . . . . . . . . . . . . 590Serialization
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 592Serializable . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
593Externalizable . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 593ObjectOutput . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
593ObjectOutputStream . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 593ObjectInput . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
595ObjectInputStream . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 595A Serialization Example . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 595Stream Benefits
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 59820 Networking . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
599Networking Basics . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 599The Networking Classes and
Interfaces . . . . . . . . . . . . . . . . . . . . . . . .
600InetAddress . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 601Factory Methods . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 601Instance Methods . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 602Inet4Address and Inet6Address . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603TCP/IP
Client Sockets . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 603URL . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 605URLConnection . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 607HttpURLConnection
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 610The URI Class . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 612Cookies .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 612TCP/IP Server Sockets . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
612Datagrams . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 613DatagramSocket . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 613DatagramPacket . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 614A Datagram Example . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 61521 The Applet
Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 617Two Types of Applets . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617Applet
Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 617The Applet Class . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
618Applet Architecture . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 620An Applet Skeleton . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 621Applet Initialization and Termination . . . . . . . . . .
. . . . . . . . . . 622Overriding update( ) . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 623
20. xx J a v a : T h e C o m p l e t e R e f e r e n c eSimple
Applet Display Methods . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 623Requesting Repainting . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 625A Simple
Banner Applet . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 626Using the Status Window . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 628The HTML APPLET Tag . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 629Passing Parameters to Applets . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 630Improving the Banner Applet . .
. . . . . . . . . . . . . . . . . . . . . . . . 631getDocumentBase(
) and getCodeBase( ) . . . . . . . . . . . . . . . . . . . . . . .
633AppletContext and showDocument( ) . . . . . . . . . . . . . . .
. . . . . . . . . . 634The AudioClip Interface . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 635The
AppletStub Interface . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 635Outputting to the Console . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63622
Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 637Two Event Handling
Mechanisms . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 637The Delegation Event Model . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 638Events . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
638Event Sources . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 638Event Listeners . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
639Event Classes . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 639The ActionEvent Class
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
640The AdjustmentEvent Class . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 641The ComponentEvent Class . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 642The ContainerEvent Class . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 642The
FocusEvent Class . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 643The InputEvent Class . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 643The ItemEvent Class . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
644The KeyEvent Class . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 645The MouseEvent Class . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 646The
MouseWheelEvent Class . . . . . . . . . . . . . . . . . . . . . . .
. . . . 647The TextEvent Class . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 648The WindowEvent Class . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 648Sources of
Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 649Event Listener Interfaces . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
650The ActionListener Interface . . . . . . . . . . . . . . . . . .
. . . . . . . . . 650The AdjustmentListener Interface . . . . . . .
. . . . . . . . . . . . . . . . 651The ComponentListener Interface
. . . . . . . . . . . . . . . . . . . . . . . 651The
ContainerListener Interface . . . . . . . . . . . . . . . . . . . .
. . . . . 651The FocusListener Interface . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 651The ItemListener Interface . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 651The
KeyListener Interface . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 651The MouseListener Interface . . . . . . . . . . .
. . . . . . . . . . . . . . . . 652The MouseMotionListener
Interface . . . . . . . . . . . . . . . . . . . . . 652The
MouseWheelListener Interface . . . . . . . . . . . . . . . . . . .
. . . 652The TextListener Interface . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 652The WindowFocusListener Interface .
. . . . . . . . . . . . . . . . . . . . 652
21. C o n t e n t s xxiThe WindowListener Interface . . . . . .
. . . . . . . . . . . . . . . . . . . . 653Using the Delegation
Event Model . . . . . . . . . . . . . . . . . . . . . . . . . . . .
653Handling Mouse Events . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 653Handling Keyboard Events . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 656Adapter Classes . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 659Inner Classes . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 660Anonymous
Inner Classes . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 66223 Introducing the AWT: Working with Windows, Graphics,and
Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 663AWT Classes . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 664Window Fundamentals . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 666Component . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 666Container . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 666Panel . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 667Window . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 667Frame . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 667Canvas . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 667Working with Frame
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 667Setting the Windows Dimensions . . . . . . . . . . . . . . . .
. . . . . . . 668Hiding and Showing a Window . . . . . . . . . . .
. . . . . . . . . . . . . . 668Setting a Windows Title . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 668Closing a
Frame Window . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 668Creating a Frame Window in an Applet . . . . . . . . . . .
. . . . . . . . . . . . . 668Handling Events in a Frame Window . .
. . . . . . . . . . . . . . . . . . 670Creating a Windowed Program
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
674Displaying Information Within a Window . . . . . . . . . . . . .
. . . . . . . . . 676Working with Graphics . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 676Drawing
Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 677Drawing Rectangles . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 677Drawing Ellipses and
Circles . . . . . . . . . . . . . . . . . . . . . . . . . . .
678Drawing Arcs . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 679Drawing Polygons . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 680Sizing
Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 681Working with Color . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 682Color
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 683Setting the Current Graphics Color . . . . . .
. . . . . . . . . . . . . . . . 684A Color Demonstration Applet . .
. . . . . . . . . . . . . . . . . . . . . . . 684Setting the Paint
Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 685Working with Fonts . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 686Determining
the Available Fonts . . . . . . . . . . . . . . . . . . . . . . . .
687Creating and Selecting a Font . . . . . . . . . . . . . . . . .
. . . . . . . . . . 689Obtaining Font Information . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 690Managing Text Output Using
FontMetrics . . . . . . . . . . . . . . . . . . . . . .
691Displaying Multiple Lines of Text . . . . . . . . . . . . . . .
. . . . . . . . 693
22. xxii J a v a : T h e C o m p l e t e R e f e r e n c
eCentering Text . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 694Multiline Text Alignment . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 69524 Using AWT
Controls, Layout Managers, and Menus . . . . . . . . . . . .
701Control Fundamentals . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 701Adding and Removing Controls .
. . . . . . . . . . . . . . . . . . . . . . . 702Responding to
Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 702The HeadlessException . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 702Labels . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 702Using Buttons . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 704Handling
Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 704Applying Check Boxes . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 707Handling Check
Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 707CheckboxGroup . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 709Choice Controls . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 711Handling Choice Lists . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 711Using Lists . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 713Handling Lists . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 714Managing Scroll
Bars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 716Handling Scroll Bars . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 717Using a TextField . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . 719Handling a TextField . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 720Using a TextArea . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 721Understanding Layout Managers . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 723FlowLayout . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
724BorderLayout . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 725Using Insets . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
727GridLayout . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 728CardLayout . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
730GridBagLayout . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 732Menu Bars and Menus . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
737Dialog Boxes . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 742FileDialog . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 747Handling Events by Extending AWT Components .
. . . . . . . . . . . . . 748Extending Button . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 749Extending
Checkbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 750Extending a Check Box Group . . . . . . . . . . . . .
. . . . . . . . . . . . . 751Extending Choice . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 752Extending
List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 752Extending Scrollbar . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 75325 Images . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 755File Formats . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 755Image Fundamentals: Creating, Loading, and Displaying . . . .
. . . . 756Creating an Image Object . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 756
23. C o n t e n t s xxiiiLoading an Image . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 756Displaying
an Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 757ImageObserver . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 758Double
Buffering . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 759MediaTracker . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
762ImageProducer . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 765MemoryImageSource . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
766ImageConsumer . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 767PixelGrabber . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
767ImageFilter . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 770CropImageFilter . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 770RGBImageFilter . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 772Cell Animation . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 783Additional Imaging Classes . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 78626 The Concurrency Utilities . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
787The Concurrent API Packages . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 788java.util.concurrent . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
788java.util.concurrent.atomic . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 789java.util.concurrent.locks . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 789Using
Synchronization Objects . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 789Semaphore . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 789CountDownLatch
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 795CyclicBarrier . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 796Exchanger . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 799Using an Executor . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 801A Simple Executor
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . .
802Using Callable and Future . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 804The TimeUnit Enumeration . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 806The Concurrent
Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 808Locks . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
808Atomic Operations . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 811The Concurrency Utilities
Versus Javas Traditional Approach . . . . 81227 NIO, Regular
Expressions, and Other Packages . . . . . . . . . . . . . . . .
813The Core Java API Packages . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 813NIO . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 815NIO Fundamentals . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 815Charsets and Selectors . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
818Using the NIO System . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 819Is NIO the Future of I/O Handling? . . . .
. . . . . . . . . . . . . . . . . 825Regular Expression Processing
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
825Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 825Matcher . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 826Regular Expression Syntax . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 827Demonstrating Pattern Matching . . . . . .
. . . . . . . . . . . . . . . . . 827
24. xxiv J a v a : T h e C o m p l e t e R e f e r e n c eTwo
Pattern-Matching Options . . . . . . . . . . . . . . . . . . . . .
. . . . 833Exploring Regular Expressions . . . . . . . . . . . . .
. . . . . . . . . . . . 833Reflection . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 833Remote Method Invocation (RMI) . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 837A Simple Client/Server Application
Using RMI . . . . . . . . . . . 837Text Formatting . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 840DateFormat Class . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 840SimpleDateFormat Class . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 842Part III
Software Development Using Java28 Java Beans . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 847What Is a Java Bean? . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 847Advantages of Java
Beans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 848Introspection . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 848Design
Patterns for Properties . . . . . . . . . . . . . . . . . . . . . .
. . . . 848Design Patterns for Events . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 849Methods and Design Patterns . . . .
. . . . . . . . . . . . . . . . . . . . . . 850Using the BeanInfo
Interface . . . . . . . . . . . . . . . . . . . . . . . . . . .
850Bound and Constrained Properties . . . . . . . . . . . . . . . .
. . . . . . . . . . . . 850Persistence . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 851Customizers . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 851The Java Beans API .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 851Introspector . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 853PropertyDescriptor .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 854EventSetDescriptor . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 854MethodDescriptor . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 854A Bean
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 85429 Introducing Swing . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
859The Origins of Swing . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 859Swing Is Built on the AWT .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
860Two Key Swing Features . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 860Swing Components Are Lightweight
. . . . . . . . . . . . . . . . . . . . 860Swing Supports a
Pluggable Look and Feel . . . . . . . . . . . . . . . 860The MVC
Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 861Components and Containers . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 862Components . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . 862Containers . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 863The Top-Level
Container Panes . . . . . . . . . . . . . . . . . . . . . . . . .
863The Swing Packages . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 863A Simple Swing Application .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
864Event Handling . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 868Create a Swing Applet . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . 871Painting in Swing . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 873
25. C o n t e n t s xxvPainting Fundamentals . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 874Compute the
Paintable Area . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 875A Paint Example . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 87530 Exploring Swing . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 879JLabel and ImageIcon . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 879JTextField . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 881The Swing Buttons . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 883JButton .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . 883JToggleButton . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 885Check Boxes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 887Radio Buttons . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . 889JTabbedPane . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 891JScrollPane . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
893JList . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 895JComboBox .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 898Trees . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 900JTable . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
904Continuing Your Exploration of Swing . . . . . . . . . . . . . .
. . . . . . . . . . 90631 Servlets . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. 907Background . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . 907The Life Cycle of a
Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 908Using Tomcat for Servlet Development . . . . . . . .
. . . . . . . . . . . . . . . . 908A Simple Servlet . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 910Create and Compile the Servlet Source Code . . . . . . . . .
. . . . 910Start Tomcat . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 911Start a Web Browser and
Request the Servlet . . . . . . . . . . . . . 911The Servlet API .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . 911The javax.servlet Package . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 911The
Servlet Interface . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . 912The ServletConfig Interface . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 912The ServletContext
Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . .
912The ServletRequest Interface . . . . . . . . . . . . . . . . . .
. . . . . . . . . 913The ServletResponse Interface . . . . . . . .
. . . . . . . . . . . . . . . . . . 913The GenericServlet Class . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914The
ServletInputStream Class . . . . . . . . . . . . . . . . . . . . .
. . . . . 915The ServletOutputStream Class . . . . . . . . . . . .
. . . . . . . . . . . . . 915The Servlet Exception Classes . . . .
. . . . . . . . . . . . . . . . . . . . . . 915Reading Servlet
Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 915The javax.servlet.http Package . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . 917The HttpServletRequest
Interface . . . . . . . . . . . . . . . . . . . . . . . 917The
HttpServletResponse Interface . . . . . . . . . . . . . . . . . . .
. . . 917The HttpSession Interface . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 917The HttpSessionBindingListener
Interface . . . . . . . . . . . . . . . . 919The Cookie Class . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
919
26. xxvi J a v a : T h e C o m p l e t e R e f e r e n c eThe
HttpServlet Class . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 921The HttpSessionEvent Class . . . . . . . . . . .
. . . . . . . . . . . . . . . . . 921The HttpSessionBindingEvent
Class . . . . . . . . . . . . . . . . . . . . . 922Handling HTTP
Requests and Responses . . . . . . . . . . . . . . . . . . . . . .
922Handling HTTP GET Requests . . . . . . . . . . . . . . . . . . .
. . . . . . . 922Handling HTTP POST Requests . . . . . . . . . . .
. . . . . . . . . . . . . 924Using Cookies . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
925Session Tracking . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 927Part IV Applying Java32
Financial Applets and Servlets . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . 931Finding the Payments for a Loan . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . 932The RegPay
Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . 935The init( ) Method . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . 936The makeGUI( ) Method .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936The
actionPerformed( ) Method . . . . . . . . . . . . . . . . . . . . .
. . . . 938The compute( ) Method . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 939Finding the Future Value of an
Investment . . . . . . . . . . . . . . . . . . . . . 940Finding the
Initial Investment Required to Achieve a Future Value . . .
943Finding the Initial Investment Needed for a Desired Annuity . .
. . . 947Finding the Maximum Annuity for a Given Investment . . . .
. . . . . . 951Finding the Remaining Balance on a Loan . . . . . .
. . . . . . . . . . . . . . . . 955Creating Financial Servlets . .
.
LOAD MORE