The Java Language Specification James Gosling Bill Joy Guy Steele Version 1.0 (Converted from the printed book, August 1996, first printing) _________________________________________________________________ Series Foreword xxi Preface xxiii 1 Introduction 1 1.1 Example Programs 5 1.2 References 6 2 Grammars 7 2.1 Context-Free Grammars 7 2.2 The Lexical Grammar 7 2.3 The Syntactic Grammar 8 2.4 Grammar Notation 8 3 Lexical Structure 11 3.1 Unicode 11 3.2 Lexical Translations 12 3.3 Unicode Escapes 12 3.4 Line Terminators 13 3.5 Input Elements and Tokens 14 3.6 White Space 15 3.7 Comments 15 3.8 Identifiers 17 3.9 Keywords 18 3.10 Literals 19 3.10.1 Integer Literals 19 3.10.2 Floating-Point Literals 22 3.10.3 Boolean Literals 23 3.10.4 Character Literals 24 3.10.5 String Literals 25 3.10.6 Escape Sequences for Character and String Literals 26 3.10.7 The Null Literal 27 3.11 Separators 27 3.12 Operators 28 4 Types, Values, and Variables 29 4.1 The Kinds of Types and Values 30 4.2 Primitive Types and Values 30 4.2.1 Integral Types and Values 31 4.2.2 Integer Operations 31 4.2.3 Floating-Point Types and Values 33 4.2.4 Floating-Point Operations 34 4.2.5 The boolean Type and boolean Values 36 4.3 Reference Types and Values 37 4.3.1 Objects 38 4.3.2 The Class Object 40 4.3.3 The Class String 41 4.3.4 When Reference Types Are the Same 42 4.4 Where Types Are Used 42 4.5 Variables 43 4.5.1 Variables of Primitive Type 44 4.5.2 Variables of Reference Type 44 4.5.3 Kinds of Variables 44 4.5.4 Initial Values of Variables 46 4.5.5 Variables Have Types, Objects Have Classes 47 5 Conversions and Promotions 51 5.1 Kinds of Conversion 54 5.1.1 Identity Conversions 54 5.1.2 Widening Primitive Conversions 54 5.1.3 Narrowing Primitive Conversions 55 5.1.4 Widening Reference Conversions 58 5.1.5 Narrowing Reference Conversions 59 5.1.6 String Conversions 60 5.1.7 Forbidden Conversions 60 5.2 Assignment Conversion 61 5.3 Method Invocation Conversion 66 5.4 String Conversion 67 5.5 Casting Conversion 67 5.6 Numeric Promotions 72 5.6.1 Unary Numeric Promotion 73 5.6.2 Binary Numeric Promotion 74 6 Names 77 6.1 Declarations 78 6.2 Names and Identifiers 79 6.3 Scope of a Simple Name 81 6.3.1 Hiding Names 83 6.4 Members and Inheritance 85 6.4.1 The Members of a Package 85 6.4.2 The Members of a Class Type 86 6.4.3 The Members of an Interface Type 87 6.4.4 The Members of an Array Type 88 6.5 Determining the Meaning of a Name 89 6.5.1 Syntactic Classification of a Name According to Context 90 6.5.2 Reclassification of Contextually Ambiguous Names 91 6.5.3 Meaning of Package Names 93 6.5.3.1 Simple Package Names 93 6.5.3.2 Qualified Package Names 93 6.5.4 Meaning of Type Names 93 6.5.4.1 Simple Type Names 93 6.5.4.2 Qualified Type Names 94 6.5.5 Meaning of Expression Names 95 6.5.5.1 Simple Expression Names 95 6.5.5.2 Qualified Expression Names 96 6.5.6 Meaning of Method Names 98 6.5.6.1 Simple Method Names 98 6.5.6.2 Qualified Method Names 98 6.6 Qualified Names and Access Control 99 6.6.1 Determining Accessibility 99 6.6.2 Details on protected Access 100 6.6.3 An Example of Access Control 100 6.6.4 Example: Access to public and Non-public Classes 101 6.6.5 Example: Default-Access Fields, Methods, and Constructors 102 6.6.6 Example: public Fields, Methods, and Constructors 103 6.6.7 Example: protected Fields, Methods, and Constructors 104 6.6.8 Example: private Fields, Methods, and Constructors 105 6.7 Fully Qualified Names 105 6.8 Naming Conventions 106 6.8.1 Package Names 107 6.8.2 Class and Interface Type Names 108 6.8.3 Method Names 108 6.8.4 Field Names 109 6.8.5 Constant Names 109 6.8.6 Local Variable and Parameter Names 110 7 Packages 113 7.1 Package Members 114 7.2 Host Support for Packages 115 7.2.1 Storing Packages in a File System 115 7.2.2 Storing Packages in a Database 117 7.3 Compilation Units 117 7.4 Package Declarations 118 7.4.1 Named Packages 118 7.4.2 Unnamed Packages 119 7.4.3 Scope and Hiding of a Package Name 120 7.4.4 Access to Members of a Package 120 7.5 Import Declarations 120 7.5.1 Single-Type-Import Declaration 121 7.5.2 Type-Import-on-Demand Declaration 122 7.5.3 Automatic Imports 122 7.5.4 A Strange Example 123 7.6 Type Declarations 124 7.7 Unique Package Names 125 8 Classes 127 8.1 Class Declaration 128 8.1.1 Scope of a Class Type Name 130 8.1.2 Class Modifiers 130 8.1.2.1 abstract Classes 131 8.1.2.2 final Classes 133 8.1.3 Superclasses and Subclasses 133 8.1.4 Superinterfaces 135 8.1.5 Class Body and Member Declarations 138 8.2 Class Members 138 8.2.1 Examples of Inheritance 139 8.2.1.1 Example: Inheritance with Default Access 140 8.2.1.2 Inheritance with public and protected 141 8.2.1.3 Inheritance with private 141 8.2.1.4 Accessing Members of Inaccessible Classes 142 8.3 Field Declarations 143 8.3.1 Field Modifiers 144 8.3.1.1 static Fields 145 8.3.1.2 final Fields 146 8.3.1.3 transient Fields 147 8.3.1.4 volatile Fields 147 8.3.2 Initialization of Fields 149 8.3.2.1 Initializers for Class Variables 149 8.3.2.2 Initializers for Instance Variables 150 8.3.3 Examples of Field Declarations 151 8.3.3.1 Example: Hiding of Class Variables 151 8.3.3.2 Example: Hiding of Instance Variables 152 8.3.3.3 Example: Multiply Inherited Fields 153 8.3.3.4 Example: Re-inheritance of Fields 154 8.4 Method Declarations 155 8.4.1 Formal Parameters 156 8.4.2 Method Signature 157 8.4.3 Method Modifiers 157 8.4.3.1 abstract Methods 158 8.4.3.2 static Methods 160 8.4.3.3 final Methods 160 8.4.3.4 native Methods 161 8.4.3.5 synchronized Methods 161 8.4.4 Method Throws 163 8.4.5 Method Body 164 8.4.6 Inheritance, Overriding, and Hiding 165 8.4.6.1 Overriding (By Instance Methods) 165 8.4.6.2 Hiding (By Class Methods) 165 8.4.6.3 Requirements in Overriding and Hiding 166 8.4.6.4 Inheriting Methods with the Same Signature 166 8.4.7 Overloading 167 8.4.8 Examples of Method Declarations 168 8.4.8.1 Example: Overriding 168 8.4.8.2 Example: Overloading, Overriding, and Hiding 168 8.4.8.3 Example: Incorrect Overriding 169 8.4.8.4 Example: Overriding versus Hiding 170 8.4.8.5 Example: Invocation of Hidden Class Methods 171 8.4.8.6 Large Example of Overriding 172 8.4.8.7 Example: Incorrect Overriding because of Throws 174 8.5 Static Initializers 175 8.6 Constructor Declarations 176 8.6.1 Formal Parameters 177 8.6.2 Constructor Signature 177 8.6.3 Constructor Modifiers 177 8.6.4 Constructor Throws 178 8.6.5 Constructor Body 178 8.6.6 Constructor Overloading 180 8.6.7 Default Constructor 180 8.6.8 Preventing Instantiation of a Class 180 9 Interfaces 183 9.1 Interface Declarations 184 9.1.1 Scope of an Interface Type Name 184 9.1.2 Interface Modifiers 184 9.1.2.1 abstract Interfaces 184 9.1.3 Superinterfaces 185 9.1.4 Interface Body and Member Declarations 185 9.1.5 Access to Interface Member Names 186 9.2 Interface Members 186 9.3 Field (Constant) Declarations 186 9.3.1 Initialization of Fields in Interfaces 187 9.3.2 Examples of Field Declarations 188 9.3.2.1 Ambiguous Inherited Fields 188 9.3.2.2 Multiply Inherited Fields 188 9.4 Abstract Method Declarations 189 9.4.1 Inheritance and Overriding 189 9.4.2 Overloading 190 9.4.3 Examples of Abstract Method Declarations 190 9.4.3.1 Example: Overriding 190 9.4.3.2 Example: Overloading 191 10 Arrays 193 10.1 Array Types 194 10.2 Array Variables 194 10.3 Array Creation 195 10.4 Array Access 195 10.5 Arrays: A Simple Example 196 10.6 Arrays Initializers 196 10.7 Array Members 197 10.8 Class Objects for Arrays 199 10.9 An Array of Characters is Not a String 199 10.10 Array Store Exception 199 11 Exceptions 201 11.1 The Causes of Exceptions 202 11.2 Compile-Time Checking of Exceptions 203 11.2.1 Why Errors are Not Checked 203 11.2.2 Why Runtime Exceptions are Not Checked 203 11.3 Handling of an Exception 204 11.3.1 Exceptions are Precise 205 11.3.2 Handling Asynchronous Exceptions 205 11.4 An Example of Exceptions 206 11.5 The Exception Hierarchy 208 11.5.1 The Classes Exception and RuntimeException 208 11.5.1.1 Standard Runtime Exceptions 208 11.5.1.2 Standard Checked Exceptions 210 11.5.2 The Class Error 211 11.5.2.1 Loading and Linkage Errors 211 11.5.2.2 Virtual Machine Errors 212 12 Execution 215 12.1 Virtual Machine Start-Up 215 12.1.1 Load the Class Test 216 12.1.2 Link Test: Verify, Prepare, (Optionally) Resolve 216 12.1.3 Initialize Test: Execute Initializers 217 12.1.4 Invoke Test.main 218 12.2 Loading of Classes and Interfaces 218 12.2.1 The Loading Process 219 12.2.2 Loading: Implications for Code Generation 219 12.3 Linking of Classes and Interfaces 220 12.3.1 Verification of the Binary Representation 220 12.3.2 Preparation of a Class or Interface Type 221 12.3.3 Resolution of Symbolic References 221 12.3.4 Linking: Implications for Code Generation 222 12.4 Initialization of Classes and Interfaces 223 12.4.1 When Initialization Occurs 223 12.4.2 Detailed Initialization Procedure 225 12.4.3 Initialization: Implications for Code Generation 227 12.5 Creation of New Class Instances 228 12.6 Finalization of Class Instances 231 12.6.1 Implementing Finalization 232 12.6.2 Finalizer Invocations are Not Ordered 234 12.7 Finalization of Classes 235 12.8 Unloading of Classes and Interfaces 235 12.9 Virtual Machine Exit 235 13 Binary Compatibility 237 13.1 The Form of a Java Binary 238 13.2 What Binary Compatibility Is and Is Not 240 13.3 Evolution of Packages 242 13.4 Evolution of Classes 242 13.4.1 abstract Classes 242 13.4.2 final Classes 242 13.4.3 public Classes 243 13.4.4 Superclasses and Superinterfaces 243 13.4.5 Class Body and Member Declarations 245 13.4.6 Access to Members and Constructors 248 13.4.7 Field Declarations 249 13.4.8 final Fields and Constants 250 13.4.9 static Fields 253 13.4.10 transient Fields 253 13.4.11 volatile Fields 253 13.4.12 Method and Constructor Declarations 253 13.4.13 Method and Constructor Parameters 254 13.4.14 Method Result Type 254 13.4.15 abstract Methods 254 13.4.16 final Methods 255 13.4.17 native Methods 256 13.4.18 static Methods 256 13.4.19 synchronized Methods 256 13.4.20 Method and Constructor Throws 256 13.4.21 Method and Constructor Body 257 13.4.22 Method and Constructor Overloading 257 13.4.23 Method Overriding 258 13.4.24 Static Initializers 259 13.5 Evolution of Interfaces 259 13.5.1 public Interfaces 259 13.5.2 Superinterfaces 260 13.5.3 The Interface Members 260 13.5.4 Field Declarations 260 13.5.5 Abstract Method Declarations 261 14 Blocks and Statements 263 14.1 Normal and Abrupt Completion of Statements 264 14.2 Blocks 265 14.3 Local Variable Declaration Statements 265 14.3.1 Local Variable Declarators and Types 266 14.3.2 Scope of Local Variable Declarations 267 14.3.3 Hiding of Names by Local Variables 268 14.3.4 Execution of Local Variable Declarations 269 14.4 Statements 269 14.5 The Empty Statement 271 14.6 Labeled Statements 271 14.7 Expression Statements 272 14.8 The if Statement 273 14.8.1 The if-then Statement 273 14.8.2 The if-then-else Statement 273 14.9 The switch Statement 274 14.10 The while Statement 277 14.10.1 Abrupt Completion 278 14.11 The do Statement 278 14.11.1 Abrupt Completion 279 14.11.2 Example of do statement 280 14.12 The for Statement 280 14.12.1 Initialization of for statement 281 14.12.2 Iteration of for statement 281 14.12.3 Abrupt Completion of for statement 282 14.13 The break Statement 283 14.14 The continue Statement 285 14.15 The return Statement 286 14.16 The throw Statement 287 14.17 The synchronized Statement 289 14.18 The try statement 290 14.18.1 Execution of try-catch 291 14.18.2 Execution of try-catch-finally 292 14.19 Unreachable Statements 295 15 Expressions 301 15.1 Evaluation, Denotation, and Result 301 15.2 Variables as Values 302 15.3 Type of an Expression 302 15.4 Expressions and Run-Time Checks 302 15.5 Normal and Abrupt Completion of Evaluation 304 15.6 Evaluation Order 305 15.6.1 Evaluate Left-Hand Operand First 305 15.6.2 Evaluate Operands before Operation 307 15.6.3 Evaluation Respects Parentheses and Precedence 308 15.6.4 Argument Lists are Evaluated Left-to-Right 309 15.6.5 Evaluation Order for Other Expressions 310 15.7 Primary Expressions 311 15.7.1 Literals 312 15.7.2 this 313 15.7.3 Parenthesized Expressions 313 15.8 Class Instance Creation Expressions 314 15.8.1 Run-time Evaluation of Class Instance Creation Expressions 314 15.8.2 Example: Evaluation Order and Out-of-Memory Detection 315 15.9 Array Creation Expressions 315 15.9.1 Run-time Evaluation of Array Creation Expressions 316 15.9.2 Example: Array Creation Evaluation Order 318 15.9.3 Example: Array Creation and Out-of-Memory Detection 319 15.10 Field Access Expressions 319 15.10.1 Field Access Using a Primary 320 15.10.2 Accessing Superclass Members using super 322 15.11 Method Invocation Expressions 323 15.11.1 Compile-Time Step 1: Determine Class or Interface to Search 324 15.11.2 Compile-Time Step 2: Determine Method Signature 325 15.11.2.1 Find Methods that are Applicable and Accessible 325 15.11.2.2 Choose the Most Specific Method 327 15.11.2.3 Example: Overloading Ambiguity 327 15.11.2.4 Example: Return Type Not Considered 328 15.11.2.5 Example: Compile-Time Resolution 329 15.11.3 Compile-Time Step 3: Is the Chosen Method Appropriate? 332 15.11.4 Runtime Evaluation of Method Invocation 333 15.11.4.1 Compute Target Reference (If Necessary) 333 15.11.4.2 Evaluate Arguments 334 15.11.4.3 Check Accessibility of Type and Method 334 15.11.4.4 Locate Method to Invoke 335 15.11.4.5 Create Frame, Synchronize, Transfer Control 336 15.11.4.6 Implementation Note: Combining Frames 337 15.11.4.7 Example: Target Reference and Static Methods 337 15.11.4.8 Example: Evaluation Order 338 15.11.4.9 Example: Overriding 338 15.11.4.10 Example: Method Invocation using super 340 15.12 Array Access Expressions 341 15.12.1 Runtime Evaluation of Array Access 341 15.12.2 Examples: Array Access Evaluation Order 342 15.13 Postfix Expressions 344 15.13.1 Names 344 15.13.2 Postfix Increment Operator ++ 345 15.13.3 Postfix Decrement Operator -- 345 15.14 Unary Operators 346 15.14.1 Prefix Increment Operator ++ 347 15.14.2 Prefix Decrement Operator -- 348 15.14.3 Unary Plus Operator + 348 15.14.4 Unary Minus Operator - 349 15.14.5 Bitwise Complement Operator ~ 349 15.14.6 Logical Complement Operator ! 349 15.15 Cast Expressions 350 15.16 Multiplicative Operators 351 15.16.1 Multiplication Operator * 351 15.16.2 Division Operator / 352 15.16.3 Remainder Operator % 353 15.17 Additive Operators 355 15.17.1 String Concatenation Operator + 355 15.17.1.1 String Conversion 355 15.17.1.2 Optimization of String Concatenation 356 15.17.1.3 Examples of String Concatenation 356 15.17.2 Additive Operators (+ and -) for Numeric Types 358 15.18 Shift Operators 359 15.19 Relational Operators 360 15.19.1 Numerical Comparison Operators <, <=, >, and >= 361 15.19.2 Type Comparison Operator instanceof 361 15.20 Equality Operators 362 15.20.1 Numerical Equality Operators == and != 363 15.20.2 Boolean Equality Operators == and != 364 15.20.3 Reference Equality Operators == and != 364 15.21 Bitwise and Logical Operators 365 15.21.1 Integer Bitwise Operators &, ^, and | 365 15.21.2 Boolean Logical Operators &, ^, and | 365 15.22 Conditional-And Operator && 366 15.23 Conditional-Or Operator || 366 15.24 Conditional Operator ? : 367 15.25 Assignment Operators 369 15.25.1 Simple Assignment Operator = 369 15.25.2 Compound Assignment Operators 374 15.26 Expression 381 15.27 Constant Expression 381 16 Definite Assignment 383 16.1 Definite Assignment and Expressions 386 16.1.1 Boolean Constant Expressions 386 16.1.2 Boolean-valued Expressions 386 16.1.3 The Boolean Operator && 386 16.1.4 The Boolean Operator || 387 16.1.5 The Boolean Operator ! 387 16.1.6 The Boolean Operator & 387 16.1.7 The Boolean Operator | 388 16.1.8 The Boolean Operator ^ 388 16.1.9 The Boolean Operator == 389 16.1.10 The Boolean Operator != 389 16.1.11 The Boolean Operator ? : 389 16.1.12 The Conditional Operator ? : 390 16.1.13 Boolean Assignment Expressions 390 16.1.14 Other Assignment Expressions 391 16.1.15 Operators ++ and -- 392 16.1.16 Other Expressions 392 16.2 Definite Assignment and Statements 393 16.2.1 Empty Statements 393 16.2.2 Blocks 393 16.2.3 Local Variable Declaration Statements 393 16.2.4 Labeled Statements 394 16.2.5 Expression Statements 394 16.2.6 if Statements 394 16.2.7 switch Statements 395 16.2.8 while Statements 395 16.2.9 do Statements 395 16.2.10 for Statements 396 16.2.10.1 Initialization Part 396 16.2.10.2 Incrementation Part 397 16.2.11 break, continue, return, and throw Statements 397 16.2.12 synchronized Statements 397 16.2.13 try Statements 398 17 Threads and Locks 399 17.1 Terminology and Framework 401 17.2 Execution Order 403 17.3 Rules about Variables 404 17.4 Nonatomic Treatment of double and long 405 17.5 Rules about Locks 406 17.6 Rules about the Interaction of Locks and Variables 407 17.7 Rules for Volatile Variables 407 17.8 Prescient Store Actions 408 17.9 Discussion 408 17.10 Example: Possible Swap 409 17.11 Example: Out-of-Order Writes 413 17.12 Threads 415 17.13 Locks and Synchronization 415 17.14 Wait Sets and Notification 416 18 Documentation Comments 419 18.1 The Text of a Documentation Comment 419 18.2 HTML in a Documentation Comment 420 18.3 Summary Sentence and General Description 420 18.4 Tagged Paragraphs 420 18.4.1 The @see Tag 421 18.4.2 The @author Tag 421 18.4.3 The @version Tag 422 18.4.4 The @param Tag 422 18.4.5 The @return Tag 422 18.4.6 The @exception Tag 422 18.5 Example 423 19 LALR(1) Grammar 433 19.1 Grammatical Difficulties 433 19.1.1 Problem #1: Names Too Specific 433 19.1.2 Problem #2: Modifiers Too Specific 435 19.1.3 Problem #3: Field Declaration versus Method Declaration 437 19.1.4 Problem #4: Array Type versus Array Access 438 19.1.5 Problem #5: Cast versus Parenthesized Expression 438 19.2 Productions from §2.3: The Syntactic Grammar 440 19.3 Productions from §3: Lexical Structure 440 19.4 Productions from §4: Types, Values, and Variables 440 19.5 Productions from §6: Names 441 19.6 Productions from §7: Packages 442 19.7 Productions Used Only in the LALR(1) Grammar 442 19.8 Productions from §8: Classes 443 19.8.1 Productions from §8.1: Class Declaration 443 19.8.2 Productions from §8.3: Field Declarations 443 19.8.3 Productions from §8.4: Method Declarations 444 19.8.4 Productions from §8.5: Static Initializers 444 19.8.5 Productions from §8.6: Constructor Declarations 445 19.9 Productions from §9: Interfaces 445 19.9.1 Productions from §9.1: Interface Declarations 445 19.10 Productions from §10: Arrays 446 19.11 Productions from §14: Blocks and Statements 446 19.12 Productions from §15: Expressions 450 20 The Package java.lang 455 20.1 The Class java.lang.Object 458 20.2 The Interface java.lang.Cloneable 465 20.3 The Class java.lang.Class 466 20.4 The Class java.lang.Boolean 469 20.5 The Class java.lang.Character 471 20.6 The Class java.lang.Number 487 20.7 The Class java.lang.Integer 488 20.8 The Class java.lang.Long 495 20.9 The Class java.lang.Float 503 20.10 The Class java.lang.Double 510 20.11 The Class java.lang.Math 517 20.12 The Class java.lang.String 531 20.13 The Class java.lang.StringBuffer 548 20.14 The Class java.lang.ClassLoader 558 20.15 The Class java.lang.Process 561 20.16 The Class java.lang.Runtime 563 20.17 The Class java.lang.SecurityManager 569 20.18 The Class java.lang.System 579 20.19 The Interface java.lang.Runnable 586 20.20 The Class java.lang.Thread 587 20.21 The Class java.lang.ThreadGroup 602 20.22 The Class java.lang.Throwable and its Subclasses 611 20.23 The Class java.lang.ExceptionInInitializerError 614 21 The Package java.util 615 21.1 The Interface java.util.Enumeration 617 21.2 The Class java.util.BitSet 618 21.3 The Class java.util.Date 622 21.4 The Class java.util.Dictionary 633 21.5 The Class java.util.Hashtable 635 21.6 The Class java.util.Properties 639 21.7 The Class java.util.Observable 643 21.8 The Interface java.util.Observer 645 21.9 The Class java.util.Random 646 21.10 The Class java.util.StringTokenizer 651 21.11 The Class java.util.Vector 654 21.12 The Class java.util.Stack 661 21.13 The Class java.util.EmptyStackException 663 21.14 The Class java.util.NoSuchElementException 664 22 The Package java.io 665 22.1 The Interface java.io.DataInput 667 22.2 The Interface java.io.DataOutput 674 22.3 The Class java.io.InputStream 680 22.4 The Class java.io.FileInputStream 684 22.5 The Class java.io.PipedInputStream 687 22.6 The Class java.io.ByteArrayInputStream 689 22.7 The Class java.io.StringBufferInputStream 692 22.8 The Class java.io.SequenceInputStream 694 22.9 The Class java.io.FilterInputStream 696 22.10 The Class java.io.BufferedInputStream 699 22.11 The Class java.io.DataInputStream 703 22.12 The Class java.io.LineNumberInputStream 707 22.13 The Class java.io.PushbackInputStream 710 22.14 The Class java.io.StreamTokenizer 712 22.15 The Class java.io.OutputStream 720 22.16 The Class java.io.FileOutputStream 722 22.17 The Class java.io.PipedOutputStream 725 22.18 The Class java.io.ByteArrayOutputStream 727 22.19 The Class java.io.FilterOutputStream 730 22.20 The Class java.io.BufferedOutputStream 732 22.21 The Class java.io.DataOutputStream 734 22.22 The Class java.io.PrintStream 738 22.23 The Class java.io.RandomAccessFile 743 22.24 The Class java.io.File 752 22.25 The Interface java.io.FilenameFilter 759 22.26 The Class java.io.FileDescriptor 760 22.27 The Class java.io.IOException 761 22.28 The Class java.io.EOFException 762 22.29 The Class java.io.FileNotFoundException 763 22.30 The Class java.io.InterruptedIOException 764 22.31 The Class java.io.UTFDataFormatException 765 Index 767 _________________________________________________________________ Contents | Prev | Next | Index Java Language Specification (HTML generated by dkramer on August 01, 1996) Copyright © 1996 Sun Microsystems, Inc. All rights reserved Please send any comments or corrections to doug.kramer@sun.co