herbert schildt__java_the_complete_reference__sev_book_fi.org_

1057

Upload: zx25-zx25

Post on 08-Aug-2015

110 views

Category:

Engineering


3 download

TRANSCRIPT

  1. 1. Java:The Complete Reference,Seventh Edition
  2. 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. 3. Java:The Complete Reference,Seventh EditionHerbert SchildtNew York Chicago San FranciscoLisbon London Madrid Mexico CityMilan New Delhi San JuanSeoul Singapore Sydney Toronto
  4. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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 . . .