The Java Language Specification, Third Edition |
Contents | Previous | Next | Index |
1.1 Example Programs
1.2 Notation
1.3 Relationship to Predefined Classes and Interfaces
1.4 References
2 Grammars
2.1 Context-Free Grammars
2.2 The Lexical Grammar
2.3 The Syntactic Grammar
2.4 Grammar Notation
3.1 Unicode4 Types, Values, and Variables
3.2 Lexical Translations
3.3 Unicode Escapes
3.4 Line Terminators
3.5 Input Elements and Tokens
3.6 White Space
3.7 Comments
3.8 Identifiers
3.9 Keywords
3.10 Literals3.10.1 Integer Literals3.11 Separators
3.10.2 Floating-Point Literals
3.10.3 Boolean Literals
3.10.4 Character Literals
3.10.5 String Literals
3.10.6 Escape Sequences for Character and String Literals
3.10.7 The Null Literal
3.12 Operators
4.1 The Kinds of Types and Values5 Conversions and Promotions
4.2 Primitive Types and Values4.2.1 Integral Types and Values4.3 Reference Types and Values
4.2.2 Integer Operations
4.2.3 Floating-Point Types, Formats, and Values
4.2.4 Floating-Point Operations
4.2.5 The boolean Type and boolean Values4.3.1 Objects4.4 Type Variables
4.3.2 The Class Object
4.3.3 The Class String
4.3.4 When Reference Types Are the Same
4.5 Parameterized Types4.5.1 Type Arguments and Wildcards4.6 Type Erasure4.5.1.1 Type Argument Containment and Equivalence4.5.2 Members and Constructors of Parameterized Types
4.7 Reifiable Types
4.8 Raw Types
4.9 Intersection Types
4.10 Subtyping4.10.1 Subtyping among Primitive Types4.11 Where Types Are Used
4.10.2 Subtyping among Class and Interface Types
4.10.3 Subtyping among Array Types
4.12 Variables4.12.1 Variables of Primitive Type
4.12.2 Variables of Reference Type4.12.2.1 Heap Pollution4.12.3 Kinds of Variables
4.12.4 final Variables
4.12.5 Initial Values of Variables
4.12.6 Types, Classes, and Interfaces
5.1 Kinds of Conversion6 Names5.1.1 Identity Conversions5.2 Assignment Conversion
5.1.2 Widening Primitive Conversion
5.1.3 Narrowing Primitive Conversions
5.1.4 Widening and Narrowing Primitive Conversions
5.1.5 Widening Reference Conversions
5.1.6 Narrowing Reference Conversions
5.1.7 Boxing Conversion
5.1.8 Unboxing Conversion
5.1.9 Unchecked Conversion
5.1.10 Capture Conversion
5.1.11 String Conversions
5.1.12 Forbidden Conversions
5.1.13 Value Set Conversion
5.3 Method Invocation Conversion
5.4 String Conversion
5.5 Casting Conversion
5.6 Numeric Promotions5.6.1 Unary Numeric Promotion
5.6.2 Binary Numeric Promotion
6.1 Declarations7 Packages
6.2
6.36.3.1 Shadowing Declarations6.4 Members and Inheritance
6.3.2 Obscured Declarations6.4.1 The Members of Type Variables, Parameterized Types, Raw Types and Intersection Types6.5 Determining the Meaning of a Name
6.4.2 The Members of a Package
6.4.3 The Members of a Class Type
6.4.4 The Members of an Interface Type
6.4.5 The Members of an Array Type6.5.1 Syntactic Classification of a Name According to Context6.6 Access Control
6.5.2 Reclassification of Contextually Ambiguous Names
6.5.3 Meaning of Package Names6.5.3.1 Simple Package Names6.5.4 Meaning of PackageOrTypeNames
6.5.3.2 Qualified Package Names6.5.4.1 Simple PackageOrTypeNames6.5.5 Meaning of Type Names
6.5.4.2 Qualified PackageOrTypeNames
6.5.5.1 Simple Type Names6.5.6 Meaning of Expression Names
6.5.5.2 Qualified Type Names6.5.6.1 Simple Expression Names6.5.7 Meaning of Method Names
6.5.6.2 Qualified Expression Names6.5.7.1 Simple Method Names
6.5.7.2 Qualified Method Names6.6.1 Determining Accessibility6.7 Fully Qualified Names and Canonical Names
6.6.2 Details on protected Access6.6.2.1 Access to a protected Member6.6.3 An Example of Access Control
6.6.2.2 Qualified Access to a protected Constructor
6.6.4 Example: Access to public and Non-public Classes
6.6.5 Example: Default-Access Fields, Methods, and Constructors
6.6.6 Example: public Fields, Methods, and Constructors
6.6.7 Example: protected Fields, Methods, and Constructors
6.6.8 Example: private Fields, Methods, and Constructors
6.8 Naming Conventions6.8.1 Package Names
6.8.2 Class and Interface Type Names
6.8.3 Type Variable Names
6.8.4 Method Names
6.8.5 Field Names
6.8.6 Constant Names
6.8.7 Local Variable and Parameter Names
7.1 Package Members8 Classes
7.2 Host Support for Packages7.2.1 Storing Packages in a File System7.3 Compilation Units
7.2.2 Storing Packages in a Database
7.4 Package Declarations7.4.1 Named Packages7.5 Import Declarations7.4.1.1 Package Annotations7.4.2 Unnamed Packages
7.4.3 Observability of a Package
7.4.4 Scope of a Package Declaration7.5.1 Single-Type-Import Declaration7.6 Top Level Type Declarations
7.5.2 Type-Import-on-Demand Declaration
7.5.3 Single Static Import Declaration
7.5.4 Static-Import-on-Demand Declaration
7.5.5 Automatic Imports
7.5.6 A Strange Example
7.7 Unique Package Names
8.1 Class Declaration8.5 Member Type Declarations8.1.1 Class Modifiers8.2 Class Members8.1.1.1 abstract Classes8.1.2 Generic Classes and Type Parameters
8.1.1.2 final Classes
8.1.1.3 strictfp Classes
8.1.3 Inner Classes and Enclosing Instances
8.1.4 Superclasses and Subclasses
8.1.5 Superinterfaces
8.1.6 Class Body and Member Declarations8.2.1 Examples of Inheritance8.3 Field Declarations8.2.1.1 Example: Inheritance with Default Access
8.2.1.2 Inheritance with public and protected
8.2.1.3 Inheritance with private
8.2.1.4 Accessing Members of Inaccessible Classes8.3.1 Field Modifiers8.4 Method Declarations8.3.1.1 static Fields8.3.2 Initialization of Fields
8.3.1.2 final Fields
8.3.1.3 transient Fields
8.3.1.4 volatile Fields8.3.2.1 Initializers for Class Variables8.3.3 Examples of Field Declarations
8.3.2.2 Initializers for Instance Variables
8.3.2.3 Restrictions on the use of Fields during Initialization8.3.3.1 Example: Hiding of Class Variables
8.3.3.2 Example: Hiding of Instance Variables
8.3.3.3 Example: Multiply Inherited Fields
8.3.3.4 Example: Re-inheritance of Fields8.4.1 Formal Parameters
8.4.2 Method Signature
8.4.3 Method Modifiers8.4.3.1 abstract Methods8.4.4 Generic Methods
8.4.3.2 static Methods
8.4.3.3 final Methods
8.4.3.4 native Methods
8.4.3.5 strictfp Methods
8.4.3.6 synchronized Methods
8.4.5 Method Return Type
8.4.6 Method Throws
8.4.7 Method Body
8.4.8 Inheritance, Overriding, and Hiding8.4.8.1 Overriding (by Instance Methods)8.4.9 Overloading
8.4.8.2 Hiding (by Class Methods)
8.4.8.3 Requirements in Overriding and Hiding
8.4.8.4 Inheriting Methods with Override-Equivalent Signatures
8.4.10 Examples of Method Declarations8.4.10.1 Example: Overriding
8.4.10.2 Example: Overloading, Overriding, and Hiding
8.4.10.3 Example: Incorrect Overriding
8.4.10.4 Example: Overriding versus Hiding
8.4.10.5 Example: Invocation of Hidden Class Methods
8.4.10.6 Large Example of Overriding
8.4.10.7 Example: Incorrect Overriding because of Throws
8.5.1 Modifiers8.6 Instance Initializers
8.5.2 Static Member Type Declarations
8.8.1 Formal Parameters and Formal Type Parameter8.9 Enums
8.8.2 Constructor Signature
8.8.3 Constructor Modifiers
8.8.4 Generic Constructors
8.8.5 Constructor Throws
8.8.6 The Type of a Constructor
8.8.7 Constructor Body8.8.7.1 Explicit Constructor Invocations8.8.8 Constructor Overloading
8.8.9 Default Constructor
8.8.10 Preventing Instantiation of a Class
9.1 Interface Declarations10 Arrays
9.1.1 Interface Modifiers9.2 Interface Members
9.1.1.1 abstract Interfaces9.1.2 Generic Interfaces and Type Parameters
9.1.1.2 strictfp Interfaces
9.1.3 Superinterfaces and Subinterfaces
9.1.4 Interface Body and Member Declarations
9.1.5 Access to Interface Member Names
9.3 Field (Constant) Declarations
9.3.1 Initialization of Fields in Interfaces9.4 Abstract Method Declarations
9.3.2 Examples of Field Declarations
9.3.2.1 Ambiguous Inherited Fields
9.3.2.2 Multiply Inherited Fields
9.4.1 Inheritance and Overriding9.5 Member Type Declarations
9.4.2 Overloading
9.4.3 Examples of Abstract Method Declarations
9.4.3.1 Example: Overriding
9.4.3.2 Example: Overloading
9.6 Annotation Types
9.6.1 Predefined Annotation Types9.7 Annotations
9.6.1.1 Target
9.6.1.2 Retention
9.6.1.3 Inherited
9.6.1.4 Override
9.6.1.5 SuppressWarnings
9.6.1.6 Deprecated
10.1 Array Types11 Exceptions
10.2 Array Variables
10.3 Array Creation
10.4 Array Access
10.5 Arrays: A Simple Example
10.6 Array Initializers
10.7 Array Members
10.8 Class Objects for Arrays
10.9 An Array of Characters is Not a String
10.10 Array Store Exception
11.1 The Causes of Exceptions12 Execution
11.2 Compile-Time Checking of Exceptions
11.2.1 Exception Analysis of Expressions11.3 Handling of an Exception
11.2.2 Exception Analysis of Statements
11.2.3 Exception Checking
11.2.4 Why Errors are Not Checked
11.2.5 Why Runtime Exceptions are Not Checked
11.3.1 Exceptions are Precise11.4 An Example of Exceptions
11.3.2 Handling Asynchronous Exceptions
11.5 The Exception Hierarchy
11.5.1 Loading and Linkage Errors
11.5.2 Virtual Machine Errors
12.1 Virtual Machine Start-Up13 Binary Compatibility
12.1.1 Load the Class Test12.2 Loading of Classes and Interfaces
12.1.2 Link Test: Verify, Prepare, (Optionally) Resolve
12.1.3 Initialize Test: Execute Initializers
12.1.4 Invoke Test.main
12.2.1 The Loading Process12.3 Linking of Classes and Interfaces
12.3.1 Verification of the Binary Representation12.4 Initialization of Classes and Interfaces
12.3.2 Preparation of a Class or Interface Type
12.3.3 Resolution of Symbolic References
12.4.1 When Initialization Occurs12.5 Creation of New Class Instances
12.4.2 Detailed Initialization Procedure
12.4.3 Initialization: Implications for Code Generation
12.6 Finalization of Class Instances12.6.1 Implementing Finalization12.7 Unloading of Classes and Interfaces12.6.1.1 Interaction with the Memory Model12.6.2 Finalizer Invocations are Not Ordered
12.8 Program Exit
13.1 The Form of a Binary14 Blocks and Statements
13.2 What Binary Compatibility Is and Is Not
13.3 Evolution of Packages
13.4 Evolution of Classes13.4.1 abstract Classes13.5 Evolution of Interfaces
13.4.2 final Classes
13.4.3 public Classes
13.4.4 Superclasses and Superinterfaces
13.4.5 Class Formal Type Parameters
13.4.6 Class Body and Member Declarations
13.4.7 Access to Members and Constructors
13.4.8 Field Declarations
13.4.9 final Fields and Constants
13.4.10 static Fields
13.4.11 transient Fields
13.4.12 Method and Constructor Declarations
13.4.13 Method and Constructor Formal Type Parameters
13.4.14 Method and Constructor Parameters
13.4.15 Method Result Type
13.4.16 abstract Methods
13.4.17 final Methods
13.4.18 native Methods
13.4.19 static Methods
13.4.20 synchronized Methods
13.4.21 Method and Constructor Throws
13.4.22 Method and Constructor Body
13.4.23 Method and Constructor Overloading
13.4.24 Method Overriding
13.4.25 Static Initializers
13.4.26 Evolution of Enums
13.5.1 public Interfaces
13.5.2 Superinterfaces
13.5.3 The Interface Members
13.5.4 Interface Formal Type Parameters
13.5.5 Field Declarations
13.5.6 Abstract Method Declarations
13.5.7 Evolution of Annotation Types
14.1 Normal and Abrupt Completion of Statements15 Expressions
14.2 Blocks
14.3 Local Class Declarations
14.4 Local Variable Declaration Statements
14.4.1 Local Variable Declarators and Types14.5 Statements
14.4.2 Scope of Local Variable Declarations
14.4.3 Shadowing of Names by Local Variables
14.4.4 Execution of Local Variable Declarations
14.6 The Empty Statement
14.7 Labeled Statements
14.8 Expression Statements
14.9 The if Statement
14.9.1 The if-then Statement14.10 The assert Statement
14.9.2 The if-then-else Statement
14.11 The switch Statement
14.12 The while Statement
14.12.1 Abrupt Completion14.13 The do Statement
14.13.1 Abrupt Completion14.14 The for Statement
14.13.2 Example of do statement
14.14.1 The basic for Statement14.15 The break Statement
14.14.1.1 Initialization of for statement14.14.2 The enhanced for statement
14.14.1.2 Iteration of for statement
14.14.1.3 Abrupt Completion of for statement
14.16 The continue Statement
14.17 The return Statement
14.18 The throw Statement
14.19 The synchronized Statement
14.20 The try statement
14.20.1 Execution of try-catch14.21 Unreachable Statements
14.20.2 Execution of try-catch-finally
15.1 Evaluation, Denotation, and Result16 Definite Assignment
15.2 Variables as Values
15.3 Type of an Expression
15.4 FP-strict Expressions
15.5 Expressions and Run-Time Checks
15.6 Normal and Abrupt Completion of Evaluation
15.7 Evaluation Order
15.7.1 Evaluate Left-Hand Operand First15.8 Primary Expressions
15.7.2 Evaluate Operands before Operation
15.7.3 Evaluation Respects Parentheses and Precedence
15.7.4 Argument Lists are Evaluated Left-to-Right
15.7.5 Evaluation Order for Other Expressions
15.8.1 Lexical Literals15.9 Class Instance Creation Expressions
15.8.2 Class Literals
15.8.3this
15.8.4 Qualifiedthis
15.8.5 Parenthesized Expressions
15.9.1 Determining the Class being Instantiated15.10 Array Creation Expressions
15.9.2 Determining Enclosing Instances
15.9.3 Choosing the Constructor and its Arguments
15.9.4 Run-time Evaluation of Class Instance Creation Expressions
15.9.5 Anonymous Class Declarations15.9.5.1 Anonymous Constructors15.9.6 Example: Evaluation Order and Out-of-Memory Detection
15.10.1 Run-time Evaluation of Array Creation Expressions15.11 Field Access Expressions
15.10.2 Example: Array Creation Evaluation Order
15.10.3 Example: Array Creation and Out-of-Memory Detection
15.11.1 Field Access Using a Primary15.12 Method Invocation Expressions
15.11.2 Accessing Superclass Members usingsuper
15.12.1 Compile-Time Step 1: Determine Class or Interface to Search15.13 Array Access Expressions
15.12.2 Compile-Time Step 2: Determine Method Signature
15.12.2.1 Identify Potentially Applicable Methods15.12.3 Compile-Time Step 3: Is the Chosen Method Appropriate?
15.12.2.2 Phase 1: Identify Matching Arity Methods Applicable by Subtyping
15.12.2.3 Phase 2: Identify Matching Arity Methods Applicable by Method Invocation Conversion
15.12.2.4 Phase 3: Identify Applicable Variable Arity Methods
15.12.2.5 Choosing the Most Specific Method
15.12.2.6 Method Result and Throws Types
15.12.2.7 Inferring Type Arguments Based on Actual Arguments
15.12.2.8 Inferring Unresolved Type Arguments
15.12.2.9 Examples
15.12.2.10 Example: Overloading Ambiguity
15.12.2.11 Example: Return Type Not Considered
15.12.2.12 Example: Compile-Time Resolution
15.12.4 Runtime Evaluation of Method Invocation
15.12.4.1 Compute Target Reference (If Necessary)
15.12.4.2 Evaluate Arguments
15.12.4.3 Check Accessibility of Type and Method
15.12.4.4 Locate Method to Invoke
15.12.4.5 Create Frame, Synchronize, Transfer Control
15.12.4.6 Example: Target Reference and Static Methods
15.12.4.7 Example: Evaluation Order
15.12.4.8 Example: Overriding
15.12.4.9 Example: Method Invocation using super
15.13.1 Runtime Evaluation of Array Access15.14 Postfix Expressions
15.13.2 Examples: Array Access Evaluation Order
15.14.1 Expression Names15.15 Unary Operators
15.14.2 Postfix Increment Operator ++
15.14.3 Postfix Decrement Operator --
15.15.1 Prefix Increment Operator ++15.16 Cast Expressions
15.15.2 Prefix Decrement Operator --
15.15.3 Unary Plus Operator +
15.15.4 Unary Minus Operator -
15.15.5 Bitwise Complement Operator ~
15.15.6 Logical Complement Operator !
15.17 Multiplicative Operators
15.17.1 Multiplication Operator *15.18 Additive Operators
15.17.2 Division Operator /
15.17.3 Remainder Operator %
15.18.1 String Concatenation Operator +15.19 Shift Operators
15.18.1.1 String Conversion15.18.2 Additive Operators (+ and -) for Numeric Types
15.18.1.2 Optimization of String Concatenation
15.18.1.3 Examples of String Concatenation
15.20 Relational Operators
15.20.1 Numerical Comparison Operators <, <=, >, and >=15.21 Equality Operators
15.20.2 Type Comparison Operator instanceof
15.21.1 Numerical Equality Operators == and !=15.22 Bitwise and Logical Operators
15.21.2 Boolean Equality Operators == and !=
15.21.3 Reference Equality Operators == and !=
15.22.1 Integer Bitwise Operators &, ^, and |15.23 Conditional-And Operator &&
15.22.2 Boolean Logical Operators &, ^, and |
15.24 Conditional-Or Operator ||
15.25 Conditional Operator ? :
15.26 Assignment Operators
15.26.1 Simple Assignment Operator =15.27 Expression
15.26.2 Compound Assignment Operators
15.28 Constant Expression
16.1 Definite Assignment and Expressions17 Threads and Locks
16.1.1 Boolean Constant Expressions16.2 Definite Assignment and Statements
16.1.2 The Boolean Operator &&
16.1.3 The Boolean Operator ||
16.1.4 The Boolean Operator !
16.1.5 The Boolean Operator ? :
16.1.6 The Conditional Operator ? :
16.1.7 Other Expressions of Type boolean
16.1.8 Assignment Expressions
16.1.9 Operators ++ and --
16.1.10 Other Expressions
16.2.1 Empty Statements16.3 Definite Assignment and Parameters
16.2.2 Blocks
16.2.3 Local Class Declaration Statements
16.2.4 Local Variable Declaration Statements
16.2.5 Labeled Statements
16.2.6 Expression Statements
16.2.7 if Statements
16.2.8 assert Statements
16.2.9 switch Statements
16.2.10 while Statements
16.2.11 do Statements
16.2.12 for Statements
16.2.12.1 Initialization Part16.2.13 break, continue, return, and throw Statements
16.2.12.2 Incrementation Part
16.2.14 synchronized Statements
16.2.15 try Statements
16.4 Definite Assignment and Array Initializers
16.5 Definite Assignment and Enum Constants
16.6 Definite Assignment and Anonymous Classes
16.7 Definite Assignment and Member Types
16.8 Definite Assignment and Static Initializers
16.9 Definite Assignment, Constructors, and Instance Initializers
17.1 Locks18 Syntax
17.2 Notation in Examples
17.3 Incorrectly Synchronized Programs Exhibit Surprising Behaviors
17.4 Memory Model
17.4.1 Shared Variables17.5 Final Field Semantics
17.4.2 Actions
17.4.3 Programs and Program Order
17.4.4 Synchronization Order
17.4.5 Happens-before Order
17.4.6 Executions
17.4.7 Well-Formed Executions
17.4.8 Executions and Causality Requirements
17.4.9 Observable Behavior and Nonterminating Executions
17.5.1 Semantics of Final Fields17.6 Word Tearing
17.5.2 Reading Final Fields During Construction
17.5.3 Subsequent Modification of Final Fields
17.5.4 Write Protected Fields
17.7 Non-atomic Treatment ofdouble
andlong
17.8 Wait Sets and Notification
17.8.1 Wait17.9 Sleep and Yield
17.8.2 Notification
17.8.3 Interruptions
17.8.4 Interactions of Waits, Notification and Interruption
18.1 The Grammar of the Java Programming LanguageIndex
Copyright 1996-2005 Sun Microsystems, Inc. All rights reserved.