SKIP THE SHIPPING
Use code NOSHIP during checkout to save 40% on eligible eBooks, now through January 5. Shop now.
This eBook includes the following formats, accessible from your Account page after purchase:
EPUB The open industry format known for its reflowable content and usability on supported mobile devices.
PDF The popular standard, used most often with the free Acrobat® Reader® software.
This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
Also available in other formats.
Register your product to gain access to bonus material or receive a coupon.
Written by the inventors of the technology, The Java® Language Specification, Java SE 8 Edition is the definitive technical reference for the Java programming language.
The book provides complete, accurate, and detailed coverage of the Java programming language. It fully describes the new features added in Java SE 8, including lambda expressions, method references, default methods, type annotations, and repeating annotations. The book also includes many explanatory notes and carefully distinguishes the formal rules of the language from the practical behavior of compilers.
Preface to the Java SE 8 Edition xxi
Chapter 1: Introduction 1
1.1 Organization of the Specification 2
1.2 Example Programs 6
1.3 Notation 6
1.4 Relationship to Predefined Classes and Interfaces 7
1.5 Feedback 7
1.6 References 7
Chapter 2: Grammars 9
2.1 Context-Free Grammars 9
2.2 The Lexical Grammar 9
2.3 The Syntactic Grammar 10
2.4 Grammar Notation 10
Chapter 3: Lexical Structure 15
3.1 Unicode 15
3.2 Lexical Translations 16
3.3 Unicode Escapes 17
3.4 Line Terminators 19
3.5 Input Elements and Tokens 19
3.6 White Space 20
3.7 Comments 21
3.8 Identifiers 22
3.9 Keywords 24
3.10 Literals 24
3.11 Separators 38
3.12 Operators 38
Chapter 4: Types, Values, and Variables 41
4.1 The Kinds of Types and Values 41
4.2 Primitive Types and Values 42
4.3 Reference Types and Values 52
4.4 Type Variables 57
4.5 Parameterized Types 59
4.6 Type Erasure 64
4.7 Reifiable Types 64
4.8 Raw Types 66
4.9 Intersection Types 70
4.10 Subtyping 71
4.11 Where Types Are Used 75
4.12 Variables 80
Chapter 5: Conversions and Contexts 91
5.1 Kinds of Conversion 94
5.2 Assignment Contexts 107
5.3 Invocation Contexts 112
5.4 String Contexts 114
5.5 Casting Contexts 114
5.6 Numeric Contexts 124
Chapter 6: Names 129
6.1 Declarations 130
6.2 Names and Identifiers 137
6.3 Scope of a Declaration 139
6.4 Shadowing and Obscuring 142
6.5 Determining the Meaning of a Name 148
6.6 Access Control 161
6.7 Fully Qualified Names and Canonical Names 169
Chapter 7: Packages 173
7.1 Package Members 173
7.3 Compilation Units 177
7.4 Package Declarations 178
7.5 Import Declarations 180
7.6 Top Level Type Declarations 185
Chapter 8: Classes 189
8.1 Class Declarations 191
8.2 Class Members 206
8.3 Field Declarations 211
8.4 Method Declarations 225
8.5 Member Type Declarations 254
8.6 Instance Initializers 255
8.7 Static Initializers 255
8.8 Constructor Declarations 256
8.9 Enum Types 266
Chapter 9: Interfaces 277
9.1 Interface Declarations 278
9.2 Interface Members 282
9.3 Field (Constant) Declarations 283
9.4 Method Declarations 286
9.5 Member Type Declarations 291
9.6 Annotation Types 292
9.7 Annotations 308
9.8 Functional Interfaces 319
9.9 Function Types 323
Chapter 10: Arrays 329
10.1 Array Types 330
10.2 Array Variables 330
10.3 Array Creation 332
10.4 Array Access 332
10.5 Array Store Exception 333
10.6 Array Initializers 335
10.7 Array Members 336
10.8 Class Objects for Arrays 338
10.9 An Array of Characters Is Not a String 339
Chapter 11: Exceptions 341
11.1 The Kinds and Causes of Exceptions 342
11.2 Compile-Time Checking of Exceptions 344
11.3 Run-Time Handling of an Exception 349
Chapter 12: Execution 353
12.1 Java Virtual Machine Startup 353
12.2 Loading of Classes and Interfaces 356
12.3 Linking of Classes and Interfaces 358
12.4 Initialization of Classes and Interfaces 360
12.5 Creation of New Class Instances 365
12.6 Finalization of Class Instances 369
12.7 Unloading of Classes and Interfaces 373
12.8 Program Exit 374
Chapter 13: Binary Compatibility 375
13.1 The Form of a Binary 376
13.2 What Binary Compatibility Is and Is Not 382
13.3 Evolution of Packages 383
13.4 Evolution of Classes 383
13.5 Evolution of Interfaces 400
Chapter 14: Blocks and Statements 405
14.1 Normal and Abrupt Completion of Statements 405
14.2 Blocks 407
14.3 Local Class Declarations 407
14.4 Local Variable Declaration Statements 408
14.5 Statements 410
14.6 The Empty Statement 412
14.7 Labeled Statements 413
14.8 Expression Statements 414
14.9 The if Statement 415
14.10 The assert Statement 416
14.11 The switch Statement 419
14.12 The while Statement 423
14.13 The do Statement 424
14.14 The for Statement 426
14.15 The break Statement 432
14.16 The continue Statement 434
14.17 The return Statement 436
14.18 The throw Statement 437
14.19 The synchronized Statement 439
14.20 The try statement 440
14.21 Unreachable Statements 452
Chapter 15: Expressions 459
15.1 Evaluation, Denotation, and Result 459
15.2 Forms of Expressions 460
15.3 Type of an Expression 461
15.4 FP-strict Expressions 462
15.5 Expressions and Run-Time Checks 462
15.6 Normal and Abrupt Completion of Evaluation 464
15.7 Evaluation Order 466
15.8 Primary Expressions 471
15.9 Class Instance Creation Expressions 476
15.10 Array Creation and Access Expressions 487
15.11 Field Access Expressions 494
15.12 Method Invocation Expressions 499
15.13 Method Reference Expressions 529
15.14 Postfix Expressions 542
15.15 Unary Operators 544
15.16 Cast Expressions 549
15.17 Multiplicative Operators 550
15.18 Additive Operators 556
15.19 Shift Operators 561
15.20 Relational Operators 562
15.21 Equality Operators 565
15.22 Bitwise and Logical Operators 568
15.23 Conditional-And Operator && 570
15.24 Conditional-Or Operator || 570
15.25 Conditional Operator ? : 571
15.26 Assignment Operators 581
15.27 Lambda Expressions 594
15.28 Constant Expressions 605
Chapter 16: Definite Assignment 607
16.1 Definite Assignment and Expressions 613
16.2 Definite Assignment and Statements 617
16.3 Definite Assignment and Parameters 626
16.4 Definite Assignment and Array Initializers 626
16.5 Definite Assignment and Enum Constants 626
16.6 Definite Assignment and Anonymous Classes 627
16.7 Definite Assignment and Member Types 627
16.8 Definite Assignment and Static Initializers 628
16.9 Definite Assignment, Constructors, and Instance Initializers 628
Chapter 17: Threads and Locks 631
17.1 Synchronization 632
17.2 Wait Sets and Notification 632
17.3 Sleep and Yield 636
17.4 Memory Model 637
17.5 final Field Semantics 652
17.6 Word Tearing 657
17.7 Non-Atomic Treatment of double and long 658
Chapter 18: Type Inference 659
18.1 Concepts and Notation 660
18.2 Reduction 663
18.3 Incorporation 673
18.4 Resolution 675
18.5 Uses of Inference 677
Chapter 19: Syntax 689
Index 715
Appendix A: Limited License Grant 755