(This page has no text content)
Java™: The Complete Reference, Seventh Edition
About the Author Herbert Schildt is a leading authority on the Java, C, C++, and C# languages, and is a master Windows programmer. His programming books have sold more than 3.5 million copies worldwide and have been translated into all major foreign languages. He is the author of the best-selling The Art of Java, Java: A Beginner’s Guide, and Swing: A Beginner’s Guide. Among his other bestsellers are C++: The Complete Reference, C++: A Beginner’s Guide, C#: The Complete Reference, and C#: A Beginner’s Guide. Schildt holds both graduate and undergraduate degrees from the University of Illinois. He can be reached at his consulting office at (217) 586-4683. His Web site is www.HerbSchildt.com.
Java™: The Complete Reference, Seventh Edition Herbert Schildt New York Chicago San Francisco Lisbon London Madrid Mexico City Milan New Delhi San Juan Seoul Singapore Sydney Toronto
Copyright © 2007 by The McGraw-Hill Companies. All rights reserved. Except as permitted under the United States Copyright Act of 1976, no part of this publication may be reproduced or distributed in any form or by any means, or stored in a database or retrieval system, without the prior written permission of the publisher. ISBN: 978-0-07-163177-8 MHID: 0-07-163177-1 The 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. Where such 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 training programs. To contact a representative please e-mail us at bulksales@mcgraw-hill.com. Information has been obtained by McGraw-Hill from sources believed to be reliable. However, because of the possibility of human or mechanical error by our sources, McGraw-Hill, or others, McGraw-Hill does not guarantee the accuracy, adequacy, or completeness of any information and is not responsible for any errors or omissions or the results obtained from the use of such information. TERMS OF USE This is a copyrighted work and The McGraw-Hill Companies, Inc. (“McGrawHill”) and its licensors reserve all rights in and to the work. Use of this work is subject to these terms. Except as permitted under the Copyright Act of 1976 and the right to store and retrieve one copy of the work, you may not decompile, disassemble, reverse engineer, reproduce, modify, create derivative works based upon, transmit, distribute, disseminate, sell, publish or sublicense the work or any part of it without McGraw-Hill’s prior consent. You may use the work for your own noncommercial and personal use; any other use of the work is strictly prohibited. Your right to use the work may be terminated if you fail to comply with these terms. THE WORK IS PROVIDED “AS IS.” McGRAW-HILL AND ITS LICENSORS MAKE NO GUARANTEES OR WARRANTIES AS TO THE ACCURACY, ADEQUACY OR COMPLETENESS OF OR RESULTS TO BE OBTAINED FROM USING THE WORK, INCLUDING ANY INFORMATION THAT CAN BE ACCESSED THROUGH THE WORK VIA HYPERLINK OR OTHERWISE, AND EXPRESSLY DISCLAIM ANY WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. McGraw-Hill and its licensors do not warrant or guarantee that the functions contained in the work will meet your requirements or that its operation will be uninterrupted or error free. Neither McGraw-Hill nor its licensors shall be liable to you or anyone else for any inaccuracy, error or omission, regardless of cause, in the work or for any damages resulting therefrom. McGraw-Hill has no responsibility for the content of any information accessed through the work. Under no circumstances shall McGraw-Hill and/or its licensors be liable for any indirect, incidental, special, punitive, consequential or similar damages that result from the use of or inability to use the work, even if any of them has been advised of the possibility of such damages. This limitation of liability shall apply to any claim or cause whatsoever whether such claim or cause arises in contract, tort or otherwise.
Contents at a Glance Part I The Java Language 1 The History and Evolution of Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2 An Overview of Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3 Data Types, Variables, and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5 Control Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6 Introducing Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 7 A Closer Look at Methods and Classes . . . . . . . . . . . . . . . . . . . . . . . . 125 8 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9 Packages and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 10 Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 11 Multithreaded Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 12 Enumerations, Autoboxing, and Annotations (Metadata) . . . . . . . . . 255 13 I/O, Applets, and Other Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 14 Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Part II The Java Library 15 String Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 16 Exploring java.lang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 17 java.util Part 1: The Collections Framework . . . . . . . . . . . . . . . . . . . . 437 18 java.util Part 2: More Utility Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 19 Input/Output: Exploring java.io . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 20 Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 21 The Applet Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 22 Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637 23 Introducing the AWT: Working with Windows, Graphics, and Text . . 663 24 Using AWT Controls, Layout Managers, and Menus . . . . . . . . . . . . 701 25 Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755 26 The Concurrency Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787 27 NIO, Regular Expressions, and Other Packages . . . . . . . . . . . . . . . . . 813 v
Part III Software Development Using Java 28 Java Beans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847 29 Introducing Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859 30 Exploring Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879 31 Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907 Part IV Applying Java 32 Financial Applets and Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931 33 Creating a Download Manager in Java . . . . . . . . . . . . . . . . . . . . . . . . . 965 A Using Java’s Documentation Comments . . . . . . . . . . . . . . . . . . . . . . . 991 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997 v i J a v a : T h e C o m p l e t e R e f e r e n c e
Contents Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix Part I The Java Language 1 The History and Evolution of Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Java’s Lineage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 The Birth of Modern Programming: C . . . . . . . . . . . . . . . . . . . 4 C++: The Next Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 The Stage Is Set for Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 The Creation of Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 The C# Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 How Java Changed the Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Java Applets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Portability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Java’s Magic: The Bytecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Servlets: Java on the Server Side . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 The Java Buzzwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Object-Oriented . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Robust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Multithreaded . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Architecture-Neutral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Interpreted and High Performance . . . . . . . . . . . . . . . . . . . . . . 12 Distributed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Dynamic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 The Evolution of Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Java SE 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 A Culture of Innovation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2 An Overview of Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Object-Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Two Paradigms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 The Three OOP Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 A First Simple Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Entering the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Compiling the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 A Closer Look at the First Sample Program . . . . . . . . . . . . . . . 22 v i i
A Second Short Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Two Control Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 The if Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 The for Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Using Blocks of Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Lexical Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Whitespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Separators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 The Java Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 The Java Class Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3 Data Types, Variables, and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Java Is a Strongly Typed Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 The Primitive Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 short . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Floating-Point Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 float . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Booleans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 A Closer Look at Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Integer Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Floating-Point Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Boolean Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Character Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 String Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Declaring a Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Dynamic Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 The Scope and Lifetime of Variables . . . . . . . . . . . . . . . . . . . . . 42 Type Conversion and Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Java’s Automatic Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Casting Incompatible Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Automatic Type Promotion in Expressions . . . . . . . . . . . . . . . . . . . . . 47 The Type Promotion Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 One-Dimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Multidimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Alternative Array Declaration Syntax . . . . . . . . . . . . . . . . . . . . 55 v i i i J a v a : T h e C o m p l e t e R e f e r e n c e
A Few Words About Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 A Note to C/C++ Programmers About Pointers . . . . . . . . . . . . . . . . . 56 4 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 The Basic Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . 58 The Modulus Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Arithmetic Compound Assignment Operators . . . . . . . . . . . . 59 Increment and Decrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 The Bitwise Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 The Bitwise Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . 63 The Left Shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 The Right Shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 The Unsigned Right Shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Bitwise Operator Compound Assignments . . . . . . . . . . . . . . . 69 Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Boolean Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Short-Circuit Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . 72 The Assignment Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 The ? Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Operator Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Using Parentheses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5 Control Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Java’s Selection Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Iteration Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 The For-Each Version of the for Loop . . . . . . . . . . . . . . . . . . . . 92 Nested Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Jump Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Using break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Using continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 6 Introducing Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Class Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 The General Form of a Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 A Simple Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Declaring Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 A Closer Look at new . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Assigning Object Reference Variables . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Introducing Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Adding a Method to the Box Class . . . . . . . . . . . . . . . . . . . . . . 112 C o n t e n t s ix
Returning a Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Adding a Method That Takes Parameters . . . . . . . . . . . . . . . . 115 Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Parameterized Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 The this Keyword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Instance Variable Hiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 The finalize( ) Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 A Stack Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 7 A Closer Look at Methods and Classes . . . . . . . . . . . . . . . . . . . . . . . . 125 Overloading Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Overloading Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Using Objects as Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 A Closer Look at Argument Passing . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Returning Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Introducing Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Understanding static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Introducing final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Arrays Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Introducing Nested and Inner Classes . . . . . . . . . . . . . . . . . . . . . . . . . 145 Exploring the String Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Using Command-Line Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Varargs: Variable-Length Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Overloading Vararg Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Varargs and Ambiguity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 8 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Inheritance Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Member Access and Inheritance . . . . . . . . . . . . . . . . . . . . . . . . 159 A More Practical Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 A Superclass Variable Can Reference a Subclass Object . . . . . 162 Using super . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Using super to Call Superclass Constructors . . . . . . . . . . . . . . 163 A Second Use for super . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Creating a Multilevel Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 When Constructors Are Called . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Method Overriding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Dynamic Method Dispatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Why Overridden Methods? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Applying Method Overriding . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Using Abstract Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Using final with Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Using final to Prevent Overriding . . . . . . . . . . . . . . . . . . . . . . . 180 Using final to Prevent Inheritance . . . . . . . . . . . . . . . . . . . . . . . 181 The Object Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 x J a v a : T h e C o m p l e t e R e f e r e n c e
9 Packages and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Defining a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Finding Packages and CLASSPATH . . . . . . . . . . . . . . . . . . . . . 184 A Short Package Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Access Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 An Access Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Importing Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Defining an Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Implementing Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Nested Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Applying Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Variables in Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Interfaces Can Be Extended . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 10 Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Exception-Handling Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Exception Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Uncaught Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Using try and catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Displaying a Description of an Exception . . . . . . . . . . . . . . . . 209 Multiple catch Clauses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Nested try Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 throws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Java’s Built-in Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Creating Your Own Exception Subclasses . . . . . . . . . . . . . . . . . . . . . . 219 Chained Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Using Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 11 Multithreaded Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 The Java Thread Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Thread Priorities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Messaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 The Thread Class and the Runnable Interface . . . . . . . . . . . . . 226 The Main Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Creating a Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Implementing Runnable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Extending Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Choosing an Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Creating Multiple Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Using isAlive( ) and join( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Thread Priorities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 C o n t e n t s x i
Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Using Synchronized Methods . . . . . . . . . . . . . . . . . . . . . . . . . . 239 The synchronized Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Interthread Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Deadlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Suspending, Resuming, and Stopping Threads . . . . . . . . . . . . . . . . . . 249 Suspending, Resuming, and Stopping Threads Using Java 1.1 and Earlier . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 The Modern Way of Suspending, Resuming, and Stopping Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Using Multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 12 Enumerations, Autoboxing, and Annotations (Metadata) . . . . . . . . 255 Enumerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Enumeration Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 The values( ) and valueOf( ) Methods . . . . . . . . . . . . . . . . . . . . 258 Java Enumerations Are Class Types . . . . . . . . . . . . . . . . . . . . . 259 Enumerations Inherit Enum . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Another Enumeration Example . . . . . . . . . . . . . . . . . . . . . . . . . 263 Type Wrappers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Autoboxing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Autoboxing and Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Autoboxing/Unboxing Occurs in Expressions . . . . . . . . . . . . 268 Autoboxing/Unboxing Boolean and Character Values . . . . . 270 Autoboxing/Unboxing Helps Prevent Errors . . . . . . . . . . . . . 271 A Word of Warning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Annotations (Metadata) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Annotation Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Specifying a Retention Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Obtaining Annotations at Run Time by Use of Reflection . . . 273 The AnnotatedElement Interface . . . . . . . . . . . . . . . . . . . . . . . . 278 Using Default Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Marker Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Single-Member Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 The Built-In Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Some Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 13 I/O, Applets, and Other Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 I/O Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Byte Streams and Character Streams . . . . . . . . . . . . . . . . . . . . . 286 The Predefined Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Reading Console Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Reading Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Reading Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 xi i J a v a : T h e C o m p l e t e R e f e r e n c e
Writing Console Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 The PrintWriter Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Reading and Writing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 Applet Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 The transient and volatile Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 Using instanceof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 strictfp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Native Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Problems with Native Methods . . . . . . . . . . . . . . . . . . . . . . . . . 306 Using assert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Assertion Enabling and Disabling Options . . . . . . . . . . . . . . . 309 Static Import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Invoking Overloaded Constructors Through this( ) . . . . . . . . . . . . . . 312 14 Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 What Are Generics? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 A Simple Generics Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Generics Work Only with Objects . . . . . . . . . . . . . . . . . . . . . . . 320 Generic Types Differ Based on Their Type Arguments . . . . . 320 How Generics Improve Type Safety . . . . . . . . . . . . . . . . . . . . . 320 A Generic Class with Two Type Parameters . . . . . . . . . . . . . . . . . . . . 322 The General Form of a Generic Class . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Bounded Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Using Wildcard Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 Bounded Wildcards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Creating a Generic Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Generic Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Generic Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Raw Types and Legacy Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 Generic Class Hierarchies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 Using a Generic Superclass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 A Generic Subclass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Run-Time Type Comparisons Within a Generic Hierarchy . . . 345 Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 Overriding Methods in a Generic Class . . . . . . . . . . . . . . . . . . 348 Erasure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Bridge Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 Ambiguity Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 Some Generic Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Type Parameters Can’t Be Instantiated . . . . . . . . . . . . . . . . . . . 354 Restrictions on Static Members . . . . . . . . . . . . . . . . . . . . . . . . . 354 Generic Array Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Generic Exception Restriction . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Final Thoughts on Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 C o n t e n t s x i i i
Part II The Java Library 15 String Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 The String Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 String Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Special String Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 String Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 String Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 String Concatenation with Other Data Types . . . . . . . . . . . . . 363 String Conversion and toString( ) . . . . . . . . . . . . . . . . . . . . . . . 364 Character Extraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 charAt( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 getChars( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 getBytes( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 toCharArray( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 String Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 equals( ) and equalsIgnoreCase( ) . . . . . . . . . . . . . . . . . . . . . . . 366 regionMatches( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 startsWith( ) and endsWith( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 equals( ) Versus == . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 compareTo( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Searching Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 Modifying a String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 substring( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 concat( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 replace( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 trim( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Data Conversion Using valueOf( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Changing the Case of Characters Within a String . . . . . . . . . . . . . . . . 375 Additional String Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 StringBuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 StringBuffer Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 length( ) and capacity( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 ensureCapacity( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 setLength( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 charAt( ) and setCharAt( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 getChars( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 append( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 insert( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 reverse( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 delete( ) and deleteCharAt( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 replace( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 substring( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 Additional StringBuffer Methods . . . . . . . . . . . . . . . . . . . . . . . 383 StringBuilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 xiv J a v a : T h e C o m p l e t e R e f e r e n c e
16 Exploring java.lang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Primitive Type Wrappers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Double and Float . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Byte, Short, Integer, and Long . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Character . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Recent Additions to Character for Unicode Code Point Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 Void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 Memory Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Executing Other Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 ProcessBuilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 Using currentTimeMillis( ) to Time Program Execution . . . . . 410 Using arraycopy( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 Environment Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 Using clone( ) and the Cloneable Interface . . . . . . . . . . . . . . . . . . . . . . 413 Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 ClassLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Transcendental Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Exponential Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Rounding Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Miscellaneous Math Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 StrictMath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Thread, ThreadGroup, and Runnable . . . . . . . . . . . . . . . . . . . . . . . . . . 422 The Runnable Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 ThreadGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 ThreadLocal and InheritableThreadLocal . . . . . . . . . . . . . . . . . . . . . . 429 Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 RuntimePermission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 Throwable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 SecurityManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 StackTraceElement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 Enum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 The CharSequence Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 The Comparable Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 The Appendable Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 C o n t e n t s xv
The Iterable Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 The Readable Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 The java.lang Subpackages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 java.lang.annotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 java.lang.instrument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 java.lang.management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 java.lang.ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 java.lang.reflect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 17 java.util Part 1: The Collections Framework . . . . . . . . . . . . . . . . . . . 437 Collections Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 Recent Changes to Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Generics Fundamentally Change the Collections Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 Autoboxing Facilitates the Use of Primitive Types . . . . . . . . . 439 The For-Each Style for Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 The Collection Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 The Collection Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 The List Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 The Set Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 The SortedSet Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 The NavigableSet Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 The Queue Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 The Deque Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 The Collection Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 The ArrayList Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 The LinkedList Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 The HashSet Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 The LinkedHashSet Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 The TreeSet Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 The PriorityQueue Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 The ArrayDeque Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 The EnumSet Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 Accessing a Collection via an Iterator . . . . . . . . . . . . . . . . . . . . . . . . . . 458 Using an Iterator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 The For-Each Alternative to Iterators . . . . . . . . . . . . . . . . . . . . 461 Storing User-Defined Classes in Collections . . . . . . . . . . . . . . . . . . . . 462 The RandomAccess Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 Working with Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 The Map Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 The NavigableMap Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 The Map Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 Comparators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 Using a Comparator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 The Collection Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 xvi J a v a : T h e C o m p l e t e R e f e r e n c e
Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Why Generic Collections? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 The Legacy Classes and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 The Enumeration Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 Hashtable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 Using store( ) and load( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 Parting Thoughts on Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 18 java.util Part 2: More Utility Classes . . . . . . . . . . . . . . . . . . . . . . . . . . 503 StringTokenizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 BitSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 Calendar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 GregorianCalendar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 TimeZone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 SimpleTimeZone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 Locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 Observable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 The Observer Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 An Observer Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 Timer and TimerTask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 Currency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 Formatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525 The Formatter Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 The Formatter Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 Formatting Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 Formatting Strings and Characters . . . . . . . . . . . . . . . . . . . . . . 529 Formatting Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529 Formatting Time and Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 The %n and %% Specifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 Specifying a Minimum Field Width . . . . . . . . . . . . . . . . . . . . . 533 Specifying Precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 Using the Format Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535 Justifying Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535 The Space, +, 0, and ( Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 The Comma Flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 The # Flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 The Uppercase Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 Using an Argument Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 The Java printf( ) Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 C o n t e n t s xv i i
Scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 The Scanner Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 Scanning Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 Some Scanner Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 Setting Delimiters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547 Other Scanner Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 The ResourceBundle, ListResourceBundle, and PropertyResourceBundle Classes . . . . . . . . . . . . . . . . . . . . . . . 549 Miscellaneous Utility Classes and Interfaces . . . . . . . . . . . . . . . . . . . . 553 The java.util Subpackages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 java.util.concurrent, java.util.concurrent.atomic, and java.util.concurrent.locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 java.util.jar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 java.util.logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 java.util.prefs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 java.util.regex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 java.util.spi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 java.util.zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 19 Input/Output: Exploring java.io . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 The Java I/O Classes and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 Using FilenameFilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 The listFiles( ) Alternative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 Creating Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 The Closeable and Flushable Interfaces . . . . . . . . . . . . . . . . . . . . . . . . 561 The Stream Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 The Byte Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 InputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 OutputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 FileInputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 FileOutputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 ByteArrayInputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 ByteArrayOutputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 Filtered Byte Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 Buffered Byte Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 SequenceInputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 PrintStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 DataOutputStream and DataInputStream . . . . . . . . . . . . . . . . 576 RandomAccessFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 The Character Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 Reader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 Writer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 FileReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 FileWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 xvi i i J a v a : T h e C o m p l e t e R e f e r e n c e
CharArrayReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582 CharArrayWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582 BufferedReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 BufferedWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 PushbackReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 PrintWriter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586 The Console Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 Using Stream I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 Improving wc( ) Using a StreamTokenizer . . . . . . . . . . . . . . . . 590 Serialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 Serializable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 Externalizable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 ObjectOutput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 ObjectOutputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 ObjectInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 ObjectInputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 A Serialization Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 Stream Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598 20 Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 Networking Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 The Networking Classes and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . 600 InetAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601 Factory Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601 Instance Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602 Inet4Address and Inet6Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 TCP/IP Client Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605 URLConnection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607 HttpURLConnection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610 The URI Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 TCP/IP Server Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 Datagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 DatagramSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 DatagramPacket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 A Datagram Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615 21 The Applet Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 Two Types of Applets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 Applet Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 The Applet Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618 Applet Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 An Applet Skeleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621 Applet Initialization and Termination . . . . . . . . . . . . . . . . . . . . 622 Overriding update( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623 C o n t e n t s x ix
Comments 0
Loading comments...
Reply to Comment
Edit Comment