Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java_language_specification_7.pdf
Скачиваний:
13
Добавлен:
21.03.2016
Размер:
3.11 Mб
Скачать

The Java™ Language

Specification

Java SE 7 Edition

James Gosling

Bill Joy

Guy Steele

Gilad Bracha

Alex Buckley

2012-02-06

Specification: JSR-000901 Java™ Language Specification ("Specification")

Version: 7

Status: Final Release

Release: July 2011

Copyright © 2011 Oracle America, Inc. and/or its affiliates. All rights reserved. 500 Oracle Parkway M/S 5op7, California 94065, U.S.A.

LIMITED LICENSE GRANTS

1.License for Evaluation Purposes. Oracle hereby grants you a fully-paid, non-exclusive, non-transferable, worldwide, limited license (without the right to sublicense), under Oracle's applicable intellectual property rights to view, download, use and reproduce the Specification only for the purpose of internal evaluation. This includes (i) developing applications intended to run on an implementation of the Specification, provided that such applications do not themselves implement any portion(s) of the Specification, and (ii) discussing the Specification with any third party; and (iii) excerpting brief portions of the Specification in oral or written communications which discuss the Specification provided that such excerpts do not in the aggregate constitute a significant portion of the Specification.

2.License for the Distribution of Compliant Implementations. Oracle also grants you a perpetual, non-exclusive, non-transferable, worldwide, fully paid-up, royalty free, limited license (without the right to sublicense) under any applicable copyrights or, subject to the provisions of subsection 4 below, patent rights it may have covering the Specification to create and/or distribute an Independent Implementation of the Specification that: (a) fully implements the Specification including all its required interfaces and functionality; (b) does not modify, subset, superset or otherwise extend the Licensor Name Space, or include any public or protected packages, classes, Java interfaces, fields or methods within the Licensor Name Space other than those required/authorized by the Specification or Specifications being implemented; and (c) passes the Technology Compatibility Kit (including satisfying the requirements of the applicable TCK Users Guide) for such Specification ("Compliant Implementation"). In addition, the foregoing license is expressly conditioned on your not acting outside its scope. No license is granted hereunder for any other purpose (including, for example, modifying the Specification, other than to the extent of your fair use rights, or distributing the Specification to third parties). Also, no right, title, or interest in or to any trademarks, service marks, or trade names of Oracle or Oracle's licensors is granted hereunder. Java, and Java-related logos, marks and names are trademarks or registered trademarks of Oracle in the U.S. and other countries.

3.Pass-through Conditions. You need not include limitations (a)-(c) from the previous paragraph or any other particular "pass through" requirements in any license You grant concerning the use of your Independent Implementation or products derived from it. However, except with respect to Independent Implementations (and products derived from them) that satisfy limitations (a)-(c) from the previous paragraph, You may neither: (a) grant or otherwise pass through to your licensees any licenses under Oracle's applicable intellectual property rights; nor (b) authorize your licensees to make any claims concerning their implementation's compliance with the Specification in question.

4. Reciprocity Concerning Patent Licenses.

a.With respect to any patent claims covered by the license granted under subparagraph 2 above that would be infringed by all technically feasible implementations of the Specification, such license is conditioned upon your offering on fair, reasonable and nondiscriminatory terms, to any party seeking it from You, a perpetual, non-exclusive, nontransferable, worldwide license under Your patent rights which are or would be infringed by all technically feasible implementations of the Specification to develop, distribute and use a Compliant Implementation.

b.With respect to any patent claims owned by Oracle and covered by the license granted under subparagraph 2, whether or not their infringement can be avoided in a technically feasible manner when implementing the Specification, such license shall terminate with respect to such claims if You initiate a claim against Oracle that it has, in the course of performing its responsibilities as the Specification Lead, induced any other entity to infringe Your patent rights.

c.Also with respect to any patent claims owned by Oracle and covered by the license granted under subparagraph 2 above, where the infringement of such claims can be avoided in a technically feasible manner when implementing the Specification such license, with respect to such claims, shall terminate if You initiate a claim against Oracle that its making, having made, using, offering to sell, selling or importing a Compliant Implementation infringes Your patent rights.

5. Definitions. For the purposes of this Agreement: "Independent Implementation" shall mean an implementation of the Specification that neither derives from any of Oracle's source code or binary code materials nor, except with an appropriate and separate license from Oracle, includes any of Oracle's source code or binary code materials; "Licensor Name Space" shall mean the public class or interface declarations whose names begin with "java", "javax", "com.sun" or their equivalents in any subsequent naming convention adopted by Oracle through the Java Community Process, or any recognized successors or replacements thereof; and "Technology Compatibility Kit" or "TCK" shall mean the test suite and accompanying TCK User's Guide provided by Oracle which corresponds to the Specification and that was available either (i) from Oracle 120 days before the first release of Your Independent Implementation that allows its use for commercial purposes, or (ii) more recently than 120 days from such release but against which You elect to test Your implementation of the Specification.

This Agreement will terminate immediately without notice from Oracle if you breach the Agreement or act outside the scope of the licenses granted above.

DISCLAIMER OF WARRANTIES

THE SPECIFICATION IS PROVIDED "AS IS". ORACLE MAKES NO REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT (INCLUDING AS A CONSEQUENCE OF ANY PRACTICE OR IMPLEMENTATION OF THE SPECIFICATION), OR THAT THE CONTENTS OF THE SPECIFICATION ARE SUITABLE FOR ANY PURPOSE. This document does not represent any commitment to release or implement any portion of the Specification in any product. In addition, the Specification could include technical inaccuracies or typographical errors.

LIMITATION OF LIABILITY

TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL ORACLE OR ITS LICENSORS BE LIABLE FOR ANY DAMAGES, INCLUDING WITHOUT LIMITATION, LOST REVENUE, PROFITS OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED IN ANY WAY TO YOUR HAVING, IMPLEMENTING OR OTHERWISE USING THE SPECIFICATION, EVEN IF ORACLE AND/OR ITS LICENSORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

You will indemnify, hold harmless, and defend Oracle and its licensors from any claims arising or resulting from: (i) your use of the Specification; (ii) the use or distribution of your Java application, applet and/or implementation; and/or (iii) any claims that later versions or releases of any Specification furnished to you are incompatible with the Specification provided to you under this license.

RESTRICTED RIGHTS LEGEND

U.S. Government: If this Specification is being acquired by or on behalf of the U.S. Government or by a U.S. Government prime contractor or subcontractor (at any tier), then the Government's rights in the Software and accompanying documentation shall be only as set forth in this license; this is in accordance with 48 C.F.R. 227.7201 through 227.7202-4 (for Department of Defense (DoD) acquisitions) and with 48 C.F.R. 2.101 and 12.212 (for non-DoD acquisitions).

REPORT

If you provide Oracle with any comments or suggestions concerning the Specification ("Feedback"), you hereby: (i) agree that such Feedback is provided on a non-proprietary and non-confidential basis, and (ii) grant Oracle a perpetual, non-exclusive, worldwide, fully paid-up, irrevocable license, with the right to sublicense through multiple levels of sublicensees, to incorporate, disclose, and use without limitation the Feedback for any purpose.

GENERAL TERMS

Any action related to this Agreement will be governed by California law and controlling U.S. federal law. The U.N. Convention for the International Sale of Goods and the choice of law rules of any jurisdiction will not apply.

The Specification is subject to U.S. export control laws and may be subject to export or import regulations in other countries. Licensee agrees to comply strictly with all such laws and regulations and acknowledges that it has the responsibility to obtain such licenses to export, re-export or import as may be required after delivery to Licensee.

This Agreement is the parties' entire agreement relating to its subject matter. It supersedes all prior or contemporaneous oral or written communications, proposals, conditions, representations and warranties and prevails over any conflicting or additional terms of any quote, order, acknowledgment, or other communication between the parties relating to its subject matter during the term of this Agreement. No modification to this Agreement will be binding, unless in writing and signed by an authorized representative of each party.

Table of Contents

Preface to the First Edition xv

Preface to the Second Edition xix

Preface to the Third Edition xxi

Preface to the Java SE 7 Edition xxv

1Introduction 1

1.1Organization of the Specification 2

1.2Example Programs 5

1.3Notation 6

1.4Relationship to Predefined Classes and Interfaces 6

1.5References 7

2Grammars 9

2.1Context-Free Grammars 9

2.2The Lexical Grammar 9

2.3The Syntactic Grammar 10

2.4Grammar Notation 10

3Lexical Structure 15

3.1Unicode 15

3.2Lexical Translations 16

3.3Unicode Escapes 17

3.4Line Terminators 18

3.5Input Elements and Tokens 19

3.6White Space 21

3.7Comments 21

3.8Identifiers 23

3.9Keywords 24

3.10Literals 25

3.10.1Integer Literals 25

3.10.2Floating-Point Literals 32

3.10.3Boolean Literals 35

3.10.4Character Literals 35

3.10.5String Literals 36

3.10.6Escape Sequences for Character and String Literals 39

iii

The Java™ Language Specification

3.10.7 The Null Literal 39

3.11Separators 40

3.12Operators 40

4Types, Values, and Variables 41

4.1The Kinds of Types and Values 41

4.2Primitive Types and Values 42

4.2.1Integral Types and Values 43

4.2.2Integer Operations 43

4.2.3Floating-Point Types, Formats, and Values 45

4.2.4Floating-Point Operations 48

4.2.5The boolean Type and boolean Values 51

4.3Reference Types and Values 52

4.3.1Objects 54

4.3.2The Class Object 56

4.3.3The Class String 57

4.3.4When Reference Types Are the Same 57

4.4Type Variables 58

4.5Parameterized Types 60

4.5.1Type Arguments and Wildcards 61

4.5.2Members and Constructors of Parameterized Types 64

4.6Type Erasure 65

4.7Reifiable Types 66

4.8Raw Types 67

4.9Intersection Types 71

4.10Subtyping 72

4.10.1Subtyping among Primitive Types 72

4.10.2Subtyping among Class and Interface Types 73

4.10.3Subtyping among Array Types 73

4.11Where Types Are Used 74

4.12Variables 75

4.12.1Variables of Primitive Type 76

4.12.2Variables of Reference Type 76

4.12.3Kinds of Variables 78

4.12.4final Variables 80

4.12.5Initial Values of Variables 81

4.12.6Types, Classes, and Interfaces 82

5Conversions and Promotions 85

5.1Kinds of Conversion 88

5.1.1Identity Conversion 88

5.1.2Widening Primitive Conversion 88

5.1.3Narrowing Primitive Conversion 90

5.1.4Widening and Narrowing Primitive Conversion 93

5.1.5Widening Reference Conversion 93

5.1.6Narrowing Reference Conversion 93

5.1.7Boxing Conversion 94

iv

The Java™ Language Specification

5.1.8Unboxing Conversion 95

5.1.9Unchecked Conversion 97

5.1.10Capture Conversion 97

5.1.11String Conversion 99

5.1.12Forbidden Conversions 100

5.1.13Value Set Conversion 100

5.2Assignment Conversion 101

5.3Method Invocation Conversion 106

5.4String Conversion 108

5.5Casting Conversion 108

5.5.1Reference Type Casting 111

5.5.2Checked Casts and Unchecked Casts 115

5.5.3Checked Casts at Run-time 116

5.6Numeric Promotions 117

5.6.1Unary Numeric Promotion 118

5.6.2Binary Numeric Promotion 119

6Names 121

6.1Declarations 122

6.2Names and Identifiers 127

6.3Scope of a Declaration 130

6.4Shadowing and Obscuring 133

6.4.1Shadowing 135

6.4.2Obscuring 138

6.5Determining the Meaning of a Name 140

6.5.1Syntactic Classification of a Name According to Context 141

6.5.2Reclassification of Contextually Ambiguous Names 143

6.5.3Meaning of Package Names 145

6.5.3.1Simple Package Names 145

6.5.3.2Qualified Package Names 146

6.5.4Meaning of PackageOrTypeNames 146

6.5.4.1Simple PackageOrTypeNames 146

6.5.4.2Qualified PackageOrTypeNames 146

6.5.5Meaning of Type Names 146

6.5.5.1Simple Type Names 146

6.5.5.2Qualified Type Names 146

6.5.6Meaning of Expression Names 147

6.5.6.1Simple Expression Names 147

6.5.6.2Qualified Expression Names 148

6.5.7Meaning of Method Names 151

6.5.7.1Simple Method Names 151

6.5.7.2Qualified Method Names 151

6.6Access Control 152

6.6.1Determining Accessibility 153

6.6.2Details on protected Access 157

6.6.2.1Access to a protected Member 157

6.6.2.2Qualified Access to a protected Constructor 158

v

The Java™ Language Specification

6.7Fully Qualified Names and Canonical Names 159

7Packages 163

7.1Package Members 163

7.2Host Support for Packages 165

7.3Compilation Units 167

7.4Package Declarations 168

7.4.1Named Packages 168

7.4.2Unnamed Packages 169

7.4.3Observability of a Package 170

7.5Import Declarations 170

7.5.1Single-Type-Import Declarations 171

7.5.2Type-Import-on-Demand Declarations 173

7.5.3Single-Static-Import Declarations 174

7.5.4Static-Import-on-Demand Declarations 175

7.6Top Level Type Declarations 175

8Classes 179

8.1Class Declarations 181

8.1.1Class Modifiers 181

8.1.1.1abstract Classes 182

8.1.1.2final Classes 184

8.1.1.3strictfp Classes 184

8.1.2Generic Classes and Type Parameters 185

8.1.3Inner Classes and Enclosing Instances 187

8.1.4Superclasses and Subclasses 190

8.1.5Superinterfaces 192

8.1.6Class Body and Member Declarations 195

8.2Class Members 196

8.3Field Declarations 201

8.3.1Field Modifiers 205

8.3.1.1static Fields 205

8.3.1.2final Fields 209

8.3.1.3transient Fields 209

8.3.1.4volatile Fields 209

8.3.2Initialization of Fields 211

8.3.2.1Initializers for Class Variables 211

8.3.2.2Initializers for Instance Variables 212

8.3.2.3Restrictions on the use of Fields during

Initialization 212

8.4Method Declarations 215

8.4.1Formal Parameters 216

8.4.2Method Signature 219

8.4.3Method Modifiers 220

8.4.3.1abstract Methods 221

8.4.3.2static Methods 222

8.4.3.3final Methods 223

vi

The Java™ Language Specification

8.4.3.4native Methods 224

8.4.3.5strictfp Methods 224

8.4.3.6synchronized Methods 224

8.4.4Generic Methods 226

8.4.5Method Return Type 226

8.4.6Method Throws 227

8.4.7Method Body 228

8.4.8Inheritance, Overriding, and Hiding 229

8.4.8.1Overriding (by Instance Methods) 229

8.4.8.2Hiding (by Class Methods) 232

8.4.8.3Requirements in Overriding and Hiding 233

8.4.8.4Inheriting Methods with Override-Equivalent

Signatures 237

8.4.9Overloading 238

8.5Member Type Declarations 242

8.5.1Static Member Type Declarations 242

8.6Instance Initializers 243

8.7Static Initializers 243

8.8Constructor Declarations 244

8.8.1Formal Parameters and Type Parameters 245

8.8.2Constructor Signature 245

8.8.3Constructor Modifiers 245

8.8.4Generic Constructors 246

8.8.5Constructor Throws 247

8.8.6The Type of a Constructor 247

8.8.7Constructor Body 247

8.8.7.1 Explicit Constructor Invocations 248

8.8.8Constructor Overloading 251

8.8.9Default Constructor 251

8.8.10Preventing Instantiation of a Class 253

8.9Enums 253

8.9.1Enum Constants 254

8.9.2Enum Body Declarations 256

9Interfaces 263

9.1Interface Declarations 264

9.1.1Interface Modifiers 264

9.1.1.1abstract Interfaces 265

9.1.1.2strictfp Interfaces 265

9.1.2Generic Interfaces and Type Parameters 265

9.1.3Superinterfaces and Subinterfaces 266

9.1.4Interface Body and Member Declarations 267

9.2Interface Members 268

9.3Field (Constant) Declarations 269

9.3.1Initialization of Fields in Interfaces 271

9.4Abstract Method Declarations 271

9.4.1Inheritance and Overriding 272

vii

The Java™ Language Specification

9.4.1.1Overriding (by Instance Methods) 273

9.4.1.2Requirements in Overriding 273

9.4.1.3Inheriting Methods with Override-Equivalent Signatures 273

9.4.2Overloading 274

9.5Member Type Declarations 274

9.6Annotation Types 275

9.6.1Annotation Type Elements 276

9.6.2Defaults for Annotation Type Elements 280

9.6.3Predefined Annotation Types 280

9.6.3.1@Target 280

9.6.3.2@Retention 281

9.6.3.3@Inherited 281

9.6.3.4@Override 282

9.6.3.5@SuppressWarnings 283

9.6.3.6@Deprecated 283

9.6.3.7@SafeVarargs 284

9.7Annotations 285

9.7.1Normal Annotations 286

9.7.2Marker Annotations 288

9.7.3Single-Element Annotations 289

10Arrays 291

10.1Array Types 292

10.2Array Variables 292

10.3Array Creation 294

10.4Array Access 294

10.5Array Store Exception 295

10.6Array Initializers 297

10.7Array Members 298

10.8Class Objects for Arrays 300

10.9An Array of Characters is Not a String 301

11Exceptions 303

11.1The Kinds and Causes of Exceptions 304

11.1.1The Kinds of Exceptions 304

11.1.2The Causes of Exceptions 305

11.1.3Asynchronous Exceptions 305

11.2Compile-Time Checking of Exceptions 306

11.2.1Exception Analysis of Expressions 308

11.2.2Exception Analysis of Statements 308

11.2.3Exception Checking 309

11.3Run-Time Handling of an Exception 311

12Execution 315

12.1Java virtual machine Start-Up 315

viii

The Java™ Language Specification

12.1.1Load the Class Test 316

12.1.2Link Test: Verify, Prepare, (Optionally) Resolve 316

12.1.3Initialize Test: Execute Initializers 317

12.1.4Invoke Test.main 318

12.2Loading of Classes and Interfaces 318

12.2.1The Loading Process 319

12.3Linking of Classes and Interfaces 320

12.3.1Verification of the Binary Representation 320

12.3.2Preparation of a Class or Interface Type 321

12.3.3Resolution of Symbolic References 321

12.4Initialization of Classes and Interfaces 322

12.4.1When Initialization Occurs 323

12.4.2Detailed Initialization Procedure 325

12.5Creation of New Class Instances 327

12.6Finalization of Class Instances 331

12.6.1Implementing Finalization 332

12.6.2Interaction with the Memory Model 334

12.7Unloading of Classes and Interfaces 335

12.8Program Exit 336

13Binary Compatibility 337

13.1The Form of a Binary 338

13.2What Binary Compatibility Is and Is Not 343

13.3Evolution of Packages 344

13.4Evolution of Classes 344

13.4.1abstract Classes 344

13.4.2final Classes 344

13.4.3public Classes 345

13.4.4Superclasses and Superinterfaces 345

13.4.5Class Type Parameters 346

13.4.6Class Body and Member Declarations 347

13.4.7Access to Members and Constructors 348

13.4.8Field Declarations 350

13.4.9final Fields and Constants 352

13.4.10static Fields 354

13.4.11transient Fields 354

13.4.12Method and Constructor Declarations 354

13.4.13Method and Constructor Type Parameters 355

13.4.14Method and Constructor Formal Parameters 356

13.4.15Method Result Type 357

13.4.16abstract Methods 357

13.4.17final Methods 358

13.4.18native Methods 358

13.4.19static Methods 359

13.4.20synchronized Methods 359

13.4.21Method and Constructor Throws 359

13.4.22Method and Constructor Body 359

ix

The Java™ Language Specification

13.4.23Method and Constructor Overloading 359

13.4.24Method Overriding 361

13.4.25Static Initializers 361

13.4.26Evolution of Enums 361

13.5Evolution of Interfaces 361

13.5.1public Interfaces 361

13.5.2Superinterfaces 362

13.5.3Interface Members 362

13.5.4Interface Type Parameters 362

13.5.5Field Declarations 363

13.5.6abstract Methods 363

13.5.7Evolution of Annotation Types 363

14Blocks and Statements 365

14.1Normal and Abrupt Completion of Statements 365

14.2Blocks 367

14.3Local Class Declarations 367

14.4Local Variable Declaration Statements 369

14.4.1Local Variable Declarators and Types 370

14.4.2Execution of Local Variable Declarations 370

14.5Statements 371

14.6The Empty Statement 373

14.7Labeled Statements 373

14.8Expression Statements 374

14.9The if Statement 375

14.9.1The if-then Statement 375

14.9.2The if-then-else Statement 376

14.10The assert Statement 376

14.11The switch Statement 379

14.12The while Statement 383

14.12.1Abrupt Completion of while Statement 384

14.13The do Statement 385

14.13.1Abrupt Completion of do Statement 385

14.14The for Statement 387

14.14.1The basic for Statement 387

14.14.1.1Initialization of for Statement 388

14.14.1.2Iteration of for Statement 388

14.14.1.3Abrupt Completion of for Statement 389

14.14.2The enhanced for statement 390

14.15The break Statement 392

14.16The continue Statement 394

14.17The return Statement 396

14.18The throw Statement 397

14.19The synchronized Statement 399

14.20The try statement 401

14.20.1Execution of try-catch 404

14.20.2Execution of try-finally and try-catch-finally 405

x

The Java™ Language Specification

14.20.3try-with-resources 407

14.20.3.1Basic try-with-resources 408

14.20.3.2Extended try-with-resources 411

14.21Unreachable Statements 411

15Expressions 417

15.1Evaluation, Denotation, and Result 417

15.2Variables as Values 418

15.3Type of an Expression 418

15.4FP-strict Expressions 419

15.5Expressions and Run-time Checks 419

15.6Normal and Abrupt Completion of Evaluation 421

15.7Evaluation Order 423

15.7.1Evaluate Left-Hand Operand First 423

15.7.2Evaluate Operands before Operation 425

15.7.3Evaluation Respects Parentheses and Precedence 425

15.7.4Argument Lists are Evaluated Left-to-Right 427

15.7.5Evaluation Order for Other Expressions 428

15.8Primary Expressions 428

15.8.1Lexical Literals 429

15.8.2Class Literals 430

15.8.3this 430

15.8.4Qualified this 431

15.8.5Parenthesized Expressions 432

15.9Class Instance Creation Expressions 432

15.9.1Determining the Class being Instantiated 434

15.9.2Determining Enclosing Instances 435

15.9.3Choosing the Constructor and its Arguments 437

15.9.4Run-time Evaluation of Class Instance Creation Expressions 439

15.9.5Anonymous Class Declarations 440

15.9.5.1Anonymous Constructors 441

15.10Array Creation Expressions 442

15.10.1Run-time Evaluation of Array Creation Expressions 443

15.11Field Access Expressions 446

15.11.1Field Access Using a Primary 447

15.11.2Accessing Superclass Members using super 450

15.12Method Invocation Expressions 451

15.12.1Compile-Time Step 1: Determine Class or Interface to Search 452

15.12.2Compile-Time Step 2: Determine Method Signature 453

15.12.2.1Identify Potentially Applicable Methods 459

15.12.2.2Phase 1: Identify Matching Arity Methods Applicable by Subtyping 460

15.12.2.3Phase 2: Identify Matching Arity Methods Applicable by Method Invocation Conversion 461

xi

The Java™ Language Specification

15.12.2.4Phase 3: Identify Applicable Variable Arity Methods 462

15.12.2.5Choosing the Most Specific Method 462

15.12.2.6Method Result and Throws Types 465

15.12.2.7Inferring Type Arguments Based on Actual Arguments 466

15.12.2.8Inferring Unresolved Type Arguments 477

15.12.3Compile-Time Step 3: Is the Chosen Method Appropriate? 478

15.12.4Run-time Evaluation of Method Invocation 481

15.12.4.1Compute Target Reference (If Necessary) 481

15.12.4.2Evaluate Arguments 483

15.12.4.3Check Accessibility of Type and Method 484

15.12.4.4Locate Method to Invoke 485

15.12.4.5Create Frame, Synchronize, Transfer Control 488

15.13Array Access Expressions 490

15.13.1Run-time Evaluation of Array Access 491

15.14Postfix Expressions 493

15.14.1Expression Names 493

15.14.2Postfix Increment Operator ++ 494

15.14.3Postfix Decrement Operator -- 494

15.15Unary Operators 495

15.15.1Prefix Increment Operator ++ 496

15.15.2Prefix Decrement Operator -- 497

15.15.3Unary Plus Operator + 497

15.15.4Unary Minus Operator - 498

15.15.5Bitwise Complement Operator ~ 498

15.15.6Logical Complement Operator ! 499

15.16Cast Expressions 499

15.17Multiplicative Operators 500

15.17.1Multiplication Operator * 501

15.17.2Division Operator / 502

15.17.3Remainder Operator % 503

15.18Additive Operators 506

15.18.1String Concatenation Operator + 506

15.18.2Additive Operators (+ and -) for Numeric Types 509

15.19Shift Operators 511

15.20Relational Operators 512

15.20.1Numerical Comparison Operators <, <=, >, and >= 512

15.20.2Type Comparison Operator instanceof 513

15.21Equality Operators 514

15.21.1Numerical Equality Operators == and != 515

15.21.2Boolean Equality Operators == and != 516

15.21.3Reference Equality Operators == and != 517

15.22Bitwise and Logical Operators 517

15.22.1Integer Bitwise Operators &, ^, and | 518

15.22.2Boolean Logical Operators &, ^, and | 519

15.23Conditional-And Operator && 519

15.24Conditional-Or Operator || 520

xii

The Java™ Language Specification

15.25Conditional Operator ? : 521

15.26Assignment Operators 523

15.26.1Simple Assignment Operator = 524

15.26.2Compound Assignment Operators 529

15.27Expression 535

15.28Constant Expressions 536

16Definite Assignment 539

16.1Definite Assignment and Expressions 545

16.1.1Boolean Constant Expressions 545

16.1.2Conditional-And Operator && 545

16.1.3Conditional-Or Operator || 546

16.1.4Logical Complement Operator ! 546

16.1.5Conditional Operator ? : 546

16.1.6Conditional Operator ? : 547

16.1.7Other Expressions of Type boolean 547

16.1.8Assignment Expressions 547

16.1.9Operators ++ and -- 548

16.1.10Other Expressions 548

16.2Definite Assignment and Statements 549

16.2.1Empty Statements 549

16.2.2Blocks 549

16.2.3Local Class Declaration Statements 551

16.2.4Local Variable Declaration Statements 551

16.2.5Labeled Statements 551

16.2.6Expression Statements 552

16.2.7if Statements 552

16.2.8assert Statements 552

16.2.9switch Statements 553

16.2.10while Statements 553

16.2.11do Statements 554

16.2.12for Statements 554

16.2.12.1Initialization Part of for Statement 555

16.2.12.2Incrementation Part of for Statement 555

16.2.13break, continue, return, and throw Statements 556

16.2.14synchronized Statements 556

16.2.15try Statements 556

16.3Definite Assignment and Parameters 558

16.4Definite Assignment and Array Initializers 558

16.5Definite Assignment and Enum Constants 559

16.6Definite Assignment and Anonymous Classes 559

16.7Definite Assignment and Member Types 559

16.8Definite Assignment and Static Initializers 560

16.9Definite Assignment, Constructors, and Instance Initializers 560

17Threads and Locks 563

17.1Synchronization 564

xiii

The Java™ Language Specification

17.2Wait Sets and Notification 564

17.2.1Wait 565

17.2.2Notification 566

17.2.3Interruptions 567

17.2.4Interactions of Waits, Notification, and Interruption 567

17.3Sleep and Yield 568

17.4Memory Model 569

17.4.1Shared Variables 572

17.4.2Actions 572

17.4.3Programs and Program Order 573

17.4.4Synchronization Order 574

17.4.5Happens-before Order 575

17.4.6Executions 578

17.4.7Well-Formed Executions 579

17.4.8Executions and Causality Requirements 579

17.4.9Observable Behavior and Nonterminating Executions 582

17.5final Field Semantics 584

17.5.1Semantics of final Fields 586

17.5.2Reading final Fields During Construction 586

17.5.3Subsequent Modification of final Fields 587

17.5.4Write-protected Fields 588

17.6Word Tearing 589

17.7Non-atomic Treatment of double and long 590

18Syntax 591 Index 607

xiv

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]