the java language specification - titaniumtitanium.cs.berkeley.edu/doc/java-langspec-1.0.pdfthe java...

852
The Java Language Specification

Upload: others

Post on 27-Dec-2019

17 views

Category:

Documents


0 download

TRANSCRIPT

  • The Java™Language Specification

  • The Java™ SeriesLisa Friendly, Series EditorBill Joy, Technical Advisor

    The Java™ Programming LanguageKen Arnold and James GoslingISBN 0-201-63455-4

    The Java™ Language SpecificationJames Gosling, Bill Joy, and Guy SteeleISBN 0-201-63451-1

    The Java™ Virtual Machine SpecificationTim Lindholm and Frank YellinISBN 0-201-63452-X

    The Java™ Application Programming Interface,Volume 1: Core PackagesJames Gosling, Frank Yellin, and the Java TeamISBN 0-201-63453-8

    The Java™ Application Programming Interface,Volume 2: Window Toolkit and AppletsJames Gosling, Frank Yellin, and the Java TeamISBN 0-201-63459-7

    The Java™ Tutorial: Object-Oriented Programming for the InternetMary Campione and Kathy WalrathISBN 0-201-63454-6

    The Java™ Class Libraries: An Annotated ReferencePatrick Chan and Rosanna LeeISBN 0-201-63458-9

    The Java™ FAQ: Frequently Asked QuestionsJonni KanervaISBN 0-201-63456-2

  • The Java™Language Specification

    James GoslingBill Joy

    Guy Steele

    ADDISON-WESLEYAn imprint of Addison Wesley Longman, Inc.

    Reading, Massachusetts ● Harlow, England ● Menlo Park, CaliforniaBerkeley, California ● Don Mills, Ontario ● Sydney

    Bonn ● Amsterdam ● Tokyo ● Mexico City

  • Copyright 1996 Sun Microsystems, Inc.2550 Garcia Avenue, Mountain View, California 94043-1100 U.S.A.All rights reserved.

    RESTRICTED RIGHTS LEGEND: Use, duplication, or disclosure by the United StatesGovernment is subject to the restrictions set forth in DFARS 252.227-7013 (c)(1)(ii) andFAR 52.227-19.

    The release described in this manual may be protected by one or more U.S. patents,foreign patents, or pending applications.

    Sun Microsystems, Inc. (SUN) hereby grants to you a fully-paid, nonexclusive, nontrans-ferable, perpetual, worldwide limited license (without the right to sublicense) under SUN'sintellectual property rights that are essential to practice this specification. This licenseallows and is limited to the creation and distribution of clean room implementations of thisspecification that (i) include a complete implementation of the current version of this spec-ification without subsetting or supersetting, (ii) implement all the interfaces and function-ality of the standard java.* packages as defined by SUN, without subsetting orsupersetting, (iii) do not add any additional packages, classes or methods to the java.*packages (iv) pass all test suites relating to the most recent published version of this spec-ification that are available from SUN six (6) months prior to any beta release of the cleanroom implementation or upgrade thereto, (v) do not derive from SUN source code orbinary materials, and (vi) do not include any SUN binary materials without an appropriateand separate license from SUN.

    Sun, Sun Microsystems, Sun Microsystems Computer Corporation, the Sun logo, the SunMicrosystems Computer Corporation logo, Java, JavaSoft, JavaScript and HotJava aretrademarks or registered trademarks of Sun Microsystems, Inc. UNIX® is a registeredtrademark in the United States and other countries, exclusively licensed through X/OpenCompany, Ltd. Apple and Dylan are trademarks of Apple Computer, Inc. All other prod-uct names mentioned herein are the trademarks of their respective owners.

    THIS PUBLICATION IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANYKIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THEIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULARPURPOSE, OR NON-INFRINGEMENT.

    THIS PUBLICATION COULD INCLUDE TECHNICAL INACCURACIES OR TYPO-GRAPHICAL ERRORS. CHANGES ARE PERIODICALLY ADDED TO THE INFOR-MATION HEREIN; THESE CHANGES WILL BE INCORPORATED IN NEWEDITIONS OF THE PUBLICATION. SUN MICROSYSTEMS, INC. MAY MAKEIMPROVEMENTS AND/OR CHANGES IN THE PRODUCT(S) AND/OR THE PRO-GRAM(S) DESCRIBED IN THIS PUBLICATION AT ANY TIME.

    Credits and permissions for quoted material appear in a separate section on page 823.

    Text printed on recycled and acid-free paper

    ISBN 0-201-63451-11 2 3 4 5 6 7 8 9-MA-99989796First printing, August 1996

  • “When I use a word,” Humpty Dumpty said,in rather a scornful tone, “it means just what Ichoose it to mean—neither more nor less.”

    “The question is,” said Alice, “whether youcan make words mean so many different things.”

    “The question is,” said Humpty Dumpty,“which is to be master—that’s all.”

    —Lewis Carroll, Through the Looking Glass

  • Table of Contents

    Series Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi

    Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii

    1 Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1 Example Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2 Grammars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.1 Context-Free Grammars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2 The Lexical Grammar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3 The Syntactic Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.4 Grammar Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    3 Lexical Structure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.1 Unicode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2 Lexical Translations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.3 Unicode Escapes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.4 Line Terminators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.5 Input Elements and Tokens. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.6 White Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.7 Comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.8 Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.9 Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.10 Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    3.10.1 Integer Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.10.2 Floating-Point Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.10.3 Boolean Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.10.4 Character Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.10.5 String Literals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.10.6 Escape Sequences for Character and String Literals . . . . . . . . . . 263.10.7 The Null Literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    3.11 Separators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.12 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    vii

  • viii

    4 Types, Values, and Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294.1 The Kinds of Types and Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.2 Primitive Types and Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    4.2.1 Integral Types and Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314.2.2 Integer Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314.2.3 Floating-Point Types and Values. . . . . . . . . . . . . . . . . . . . . . . . . . 334.2.4 Floating-Point Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.2.5 The boolean Type and boolean Values. . . . . . . . . . . . . . . . . . . . 36

    4.3 Reference Types and Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.3.1 Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.3.2 The Class Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.3.3 The Class String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414.3.4 When Reference Types Are the Same. . . . . . . . . . . . . . . . . . . . . . 42

    4.4 Where Types Are Used . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.5 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    4.5.1 Variables of Primitive Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.5.2 Variables of Reference Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.5.3 Kinds of Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.5.4 Initial Values of Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464.5.5 Variables Have Types, Objects Have Classes . . . . . . . . . . . . . . . . 47

    5 Conversions and Promotions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515.1 Kinds of Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    5.1.1 Identity Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545.1.2 Widening Primitive Conversions. . . . . . . . . . . . . . . . . . . . . . . . . . 545.1.3 Narrowing Primitive Conversions . . . . . . . . . . . . . . . . . . . . . . . . . 555.1.4 Widening Reference Conversions . . . . . . . . . . . . . . . . . . . . . . . . . 585.1.5 Narrowing Reference Conversions . . . . . . . . . . . . . . . . . . . . . . . . 595.1.6 String Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.1.7 Forbidden Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

    5.2 Assignment Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615.3 Method Invocation Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665.4 String Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.5 Casting Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.6 Numeric Promotions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

    5.6.1 Unary Numeric Promotion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735.6.2 Binary Numeric Promotion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

    6 Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776.1 Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786.2 Names and Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796.3 Scope of a Simple Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

    6.3.1 Hiding Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836.4 Members and Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    6.4.1 The Members of a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856.4.2 The Members of a Class Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

  • 6.4.3 The Members of an Interface Type . . . . . . . . . . . . . . . . . . . . . . . 876.4.4 The Members of an Array Type . . . . . . . . . . . . . . . . . . . . . . . . . . 88

    6.5 Determining the Meaning of a Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896.5.1 Syntactic Classification of a Name According to Context. . . . . . 906.5.2 Reclassification of Contextually Ambiguous Names. . . . . . . . . . 916.5.3 Meaning of Package Names. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    6.5.3.1 Simple Package Names . . . . . . . . . . . . . . . . . . . . . . . 936.5.3.2 Qualified Package Names. . . . . . . . . . . . . . . . . . . . . . 93

    6.5.4 Meaning of Type Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936.5.4.1 Simple Type Names . . . . . . . . . . . . . . . . . . . . . . . . . . 936.5.4.2 Qualified Type Names . . . . . . . . . . . . . . . . . . . . . . . . 94

    6.5.5 Meaning of Expression Names . . . . . . . . . . . . . . . . . . . . . . . . . . 956.5.5.1 Simple Expression Names . . . . . . . . . . . . . . . . . . . . . 956.5.5.2 Qualified Expression Names . . . . . . . . . . . . . . . . . . . 96

    6.5.6 Meaning of Method Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986.5.6.1 Simple Method Names . . . . . . . . . . . . . . . . . . . . . . . . 986.5.6.2 Qualified Method Names . . . . . . . . . . . . . . . . . . . . . . 98

    6.6 Qualified Names and Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996.6.1 Determining Accessibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996.6.2 Details on protected Access . . . . . . . . . . . . . . . . . . . . . . . . . . 1006.6.3 An Example of Access Control . . . . . . . . . . . . . . . . . . . . . . . . . 1006.6.4 Example: Access to public and Non-public Classes . . . . . . . 1016.6.5 Example: Default-Access Fields, Methods, and Constructors. . 1026.6.6 Example: public Fields, Methods, and Constructors . . . . . . . . 1036.6.7 Example: protected Fields, Methods, and Constructors . . . . . 1046.6.8 Example: private Fields, Methods, and Constructors . . . . . . . 105

    6.7 Fully Qualified Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1056.8 Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

    6.8.1 Package Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076.8.2 Class and Interface Type Names . . . . . . . . . . . . . . . . . . . . . . . . 1086.8.3 Method Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086.8.4 Field Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096.8.5 Constant Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096.8.6 Local Variable and Parameter Names . . . . . . . . . . . . . . . . . . . . 110

    7 Packages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1137.1 Package Members. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1147.2 Host Support for Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

    7.2.1 Storing Packages in a File System . . . . . . . . . . . . . . . . . . . . . . . 1157.2.2 Storing Packages in a Database . . . . . . . . . . . . . . . . . . . . . . . . . 117

    7.3 Compilation Units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177.4 Package Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

    7.4.1 Named Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187.4.2 Unnamed Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197.4.3 Scope and Hiding of a Package Name . . . . . . . . . . . . . . . . . . . . 1207.4.4 Access to Members of a Package. . . . . . . . . . . . . . . . . . . . . . . . 120

    7.5 Import Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207.5.1 Single-Type-Import Declaration . . . . . . . . . . . . . . . . . . . . . . . . 121

    ix

  • x

    7.5.2 Type-Import-on-Demand Declaration. . . . . . . . . . . . . . . . . . . . . 1227.5.3 Automatic Imports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227.5.4 A Strange Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

    7.6 Type Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247.7 Unique Package Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

    8 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1278.1 Class Declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

    8.1.1 Scope of a Class Type Name. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308.1.2 Class Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

    8.1.2.1 abstract Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . 1318.1.2.2 final Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

    8.1.3 Superclasses and Subclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338.1.4 Superinterfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358.1.5 Class Body and Member Declarations . . . . . . . . . . . . . . . . . . . . 138

    8.2 Class Members. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388.2.1 Examples of Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

    8.2.1.1 Example: Inheritance with Default Access . . . . . . . . 1408.2.1.2 Inheritance with public and protected. . . . . . . . . 1418.2.1.3 Inheritance with private . . . . . . . . . . . . . . . . . . . . . 1418.2.1.4 Accessing Members of Inaccessible Classes. . . . . . . 142

    8.3 Field Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1438.3.1 Field Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

    8.3.1.1 static Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1458.3.1.2 final Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1468.3.1.3 transient Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . 1478.3.1.4 volatile Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

    8.3.2 Initialization of Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1498.3.2.1 Initializers for Class Variables . . . . . . . . . . . . . . . . . . 1498.3.2.2 Initializers for Instance Variables . . . . . . . . . . . . . . . 150

    8.3.3 Examples of Field Declarations . . . . . . . . . . . . . . . . . . . . . . . . . 1518.3.3.1 Example: Hiding of Class Variables . . . . . . . . . . . . . 1518.3.3.2 Example: Hiding of Instance Variables . . . . . . . . . . . 1528.3.3.3 Example: Multiply Inherited Fields. . . . . . . . . . . . . . 1538.3.3.4 Example: Re-inheritance of Fields . . . . . . . . . . . . . . 154

    8.4 Method Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558.4.1 Formal Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1568.4.2 Method Signature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1578.4.3 Method Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

    8.4.3.1 abstract Methods. . . . . . . . . . . . . . . . . . . . . . . . . . 1588.4.3.2 static Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1608.4.3.3 final Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1608.4.3.4 native Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1618.4.3.5 synchronized Methods. . . . . . . . . . . . . . . . . . . . . . 161

    8.4.4 Method Throws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1638.4.5 Method Body. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1648.4.6 Inheritance, Overriding, and Hiding . . . . . . . . . . . . . . . . . . . . . . 165

    8.4.6.1 Overriding (By Instance Methods) . . . . . . . . . . . . . . 165

  • 8.4.6.2 Hiding (By Class Methods) . . . . . . . . . . . . . . . . . . . 1658.4.6.3 Requirements in Overriding and Hiding . . . . . . . . . 1668.4.6.4 Inheriting Methods with the Same Signature . . . . . . 166

    8.4.7 Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1678.4.8 Examples of Method Declarations . . . . . . . . . . . . . . . . . . . . . . . 168

    8.4.8.1 Example: Overriding . . . . . . . . . . . . . . . . . . . . . . . . 1688.4.8.2 Example: Overloading, Overriding, and Hiding . . . 1688.4.8.3 Example: Incorrect Overriding. . . . . . . . . . . . . . . . . 1698.4.8.4 Example: Overriding versus Hiding . . . . . . . . . . . . . 1708.4.8.5 Example: Invocation of Hidden Class Methods . . . . 1718.4.8.6 Large Example of Overriding. . . . . . . . . . . . . . . . . . 1728.4.8.7 Example: Incorrect Overriding because of Throws . 174

    8.5 Static Initializers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1758.6 Constructor Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

    8.6.1 Formal Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1778.6.2 Constructor Signature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1778.6.3 Constructor Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1778.6.4 Constructor Throws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1788.6.5 Constructor Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1788.6.6 Constructor Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1808.6.7 Default Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1808.6.8 Preventing Instantiation of a Class. . . . . . . . . . . . . . . . . . . . . . . 180

    9 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1839.1 Interface Declarations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

    9.1.1 Scope of an Interface Type Name . . . . . . . . . . . . . . . . . . . . . . . 1849.1.2 Interface Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

    9.1.2.1 abstract Interfaces . . . . . . . . . . . . . . . . . . . . . . . . 1849.1.3 Superinterfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1859.1.4 Interface Body and Member Declarations . . . . . . . . . . . . . . . . . 1859.1.5 Access to Interface Member Names . . . . . . . . . . . . . . . . . . . . . 186

    9.2 Interface Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1869.3 Field (Constant) Declarations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

    9.3.1 Initialization of Fields in Interfaces . . . . . . . . . . . . . . . . . . . . . . 1879.3.2 Examples of Field Declarations . . . . . . . . . . . . . . . . . . . . . . . . . 188

    9.3.2.1 Ambiguous Inherited Fields . . . . . . . . . . . . . . . . . . . 1889.3.2.2 Multiply Inherited Fields . . . . . . . . . . . . . . . . . . . . . 188

    9.4 Abstract Method Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1899.4.1 Inheritance and Overriding . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1899.4.2 Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1909.4.3 Examples of Abstract Method Declarations . . . . . . . . . . . . . . . 190

    9.4.3.1 Example: Overriding . . . . . . . . . . . . . . . . . . . . . . . . 1909.4.3.2 Example: Overloading . . . . . . . . . . . . . . . . . . . . . . . 191

    10 Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19310.1 Array Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19410.2 Array Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

    xi

  • xii

    10.3 Array Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19510.4 Array Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19510.5 Arrays: A Simple Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19610.6 Arrays Initializers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19610.7 Array Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19710.8 Class Objects for Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19910.9 An Array of Characters is Not a String . . . . . . . . . . . . . . . . . . . . . . . . . . 19910.10 Array Store Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

    11 Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20111.1 The Causes of Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20211.2 Compile-Time Checking of Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . 203

    11.2.1 Why Errors are Not Checked . . . . . . . . . . . . . . . . . . . . . . . . . . . 20311.2.2 Why Runtime Exceptions are Not Checked . . . . . . . . . . . . . . . . 203

    11.3 Handling of an Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20411.3.1 Exceptions are Precise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20511.3.2 Handling Asynchronous Exceptions . . . . . . . . . . . . . . . . . . . . . . 205

    11.4 An Example of Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20611.5 The Exception Hierarchy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

    11.5.1 The Classes Exception and RuntimeException . . . . . . . . . . . 20811.5.1.1 Standard Runtime Exceptions . . . . . . . . . . . . . . . . . . 20811.5.1.2 Standard Checked Exceptions . . . . . . . . . . . . . . . . . . 210

    11.5.2 The Class Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21111.5.2.1 Loading and Linkage Errors . . . . . . . . . . . . . . . . . . . 21111.5.2.2 Virtual Machine Errors . . . . . . . . . . . . . . . . . . . . . . . 212

    12 Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21512.1 Virtual Machine Start-Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

    12.1.1 Load the Class Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21612.1.2 Link Test: Verify, Prepare, (Optionally) Resolve . . . . . . . . . . . 21612.1.3 Initialize Test: Execute Initializers . . . . . . . . . . . . . . . . . . . . . . 21712.1.4 Invoke Test.main. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

    12.2 Loading of Classes and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21812.2.1 The Loading Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21912.2.2 Loading: Implications for Code Generation . . . . . . . . . . . . . . . . 219

    12.3 Linking of Classes and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22012.3.1 Verification of the Binary Representation . . . . . . . . . . . . . . . . . . 22012.3.2 Preparation of a Class or Interface Type . . . . . . . . . . . . . . . . . . . 22112.3.3 Resolution of Symbolic References . . . . . . . . . . . . . . . . . . . . . . 22112.3.4 Linking: Implications for Code Generation . . . . . . . . . . . . . . . . 222

    12.4 Initialization of Classes and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . 22312.4.1 When Initialization Occurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22312.4.2 Detailed Initialization Procedure. . . . . . . . . . . . . . . . . . . . . . . . . 22512.4.3 Initialization: Implications for Code Generation . . . . . . . . . . . . 227

    12.5 Creation of New Class Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22812.6 Finalization of Class Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

    12.6.1 Implementing Finalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

  • 12.6.2 Finalizer Invocations are Not Ordered . . . . . . . . . . . . . . . . . . . . 23412.7 Finalization of Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23512.8 Unloading of Classes and Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23512.9 Virtual Machine Exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

    13 Binary Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23713.1 The Form of a Java Binary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23813.2 What Binary Compatibility Is and Is Not. . . . . . . . . . . . . . . . . . . . . . . . . 24013.3 Evolution of Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24213.4 Evolution of Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

    13.4.1 abstract Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24213.4.2 final Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24213.4.3 public Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24313.4.4 Superclasses and Superinterfaces. . . . . . . . . . . . . . . . . . . . . . . . 24313.4.5 Class Body and Member Declarations. . . . . . . . . . . . . . . . . . . . 24513.4.6 Access to Members and Constructors . . . . . . . . . . . . . . . . . . . . 24813.4.7 Field Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24913.4.8 final Fields and Constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25013.4.9 static Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25313.4.10 transient Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25313.4.11 volatile Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25313.4.12 Method and Constructor Declarations . . . . . . . . . . . . . . . . . . . . 25313.4.13 Method and Constructor Parameters . . . . . . . . . . . . . . . . . . . . . 25413.4.14 Method Result Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25413.4.15 abstract Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25413.4.16 final Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25513.4.17 native Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25613.4.18 static Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25613.4.19 synchronized Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25613.4.20 Method and Constructor Throws . . . . . . . . . . . . . . . . . . . . . . . . 25613.4.21 Method and Constructor Body. . . . . . . . . . . . . . . . . . . . . . . . . . 25713.4.22 Method and Constructor Overloading . . . . . . . . . . . . . . . . . . . . 25713.4.23 Method Overriding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25813.4.24 Static Initializers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

    13.5 Evolution of Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25913.5.1 public Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25913.5.2 Superinterfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26013.5.3 The Interface Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26013.5.4 Field Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26013.5.5 Abstract Method Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . 261

    14 Blocks and Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26314.1 Normal and Abrupt Completion of Statements . . . . . . . . . . . . . . . . . . . . 26414.2 Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26514.3 Local Variable Declaration Statements . . . . . . . . . . . . . . . . . . . . . . . . . . 265

    14.3.1 Local Variable Declarators and Types . . . . . . . . . . . . . . . . . . . . 26614.3.2 Scope of Local Variable Declarations . . . . . . . . . . . . . . . . . . . . 267

    xiii

  • xiv

    14.3.3 Hiding of Names by Local Variables . . . . . . . . . . . . . . . . . . . . . 26814.3.4 Execution of Local Variable Declarations. . . . . . . . . . . . . . . . . . 269

    14.4 Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26914.5 The Empty Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27114.6 Labeled Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27114.7 Expression Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27214.8 The if Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

    14.8.1 The if–then Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27314.8.2 The if–then–else Statement . . . . . . . . . . . . . . . . . . . . . . . . . . 273

    14.9 The switch Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27414.10 The while Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

    14.10.1 Abrupt Completion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27814.11 The do Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

    14.11.1 Abrupt Completion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27914.11.2 Example of do statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

    14.12 The for Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28014.12.1 Initialization of for statement. . . . . . . . . . . . . . . . . . . . . . . . . . . 28114.12.2 Iteration of for statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28114.12.3 Abrupt Completion of for statement . . . . . . . . . . . . . . . . . . . . . 282

    14.13 The break Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28314.14 The continue Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28514.15 The return Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28614.16 The throw Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28714.17 The synchronized Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28914.18 The try statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

    14.18.1 Execution of try–catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29114.18.2 Execution of try–catch–finally. . . . . . . . . . . . . . . . . . . . . . . 292

    14.19 Unreachable Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

    15 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30115.1 Evaluation, Denotation, and Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30115.2 Variables as Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30215.3 Type of an Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30215.4 Expressions and Run-Time Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30215.5 Normal and Abrupt Completion of Evaluation . . . . . . . . . . . . . . . . . . . . . 30415.6 Evaluation Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

    15.6.1 Evaluate Left-Hand Operand First . . . . . . . . . . . . . . . . . . . . . . . 30515.6.2 Evaluate Operands before Operation . . . . . . . . . . . . . . . . . . . . . 30715.6.3 Evaluation Respects Parentheses and Precedence. . . . . . . . . . . . 30815.6.4 Argument Lists are Evaluated Left-to-Right. . . . . . . . . . . . . . . . 30915.6.5 Evaluation Order for Other Expressions . . . . . . . . . . . . . . . . . . . 310

    15.7 Primary Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31115.7.1 Literals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31215.7.2 this. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31315.7.3 Parenthesized Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

    15.8 Class Instance Creation Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31415.8.1 Run-time Evaluation of Class Instance Creation Expressions . . 31415.8.2 Example: Evaluation Order and Out-of-Memory Detection. . . . 315

  • 15.9 Array Creation Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31515.9.1 Run-time Evaluation of Array Creation Expressions. . . . . . . . . 31615.9.2 Example: Array Creation Evaluation Order. . . . . . . . . . . . . . . . 31815.9.3 Example: Array Creation and Out-of-Memory Detection . . . . . 319

    15.10 Field Access Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31915.10.1 Field Access Using a Primary . . . . . . . . . . . . . . . . . . . . . . . . . . 32015.10.2 Accessing Superclass Members using super . . . . . . . . . . . . . . 322

    15.11 Method Invocation Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32315.11.1 Compile-Time Step 1: Determine Class or Interface to Search . 32415.11.2 Compile-Time Step 2: Determine Method Signature . . . . . . . . 325

    15.11.2.1 Find Methods that are Applicable and Accessible . . 32515.11.2.2 Choose the Most Specific Method . . . . . . . . . . . . . . 32715.11.2.3 Example: Overloading Ambiguity . . . . . . . . . . . . . . 32715.11.2.4 Example: Return Type Not Considered . . . . . . . . . . 32815.11.2.5 Example: Compile-Time Resolution . . . . . . . . . . . . 329

    15.11.3 Compile-Time Step 3: Is the Chosen Method Appropriate? . . . 33215.11.4 Runtime Evaluation of Method Invocation . . . . . . . . . . . . . . . . 333

    15.11.4.1 Compute Target Reference (If Necessary) . . . . . . . . 33315.11.4.2 Evaluate Arguments . . . . . . . . . . . . . . . . . . . . . . . . . 33415.11.4.3 Check Accessibility of Type and Method. . . . . . . . . 33415.11.4.4 Locate Method to Invoke . . . . . . . . . . . . . . . . . . . . . 33515.11.4.5 Create Frame, Synchronize, Transfer Control . . . . . 33615.11.4.6 Implementation Note: Combining Frames . . . . . . . . 33715.11.4.7 Example: Target Reference and Static Methods. . . . 33715.11.4.8 Example: Evaluation Order . . . . . . . . . . . . . . . . . . . 33815.11.4.9 Example: Overriding . . . . . . . . . . . . . . . . . . . . . . . . 33815.11.4.10 Example: Method Invocation using super. . . . . . . . 340

    15.12 Array Access Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34115.12.1 Runtime Evaluation of Array Access. . . . . . . . . . . . . . . . . . . . . 34115.12.2 Examples: Array Access Evaluation Order . . . . . . . . . . . . . . . . 342

    15.13 Postfix Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34415.13.1 Names. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34415.13.2 Postfix Increment Operator ++ . . . . . . . . . . . . . . . . . . . . . . . . . . 34515.13.3 Postfix Decrement Operator -- . . . . . . . . . . . . . . . . . . . . . . . . . 345

    15.14 Unary Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34615.14.1 Prefix Increment Operator ++. . . . . . . . . . . . . . . . . . . . . . . . . . . 34715.14.2 Prefix Decrement Operator -- . . . . . . . . . . . . . . . . . . . . . . . . . . 34815.14.3 Unary Plus Operator + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34815.14.4 Unary Minus Operator - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34915.14.5 Bitwise Complement Operator ~ . . . . . . . . . . . . . . . . . . . . . . . . 34915.14.6 Logical Complement Operator ! . . . . . . . . . . . . . . . . . . . . . . . . 349

    15.15 Cast Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35015.16 Multiplicative Operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

    15.16.1 Multiplication Operator *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35115.16.2 Division Operator / . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35215.16.3 Remainder Operator % . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

    15.17 Additive Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35515.17.1 String Concatenation Operator + . . . . . . . . . . . . . . . . . . . . . . . . 355

    xv

  • xvi

    15.17.1.1 String Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . 35515.17.1.2 Optimization of String Concatenation . . . . . . . . . . . . 35615.17.1.3 Examples of String Concatenation . . . . . . . . . . . . . . 356

    15.17.2 Additive Operators (+ and -) for Numeric Types . . . . . . . . . . . . 35815.18 Shift Operators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35915.19 Relational Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

    15.19.1 Numerical Comparison Operators =. . . . . . . . . . . 36115.19.2 Type Comparison Operator instanceof . . . . . . . . . . . . . . . . . . 361

    15.20 Equality Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36215.20.1 Numerical Equality Operators == and != . . . . . . . . . . . . . . . . . . 36315.20.2 Boolean Equality Operators == and !=. . . . . . . . . . . . . . . . . . . . 36415.20.3 Reference Equality Operators == and != . . . . . . . . . . . . . . . . . . 364

    15.21 Bitwise and Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36515.21.1 Integer Bitwise Operators &, ^, and | . . . . . . . . . . . . . . . . . . . . . 36515.21.2 Boolean Logical Operators &, ^, and | . . . . . . . . . . . . . . . . . . . . 365

    15.22 Conditional-And Operator && . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36615.23 Conditional-Or Operator ||. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36615.24 Conditional Operator ? : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36715.25 Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369

    15.25.1 Simple Assignment Operator = . . . . . . . . . . . . . . . . . . . . . . . . . . 36915.25.2 Compound Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . 374

    15.26 Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38115.27 Constant Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

    16 Definite Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38316.1 Definite Assignment and Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

    16.1.1 Boolean Constant Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . 38616.1.2 Boolean-valued Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38616.1.3 The Boolean Operator && . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38616.1.4 The Boolean Operator || . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38716.1.5 The Boolean Operator ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38716.1.6 The Boolean Operator & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38716.1.7 The Boolean Operator | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38816.1.8 The Boolean Operator ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38816.1.9 The Boolean Operator == . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38916.1.10 The Boolean Operator != . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38916.1.11 The Boolean Operator ? : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38916.1.12 The Conditional Operator ? :. . . . . . . . . . . . . . . . . . . . . . . . . . . 39016.1.13 Boolean Assignment Expressions . . . . . . . . . . . . . . . . . . . . . . . . 39016.1.14 Other Assignment Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . 39116.1.15 Operators ++ and -- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39216.1.16 Other Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

    16.2 Definite Assignment and Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39316.2.1 Empty Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39316.2.2 Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39316.2.3 Local Variable Declaration Statements . . . . . . . . . . . . . . . . . . . . 39316.2.4 Labeled Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39416.2.5 Expression Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

  • 16.2.6 if Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39416.2.7 switch Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39516.2.8 while Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39516.2.9 do Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39516.2.10 for Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396

    16.2.10.1 Initialization Part . . . . . . . . . . . . . . . . . . . . . . . . . . . 39616.2.10.2 Incrementation Part. . . . . . . . . . . . . . . . . . . . . . . . . . 397

    16.2.11 break, continue, return, and throw Statements . . . . . . . . . . 39716.2.12 synchronized Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39716.2.13 try Statements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

    17 Threads and Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39917.1 Terminology and Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40117.2 Execution Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40317.3 Rules about Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40417.4 Nonatomic Treatment of double and long . . . . . . . . . . . . . . . . . . . . . . . 40517.5 Rules about Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40617.6 Rules about the Interaction of Locks and Variables . . . . . . . . . . . . . . . . . 40717.7 Rules for Volatile Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40717.8 Prescient Store Actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40817.9 Discussion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40817.10 Example: Possible Swap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40917.11 Example: Out-of-Order Writes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41317.12 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41517.13 Locks and Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41517.14 Wait Sets and Notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416

    18 Documentation Comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41918.1 The Text of a Documentation Comment . . . . . . . . . . . . . . . . . . . . . . . . . 41918.2 HTML in a Documentation Comment . . . . . . . . . . . . . . . . . . . . . . . . . . . 42018.3 Summary Sentence and General Description . . . . . . . . . . . . . . . . . . . . . . 42018.4 Tagged Paragraphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

    18.4.1 The @see Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42118.4.2 The @author Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42118.4.3 The @version Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42218.4.4 The @param Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42218.4.5 The @return Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42218.4.6 The @exception Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

    18.5 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

    19 LALR(1) Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43319.1 Grammatical Difficulties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

    19.1.1 Problem #1: Names Too Specific. . . . . . . . . . . . . . . . . . . . . . . . 43319.1.2 Problem #2: Modifiers Too Specific . . . . . . . . . . . . . . . . . . . . . 43519.1.3 Problem #3: Field Declaration versus Method Declaration. . . . 43719.1.4 Problem #4: Array Type versus Array Access . . . . . . . . . . . . . . 438

    xvii

  • xviii

    19.1.5 Problem #5: Cast versus Parenthesized Expression . . . . . . . . . . 43819.2 Productions from §2.3: The Syntactic Grammar. . . . . . . . . . . . . . . . . . . . 44019.3 Productions from §3: Lexical Structure. . . . . . . . . . . . . . . . . . . . . . . . . . . 44019.4 Productions from §4: Types, Values, and Variables. . . . . . . . . . . . . . . . . . 44019.5 Productions from §6: Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44119.6 Productions from §7: Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44219.7 Productions Used Only in the LALR(1) Grammar . . . . . . . . . . . . . . . . . . 44219.8 Productions from §8: Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443

    19.8.1 Productions from §8.1: Class Declaration. . . . . . . . . . . . . . . . . . 44319.8.2 Productions from §8.3: Field Declarations . . . . . . . . . . . . . . . . . 44319.8.3 Productions from §8.4: Method Declarations . . . . . . . . . . . . . . . 44419.8.4 Productions from §8.5: Static Initializers . . . . . . . . . . . . . . . . . . 44419.8.5 Productions from §8.6: Constructor Declarations. . . . . . . . . . . . 445

    19.9 Productions from §9: Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44519.9.1 Productions from §9.1: Interface Declarations . . . . . . . . . . . . . . 445

    19.10 Productions from §10: Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44619.11 Productions from §14: Blocks and Statements . . . . . . . . . . . . . . . . . . . . . 44619.12 Productions from §15: Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

    20 The Package java.lang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45520.1 The Class java.lang.Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45820.2 The Interface java.lang.Cloneable . . . . . . . . . . . . . . . . . . . . . . . . . . . 46520.3 The Class java.lang.Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46620.4 The Class java.lang.Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46920.5 The Class java.lang.Character . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47120.6 The Class java.lang.Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48720.7 The Class java.lang.Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48820.8 The Class java.lang.Long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49520.9 The Class java.lang.Float . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50320.10 The Class java.lang.Double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51020.11 The Class java.lang.Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51720.12 The Class java.lang.String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53120.13 The Class java.lang.StringBuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . 54820.14 The Class java.lang.ClassLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55820.15 The Class java.lang.Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56120.16 The Class java.lang.Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56320.17 The Class java.lang.SecurityManager . . . . . . . . . . . . . . . . . . . . . . . . 56920.18 The Class java.lang.System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57920.19 The Interface java.lang.Runnable . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58620.20 The Class java.lang.Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58720.21 The Class java.lang.ThreadGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60220.22 The Class java.lang.Throwable and its Subclasses . . . . . . . . . . . . . . . 61120.23 The Class

    java.lang.ExceptionInInitializerError614

    21 The Package java.util . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61521.1 The Interface java.util.Enumeration . . . . . . . . . . . . . . . . . . . . . . . . . 617

  • 21.2 The Class java.util.BitSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61821.3 The Class java.util.Date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62221.4 The Class java.util.Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63321.5 The Class java.util.Hashtable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63521.6 The Class java.util.Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63921.7 The Class java.util.Observable . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64321.8 The Interface java.util.Observer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64521.9 The Class java.util.Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64621.10 The Class java.util.StringTokenizer . . . . . . . . . . . . . . . . . . . . . . . 65121.11 The Class java.util.Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65421.12 The Class java.util.Stack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66121.13 The Class java.util.EmptyStackException . . . . . . . . . . . . . . . . . . . 66321.14 The Class java.util.NoSuchElementException . . . . . . . . . . . . . . . . 664

    22 The Package java.io . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66522.1 The Interface java.io.DataInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66722.2 The Interface java.io.DataOutput . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67422.3 The Class java.io.InputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68022.4 The Class java.io.FileInputStream . . . . . . . . . . . . . . . . . . . . . . . . . 68422.5 The Class java.io.PipedInputStream . . . . . . . . . . . . . . . . . . . . . . . . 68722.6 The Class java.io.ByteArrayInputStream . . . . . . . . . . . . . . . . . . . . 68922.7 The Class java.io.StringBufferInputStream . . . . . . . . . . . . . . . . . 69222.8 The Class java.io.SequenceInputStream . . . . . . . . . . . . . . . . . . . . . 69422.9 The Class java.io.FilterInputStream . . . . . . . . . . . . . . . . . . . . . . . 69622.10 The Class java.io.BufferedInputStream . . . . . . . . . . . . . . . . . . . . . 69922.11 The Class java.io.DataInputStream . . . . . . . . . . . . . . . . . . . . . . . . . 70322.12 The Class java.io.LineNumberInputStream . . . . . . . . . . . . . . . . . . . 70722.13 The Class java.io.PushbackInputStream . . . . . . . . . . . . . . . . . . . . . 71022.14 The Class java.io.StreamTokenizer . . . . . . . . . . . . . . . . . . . . . . . . . 71222.15 The Class java.io.OutputStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72022.16 The Class java.io.FileOutputStream . . . . . . . . . . . . . . . . . . . . . . . . 72222.17 The Class java.io.PipedOutputStream . . . . . . . . . . . . . . . . . . . . . . . 72522.18 The Class java.io.ByteArrayOutputStream . . . . . . . . . . . . . . . . . . . 72722.19 The Class java.io.FilterOutputStream . . . . . . . . . . . . . . . . . . . . . . 73022.20 The Class java.io.BufferedOutputStream . . . . . . . . . . . . . . . . . . . . 73222.21 The Class java.io.DataOutputStream . . . . . . . . . . . . . . . . . . . . . . . . 73422.22 The Class java.io.PrintStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73822.23 The Class java.io.RandomAccessFile . . . . . . . . . . . . . . . . . . . . . . . . 74322.24 The Class java.io.File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75222.25 The Interface java.io.FilenameFilter. . . . . . . . . . . . . . . . . . . . . . . . 75922.26 The Class java.io.FileDescriptor . . . . . . . . . . . . . . . . . . . . . . . . . . 76022.27 The Class java.io.IOException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76122.28 The Class java.io.EOFException . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76222.29 The Class java.io.FileNotFoundException . . . . . . . . . . . . . . . . . . . 76322.30 The Class java.io.InterruptedIOException . . . . . . . . . . . . . . . . . . 76422.31 The Class java.io.UTFDataFormatException . . . . . . . . . . . . . . . . . . 765

    xix

  • xx

    Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767

    Credits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823

    Colophon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825

  • Series Foreword

    THE Java Series books provide definitive reference documentation for Java pro-grammers and end users. They are written by members of the Java team and pub-lished under the auspices of JavaSoft, a Sun Microsystems business. The World-Wide-Web allows Java documentation to be made available over the Internet,either by downloading or as hypertext. Nevertheless, the world-wide interest inJava technology led us to write and publish these books to supplement all of thedocumentation at our Web site

    To learn the latest about the Java Platform and Environment or download thelatest Java release, visit our World Wide Web site at http://java.sun.com. Forupdated information about the Java Series, including sample code, errata, and pre-views of forthcoming books, visit http://java.sun.com/Series.

    We would like to thank the Corporate and Professional Publishing Group atAddison-Wesley for their partnership in putting together the Series. Our editorMike Hendrickson and his team have done a superb job of navigating us throughthe world of publishing. Within Sun Microsystems, the support of James Gosling,Jon Kannegaard, and Bill Joy ensured that this series would have the resources itneeded to be successful. In addition to the tremendous effort by individualauthors, many members of the JavaSoft team have contributed behind the scenesto bring the highest level of quality and engineering to the books in the Series. Apersonal note of thanks to my children Christopher and James for putting a posi-tive spin on the many trips to my office during the development of the Series.

    Lisa FriendlySeries Editor

    xxi

  • Preface

    JAVA was originally called Oak, and designed for use in embedded consumer-electronic applications by James Gosling. After several years of experience withthe language, and significant contributions by Ed Frank, Patrick Naughton,Jonathan Payne, and Chris Warth it was retargeted to the Internet, renamed Java,and substantially revised to be the language specified here. The final form of thelanguage was defined by James Gosling, Bill Joy, Guy Steele, Richard Tuck,Frank Yellin, and Arthur van Hoff, with help from Graham Hamilton, Tim Lind-holm and many other friends and colleagues.

    Java is a general-purpose concurrent class-based object-oriented program-ming language, specifically designed to have as few implementation dependenciesas possible. Java allows application developers to write a program once and thenbe able to run it everywhere on the Internet.

    This book attempts a complete specification of the syntax and semantics ofthe Java language and the core packages java.lang, java.io, and java.util ofits Application Programming Interface. We intend that the behavior of every lan-guage construct is specified here, so that all implementations of Java will acceptthe same programs. Except for timing dependencies or other non-determinismsand given sufficient time and sufficient memory space, a Java program shouldcompute the same result on all machines and in all implementations.

    We believe that Java is a mature language, ready for widespread use. Never-theless, we expect some evolution of the language in the years to come. We intendto manage this evolution in a way that is completely compatible with existingapplications. To do this, we intend to make relatively few new versions of the lan-guage, and to distinguish each new version with a different filename extension.Java compilers and systems will be able to support the several versions simultan-nously, with complete compatibility.

    Much research and experimentation with Java is already underway. Weencourage this work, and will continue to cooperate with external groups toexplore improvements to Java. For example, we have already received severalinteresting proposals for parameterized types. In technically difficult areas, nearthe state of the art, this kind of research collaboration is essential.

    xxiii

  • PREFACE

    xxiv

    We acknowledge and thank the many people who have contributed to thisbook through their excellent feedback, assistance and encouragement:

    Particularly thorough, careful, and thoughtful reviews of drafts were providedby Tom Cargill, Peter Deutsch, Paul Hilfinger, Masayuki Ida, David Moon, StevenMuchnick, Charles L. Perkins, Chris Van Wyk, Steve Vinoski, Philip Wadler,Daniel Weinreb, and Kenneth Zadeck. We are very grateful for their extraordinaryvolunteer efforts.

    We are also grateful for reviews, questions, comments, and suggestions fromStephen Adams, Bowen Alpern, Glenn Ammons, Leonid Arbuzov, Kim Bruce,Edwin Chan, David Chase, Pavel Curtis, Drew Dean, William Dietz, David Dill,Patrick Dussud, Ed Felten, John Giannandrea, John Gilmore, Charles Gust,Warren Harris, Lee Hasiuk, Mike Hendrickson, Mark Hill, Urs Hoelzle, RogerHoover, Susan Flynn Hummel, Christopher Jang, Mick Jordan, Mukesh Kacker,Peter Kessler, James Larus, Derek Lieber, Bill McKeeman, Steve Naroff,Evi Nemeth, Robert O’Callahan, Dave Papay, Craig Partridge, Scott Pfeffer,Eric Raymond, Jim Roskind, Jim Russell, William Scherlis, Edith Schonberg,Anthony Scian, Matthew Self, Janice Shepherd, Kathy Stark, Barbara Steele, RobStrom, William Waite, Greg Weeks, and Bob Wilson. (This list was generatedsemi-automatically from our E-mail records. We apologize if we have omittedanyone.)

    The feedback from all these reviewers was invaluable to us in improving thedefinition of the Java language as well as the form of the presentation in this book.We thank them for their diligence. Any remaining errors in this book—we hopethey are few—are our responsibility and not theirs.

    We thank Francesca Freedman and Doug Kramer for assistance with mattersof typography and layout. We thank Dan Mills of Adobe Systems Incorporated forassistance in exploring possible choices of typefaces.

    Many of our colleagues at Sun Microsystems have helped us in one way oranother. Lisa Friendly, our series editor, managed our relationship with Addison-Wesley. Susan Stambaugh managed the distribution of many hundreds of copiesof drafts to reviewers. We received valuable assistance and technical advice fromBen Adida, Ole Agesen, Ken Arnold, Rick Cattell, Asmus Freytag, Norm Hardy,Steve Heller, David Hough, Doug Kramer, Nancy Lee, Marianne Mueller, AkiraTanaka, Greg Tarsy, David Ungar, Jim Waldo, Ann Wollrath, Geoff Wyant, andDerek White. We thank Alan Baratz, David Bowen, Mike Clary, John Doerr, JonKannegaard, Eric Schmidt, Bob Sproull, Bert Sutherland, and Scott McNealy forleadership and encouragement.

  • PREFACE

    The on-line Bartleby Library of Columbia University, at URL:

    http://www.cc.columbia.edu/acis/bartleby/

    was invaluable to us during the process of researching and verifying many of thequotations that are scattered throughout this book. Here is one example:

    They lard their lean books with the fat of others’ works.—Robert Burton (1576–1640)

    We are grateful to those who have toiled on Project Bartleby, for saving us a greatdeal of effort and reawakening our appreciation for the works of Walt Whitman.

    We are thankful for the tools and services we had at our disposal in writingthis book: telephones, overnight delivery, desktop workstations, laser printers,photocopiers, text formatting and page layout software, fonts, electronic mail, theWorld Wide Web, and, of course, the Internet. We live in three different states,scattered across a continent, but collaboration with each other and with ourreviewers has seemed almost effortless. Kudos to the thousands of people whohave worked over the years to make these excellent tools and services workquickly and reliably.

    Mike Hendrickson, Katie Duffy, Simone Payment, and Rosa Aimée Gonzálezof Addison-Wesley were very helpful, encouraging, and patient during the longprocess of bringing this book to print. We also thank the copy editors.

    Rosemary Simpson worked hard, on a very tight schedule, to create the index.We got into the act at the last minute, however; blame us and not her for any jokesyou may find hidden therein.

    Finally, we are grateful to our families and friends for their love and supportduring this last, crazy, year.

    In their book The C Programming Language, Brian Kernighan and DennisRitchie said that they felt that the C language “wears well as one’s experience withit grows.” If you like C, we think you will like Java. We hope that Java, too, wearswell for you.

    James GoslingCupertino, California

    Bill JoyAspen, Colorado

    Guy SteeleChelmsford, Massachusetts

    July, 1996

    xxv

  • C H A P T E R 1

    Introduction

    1.0 If I have seen further it is by standing upon the shoulders of Giants.—Sir Isaac Newton

    JAVA is a general-purpose, concurrent, class-based, object-oriented language. Itis designed to be simple enough that many programmers can achieve fluency inthe language. Java is related to C and C++ but is organized rather differently, witha number of aspects of C and C++ omitted and a few ideas from other languagesincluded. Java is intended to be a production language, not a research language,and so, as C. A. R. Hoare suggested in his classic paper on language design, thedesign of Java has avoided including new and untested features.

    Java is strongly typed. This specification clearly distinguishes between thecompile-time errors that can and must be detected at compile time, and those thatoccur at run time. Compile time normally consists of translating Java programsinto a machine-independent byte-code representation. Run-time activities includeloading and linking of the classes needed to execute a program, optional machinecode generation and dynamic optimization of the program, and actual programexecution.

    Java is a relatively high-level language, in that details of the machine repre-sentation are not available through the language. It includes automatic storagemanagement, typically using a garbage collector, to avoid the safety problems ofexplicit deallocation (as in C’s free or C++’s delete). High-performance gar-bage-collected implementations of Java can have bounded pauses to support sys-tems programming and real-time applications. Java does not include any unsafeconstructs, such as array accesses without index checking, since such unsafe con-structs would cause a program to behave in an unspecified way.

    Java is normally compiled to a bytecoded instruction set and binary formatdefined in The Java Virtual Machine Specification (Addison-Wesley, 1996). Mostimplementations of Java for general-purpose programming will support the addi-tional packages defined in the series of books under the general title The JavaApplication Programming Interface (Addison-Wesley).

    1

  • 1 Introduction INTRODUCTION

    2

    This Java Language Specification is organized as follows:Chapter 2 describes grammars and the notation used to present the lexical and

    syntactic grammars for Java.Chapter 3 describes the lexical structure of Java, which is based on C and

    C++. Java is written in the Unicode character set. Java supports the writing ofUnicode characters on systems that support only ASCII.

    Chapter 4 describes Java’s types, values, and variables. Java’s types are theprimitive types and reference types.

    The primitive types are defined to be the same on all machines and in allimplementations, and are various sizes of two’s-complement integers, single- anddouble-precision IEEE 754 standard floating-point numbers, a boolean type, anda Unicode character char type. Values of the primitive types do not share state.

    Java’s reference types are the class types, the interface types, and the arraytypes. The reference types are implemented by dynamically created objects thatare either instances of classes or arrays. Many references to each object can exist.All objects (including arrays) support the methods of the standard class Object,which is the (single) root of the class hierarchy. A predefined String class sup-ports Unicode character strings. Standard classes exist for wrapping primitive val-ues inside of objects.

    Variables are typed storage locations. A variable of a primitive type holds avalue of that exact primitive type. A variable of a class type can hold a null refer-ence or a reference to an object whose type is that class type or any subclass ofthat class type. A variable of an interface type can hold a null reference or a refer-ence to an instance of any class that implements the interface. A variable of anarray type can hold a null reference or a reference to an array. A variable of classtype Object can hold a null reference or a reference to any object, whether classinstance or array.

    Chapter 5 describes Java’s conversions and numeric promotions. Conversionschange the compile-time type and, sometimes, the value of an expression.Numeric promotions are used to convert the operands of a numeric operator to acommon type where an operation can be performed. There are no loopholes in thelanguage; casts on reference types are checked at run time to ensure type safety.

    Chapter 6 describes declarations and names, and how to determine whatnames mean (denote). Java does not require types or their members to be declaredbefore they are used. Declaration order is significant only for local variables andthe order of initializers of fields in a class or interface.

    Java provides control over the scope of names and supports limitations onexternal access to members of packages, classes, and interfaces. This helps inwriting large programs by distinguishing the implementation of a type from itsusers and those who extend it. Standard naming conventions that make for morereadable programs are described here.

  • INTRODUCTION Introduction 1

    Chapter 7 describes the structure of a Java program, which is organized intopackages similar to the modules of Modula. The members of a package are com-pilation units and subpackages. Compilation units contain type declarations andcan import types from other packages to give them short names. Packages havenames in a hierarchical namespace, and the Internet domain name system can beused to form unique package names.

    Chapter 8 describes Java’s classes. The members of classes are fields (vari-ables) and methods. Class variables exist once per class. Class methods operatewithout reference to a specific object. Instance variables are dynamically createdin objects that are instances of classes. Instance methods are invoked on instancesof classes; such instances become the current object this during their execution,supporting the object-oriented programming style.

    Classes support single implementation inheritance, in which the implementa-tion of each class is derived from that of a single superclass, and ultimately fromthe class Object. Variables of a class type can reference an instance of that classor of any subclass of that class, allowing new types to be used with existing meth-ods, polymorphically.

    Classes support concurrent programming with synchronized methods.Methods declare the checked exceptions that can arise from their execution, whichallows compile-time checking to ensure that exceptional conditions are handled.Objects can declare a finalize method that will be invoked before the objectsare discarded by the garbage collector, allowing the objects to clean up their state.

    For simplicity, Java has neither declaration “headers” separate from the imple-mentation of a class nor separate type and class hierarchies.

    Although Java does not include parameterized classes, the semantics of arraysare those of a parameterized class with some syntactic sugar. Like the program-ming language Beta, Java uses a run-time type check when storing references inarrays to ensure complete type safety.

    Chapter 9 describes Java’s interface types, which declare a set of abstractmethods and constants. Classes that are otherwise unrelated can implement thesame interface type. A variable of an interface type can contain a reference to anyobject that implements the interface. Multiple interface inheritance is supported.

    Chapter 10 describes Java arrays. Array accesses include bounds checking.Arrays are dynamically created objects and may be assigned to variables of typeObject. Java supports arrays of arrays, rather than multidimensional arrays.

    Chapter 11 describes Java’s exceptions, which are nonresuming and fullyintegrated with the language semantics and concurrency mechanisms. There arethree kinds of exceptions: checked exceptions, run-time exceptions, and errors.The compiler ensures that checked exceptions are properly handled by requiringthat a method or constructor can result in a checked exception only if it declares it.This provides compile-time checking that exception handlers exist, and aids

    3

  • 1 Introduction INTRODUCTION

    4

    programming in the large. Most user-defined exceptions should be checked excep-tions. Invalid operations in the program detected by the Java Virtual Machineresult in run-time exceptions, such as NullPointerException. Errors resultfrom failures detected by the virtual machine, such as OutOfMemoryError. Mostsimple programs do not try to handle errors.

    Chapter 12 describes activities that occur during execution of a Java program.A Java program is normally stored as binary files representing compiled classesand interfaces. These binary files can be loaded into a Java Virtual Machine,linked to other classes and interfaces, and initialized.

    After initialization, class methods and class variables may be used. Someclasses may be instantiated to create new objects of the class type. Objects that areclass instances also contain an instance of each superclass of the class, and objectcreation involves recursive creation of these superclass instances.

    When an object is no longer referenced, it may be reclaimed by the garbagecollector. If an object declares a finalizer, the finalizer is executed before theobject is reclaimed to give the object a last chance to clean up resources thatwould not otherwise be released. When a class is no longer needed, it may beunloaded; if a class finalizer is declared, it is given a chance to clean up first.Objects and classes may be finalized on exit of the Java Virtual Machine.

    Chapter 13 describes binary compatibility, specifying the impact of changesto types on other types that use the changed types but have not been recompiled.These considerations are of interest to developers of types that are to be widelydistributed, in a continuing series of versions, often through the Internet. Goodprogram development environments automatically recompile dependent codewhenever a type is changed, so most programmers need not be concerned aboutthese details.

    Chapter 14 describes Java’s blocks and statements, which are based on C andC++. Java has no goto, but includes labeled break and continue statements.Unlike C, Java requires boolean expressions in control-flow statements, and doesnot convert types to boolean implicitly, in the hope of catching more errors atcompile time. A synchronized statement provides basic object-level monitorlocking. A try statement can include catch and finally clauses to protectagainst non-local control transfers.

    Chapter 15 describes Java’s expressions. Java fully specifies the (apparent)order of evaluation of expressions, for increased determinism and portability.Overloaded methods and constructors are resolved at compile time by picking themost specific method or constructor from those which are applicable. Javachooses which method or constructor by using the same basic algorithm used inlanguages with richer dispatching, such as Lisp’s CLOS and Dylan, for the future.

    Chapter 16 describes the precise way in which Java ensures that local vari-ables are definitely set before use. While all other variables are automatically ini-

  • INTRODUCTION Example Programs 1.1

    tialized to a default value, Java does not automatically initialize local variables inorder to avoid masking programming errors.

    Chapter 17 describes the semantics of Java threads and locks, which are basedon the monitor-based concurrency originally introduced with the Mesa program-ming language. Java specifies a memory model for shared-memory multiproces-sors that supports high-performance implementations.

    Chapter 18 describes the facilities for automatically generating documenta-tion from special comments in Java source code.

    Chapter 19 presents a LALR(1) syntactic grammar for Java, and describes thedifferences between this grammar and the expository grammar used in the body ofthe language specification that precedes it.

    Chapters 20 through 22 are the reference manual for the core of the standardJava Application Programming Interface. These packages must be included in allgeneral purpose Java systems.

    Chapter 20 describes the package java.lang. The types defined injava.lang are automatically imported to be available without qualification in allJava programs. They include the primordial class Object, which is a superclass ofall other classes; classes such as Integer and Float, which wrap the primitivetypes inside objects; exceptions and errors defined by the language and the JavaVirtual Machine; Thread support; metalinguistic classes such as Class andClassLoader; and the class System, which abstracts the host system.

    Chapter 21 describes the package java.util, which defines a few basic util-ity classes, such as a hashtable class and a pseudo-random number generator.

    Chapter 22 describes the package java.io, which defines basic input/outputfacilities, including random access files and streams of values of primitive types.

    The book concludes with an index, credits for quotations used in the book,and a colophon describing how the book was created.

    1.1 Example Programs

    Most of the example programs given in the text are ready to be executed by a Javasystem and are similar in form to:

    class Test {public static void main(String[] args) {

    for (int i = 0; i < args.length; i++)System.out.print(i == 0 ? args[i] : " " + args[i]);

    System.out.println();}

    }

    5

  • 1.2 References INTRODUCTION

    6

    On a Sun workstation, this class, stored in the file Test.java, can be com-piled and executed by giving the commands:

    javac Test.javajava Test Hello, world.

    producing the output:

    Hello, world.

    1.2 References

    Apple Computer. Dylan™ Reference Manual. Apple Computer Inc., Cupertino, California.September 29, 1995. See also http://www.cambridge.apple.com.

    Bobrow, Daniel G., Linda G. DeMichiel, Richard P. Gabriel, Sonya E. Keene, GregorKiczales, and David A. Moon. Common Lisp Object System Specification, X3J13Document 88-002R, June 1988; appears as Chapter 28 of Steele, Guy. Common Lisp:The Language, 2nd ed. Digital Press, 1990, ISBN 1-55558-041-6, 770–864.

    Ellis, Margaret A., and Bjarne Stroustrup. The Annotated C++ Reference Manual.Addison-Wesley, Reading, Massachusetts, 1990, reprinted with corrections October1992, ISBN 0-201-51459-1.

    Harbison, Samuel. Modula-3. Prentice Hall, Englewood Cliffs, New Jersey, 1992, ISBN0-13-596396.

    Hoare, C. A. R. Hints on Programming Language Design. Stanford University ComputerScience Department Technical Report No. CS-73-403, December 1973. Reprinted inSIGACT/SIGPLAN Symposium on Principles of Programming Languages. Associa-tion for Computing Machinery, New York, October 1973.

    IEEE Standard for Binary Floating-Point Arithmetic. ANSI/IEEE Std. 754-1985. Avail-able from Global Engineering Documents, 15 Inverness Way East, Englewood, Colo-rado 80112-5704 USA; 800-854-7179.

    Kernighan, Brian W., and Dennis M. Ritchie. The C Programming Language, 2nd ed.Prentice Hall, Englewood Cliffs, New Jersey, 1988, ISBN 0-13-110362-8.

    Madsen, Ole Lehrmann, Birger Møller-Pedersen, and Kristen Nygaard. Object-OrientedProgramming in the Beta Programming Language. Addison-Wesley, Reading, Mas-sachusetts, 1993, ISBN 0-201-62430-3.

    Mitchell, James G., William Maybury, and Richard Sweet. The Mesa ProgrammingLanguage, Version 5.0. Xerox PARC, Palo Alto, California, CSL 79-3, April 1979.

    Stroustrup, Bjarne. The C++ Progamming Language, 2nd ed. Addison-Wesley, Reading,Massachusetts, 1991, reprinted with corrections January 1994, ISBN 0-201-53992-6.

    Unicode Consortium, The. The Unicode Standard: Worldwide Character Encoding,Version 1.0. Addison-Wesley, Reading, Massachusetts, Volume 1, 1991, ISBN 0-201-56788-1, and Volume 2, 1992, ISBN 0-201-60845-6. (Version 2, forthcoming, 1996.)

  • C H A P T E R 2

    Grammars

    Grammar, which knows how to control even kings . . .—Molière, Les Femmes Savantes (1672), Act II, scene vi

    THIS chapter describes the context-free grammars used in this specification todefine the lexical and syntactic structure of a Java program.

    2.1 Context-Free Grammars

    A context-free grammar consists of a number of productions. Each production hasan abstract symbol called a nonterminal as its left-hand side, and a sequence ofone or more nonterminal and terminal symbols as its right-hand side. For eachgrammar, the terminal symbols are drawn from a specified alphabet.

    Starting from a sentence consisting of a single distinguished nonterminal,called the goal symbol, a given context-free grammar specifies a language,namely, the infinite set of possible sequences of terminal symbols that can resultfrom repeatedly replacing any nonterminal in the sequence with a right-hand sideof a production for which the nonterminal is the left-hand side.

    2.2 The Lexical Grammar

    A lexical grammar for Java is given in §3. This grammar has as its terminal sym-bols the characters of the Unicode character set. It defines a set of productions,starting from the goal symbol Input (§3.5), that describe how sequences of Uni-code characters (§3.1) are translated into a sequence of input elements (§3.5).

    These input elements, with white space (§3.6) and comments (§3.7) dis-carded, form the terminal symbols for the syntactic grammar for Java and arecalled Java tokens (§3.5). These tokens are the identifiers (§3.8), keywords (§3.9),literals (§3.10), separators (§3.11), and operators (§3.11) of the Java language.

    7

  • 2.3 The Syntactic Grammar GRAMMARS

    8

    2.3 The Syntactic Grammar

    The syntactic grammar for Java is given in Chapters 4, 6–10, 14, and 15. Thisgrammar has Java tokens defined by the lexical grammar as its terminal symbols.It defines a set of productions, starting from the goal symbol CompilationUnit(§7.3), that describe how sequences of tokens can form syntactically correct Javaprograms.

    A LALR(1) version of the syntactic grammar is presented in Chapter 19. Thegrammar in the body of this specification is very similar to the LALR(1) grammarbut more readable.

    2.4 Grammar Notation

    Terminal symbols are shown in fixed width font in the productions of the lexicaland syntactic grammars, and throughout this specification whenever the text isdirectly referring to such a terminal symbol. These are to appear in a programexactly as written.

    Nonterminal symbols are shown in italic type. The definition of a nonterminalis introduced by the name of the nonterminal being defined followed by a colon.One or more alternative right-hand sides for the nonterminal then follow on suc-ceeding lines. For example, the syntactic definition:

    IfThenStatement:if ( Expression ) Statement

    states that the nonterminal IfThenStatement represents the token if, followed by aleft parenthesis token, followed by an Expression, followed by a right parenthesistoken, followed by a Statement. As another example, the syntactic definition:

    ArgumentList:ArgumentArgumentList , Argument

    states that an ArgumentList may represent either a single Argument or anArgumentList, followed by a comma, followed by an Argument. This definition ofArgumentList is recursive, that is to say, it is defined in terms of itself. The resultis that an ArgumentList may contain any positive number of arguments. Suchrecursive definitions of nonterminals are common.

    The subscripted suf