Tim Lindholm, Frank Yellin9780201432947, 0-201-43294-3
Table of contents :
The Java™ Language Specification……Page 1
The Java™ Series……Page 2
ADDISON-WESLEY Boston l San Francisco l New York l Toronto l Montreal London l Munich l Paris l M………Page 3
4.2.2 Integer Operations 36……Page 9
5.3 Method Invocation Conversion 99……Page 10
6.6.8 Example: private Fields, Methods, and Constructors 144……Page 11
8.2.1.2 Inheritance with public and protected 193……Page 12
8.5.2 Static Member Type Declarations 238……Page 13
9.7 Annotations 281……Page 14
12.6 Finalization of Class Instances 325……Page 15
13.5.7 Evolution of Annotation Types 358……Page 16
15.7 Evaluation Order 414……Page 17
15.12.4.3 Check Accessibility of Type and Method 475……Page 18
15.26.2 Compound Assignment Operators 518……Page 19
17.4.1 Shared Variables 558……Page 20
18.1 The Grammar of the Java Programming Language 585……Page 21
Preface……Page 23
Preface to the Second Edition……Page 27
Preface to the Third Edition……Page 31
Introduction……Page 35
javac Test.java……Page 39
1.4 References……Page 40
2.2 The Lexical Grammar……Page 43
2.4 Grammar Notation……Page 44
The Unicode standard was originally designed as a fixed-width 16-bit character encoding. It has s………Page 47
3. A translation of the stream of input characters and line terminators resulting from step 2 int………Page 48
If an eligible is not followed by u, then it is treated as a RawInputCharacter and remains part………Page 49
Lines are terminated by the ASCII characters CR, or LF, or CR LF. The two characters CR immediate………Page 50
Consider two tokens x and y in the resulting input stream. If x precedes y, then we say that ………Page 51
3.7 Comments……Page 52
3.8 Identifiers……Page 53
Unicode composite characters are different from the decomposed characters. For example, a LATIN C………Page 54
3.10 Literals……Page 55
A hexadecimal numeral consists of the leading ASCII characters 0x or 0X followed by one or more A………Page 56
A compile-time error occurs if a decimal literal of type int is larger than 2147483648 (), or if ………Page 57
A floating-point literal is of type float if it is suffixed with an ASCII letter F or f; otherwis………Page 58
The details of proper input conversion from a Unicode string representation of a floating-point n………Page 59
3.10.4 Character Literals……Page 60
It is a compile-time error for a line terminator to appear after the opening ‘ and before the clo………Page 61
Each string literal is a reference (§4.3) to an instance (§4.3.1, §12.5) of class String (§4.3.3)………Page 62
• Literal strings within the same class (§8) in the same package (§7) represent references to the………Page 63
3.10.7 The Null Literal……Page 64
3.12 Operators……Page 65
Types, Values, and Variables……Page 67
4.1 The Kinds of Types and Values……Page 68
• For byte, from –128 to 127, inclusive……Page 69
• The comparison operators, which result in a value of type boolean:……Page 70
4.2.3 Floating-Point Types, Formats, and Values……Page 71
Table 4.1 Floating-point value set parameters……Page 72
• The comparison operators, which result in a value of type boolean:……Page 74
• The if statement (§14.9)……Page 77
4.3 Reference Types and Values……Page 78
4.3.1 Objects……Page 79
• Field access, using either a qualified name (§6.6) or a field access expression (§15.11)……Page 80
public class Object {……Page 81
4.3.3 The Class String……Page 82
4.4 Type Variables……Page 83
4.5 Parameterized Types……Page 85
4.5.1 Type Arguments and Wildcards……Page 86
• Let m be a member or constructor declaration in C, whose type as declared is T. Then the type o………Page 89
• It refers to a non-generic type declaration…….Page 90
4.8 Raw Types……Page 91
• The name of a generic type declaration used without any accompanying actual type parameters…….Page 92
• An invocation of a method or constructor of a raw type generates an unchecked warning if erasur………Page 94
• Then the intersection type has the same members as a class type (§8) with an empty body, direct………Page 96
• the direct superclasses of C…….Page 97
• If S and T are both reference types, then S[] >1 T[] iff S >1 T…….Page 98
4.11 Where Types Are Used……Page 99
• Array creations (§15.10); here the local variable val of method gausser is initialized by an ar………Page 100
4.12.2 Variables of Reference Type……Page 101
4.12.2.1 Heap Pollution……Page 102
5. Constructor parameters (§8.8.1) name argument values passed to a constructor. For every parame………Page 103
7. Local variables are declared by local variable declaration statements (§14.4). Whenever the fl………Page 104
• Each class variable, instance variable, or array component is initialized with a default value ………Page 105
4.12.6 Types, Classes, and Interfaces……Page 107
• The local variable p of the method main of class Test has type Point and is initially assigned ………Page 108
• A conversion from type Object to type Thread requires a run-time check to make sure that the ru………Page 111
• Assignment conversion (§5.2, §15.26) converts the type of an expression to the type of a specif………Page 112
5.1.2 Widening Primitive Conversion……Page 114
• byte to short, int, long, float, or double……Page 115
1. In the first step, the floating-point number is converted either to a long, if T is long, or ………Page 116
2. In the second step:……Page 117
5.1.4 Widening and Narrowing Primitive Conversions……Page 118
• From any reference type S to any reference type T, provided that S is a proper supertype (§………Page 119
• If p is a value of type boolean, then boxing conversion converts p into a reference r of class ………Page 120
• If r is a reference of type Boolean, then unboxing conversion converts r into r.booleanValue()……Page 122
5.1.10 Capture Conversion……Page 123
• If Ti is a wildcard type argument (§4.5.1) of the form ? then Si is a fresh type variable whose………Page 124
• If the value is an element of the float-extended-exponent value set, then the implementation ma………Page 126
• an identity conversion (§5.1.1)……Page 127
• If v is of type float and is an element of the float-extended-exponent value set, then the impl………Page 128
• An OutOfMemoryError as a result of a boxing conversion…….Page 129
• The value of veclong cannot be assigned to a Long variable, because Long is a class type ………Page 132
• If an argument value of type float is an element of the float-extended-exponent value set, then………Page 133
• an identity conversion (§5.1.1)……Page 135
• If S is a class type:……Page 136
• The cast is a completely unchecked cast. No run time action is performed for such a cast…….Page 138
• If the operand is of compile-time type Byte, Short, Character, or Integer it is subjected to u………Page 142
• Each dimension expression in an array creation expression (§15.10)……Page 143
• The multiplicative operators *, / and % (§15.17)……Page 144
Names……Page 147
• A package, declared in a package declaration (§7.4)……Page 148
6.2 Names and Identifiers……Page 149
• In declarations (§6.1), where an identifier may occur to specify the name by which the declared………Page 150
6.3 Scope of a Declaration……Page 151
• Its own initializer……Page 152
• any top level type named n declared in another compilation unit of p…….Page 153
• any top level type (§7.6) named n declared in another compilation unit (§7.3) of p…….Page 154
• The expression “x” in the invocation of print refers to (denotes) the value of the local variab………Page 155
6.4.2 The Members of a Package……Page 156
• Members inherited from its direct superclass (§8.1.4), if it has one (the class Object has no d………Page 157
• Those members declared in the interface…….Page 158
• The public final field length, which contains the number of components of the array (length may………Page 159
6.5 Determining the Meaning of a Name……Page 160
• In a single-type-import declaration (§7.5.1)……Page 161
• If the AmbiguousName is a simple name, consisting of a single Identifier:……Page 163
6.5.3.1 Simple Package Names……Page 165
6.5.5.2 Qualified Type Names……Page 166
6.5.6.1 Simple Expression Names……Page 168
• If Q is a type name that names a class type (§8), then:……Page 169
6.5.7.2 Qualified Method Names……Page 171
• A package is always accessible…….Page 172
• If the access is by a qualified name Q.Id, where Q is an ExpressionName, then the access is ………Page 173
• The class type PointVec is not public and not part of the public interface of the package point………Page 174
6.6.4 Example: Access to public and Non-public Classes……Page 175
6.6.5 Example: Default-Access Fields, Methods, and Constructors……Page 176
6.6.7 Example: protected Fields, Methods, and Constructors……Page 177
6.6.8 Example: private Fields, Methods, and Constructors……Page 178
• The fully qualified name of the type long is “long”…….Page 179
6.8 Naming Conventions……Page 180
6.8.2 Class and Interface Type Names……Page 181
6.8.3 Type Variable Names……Page 182
• Methods to get and set an attribute that might be thought of as a variable V should be named g………Page 183
6.8.6 Constant Names……Page 184
• b for a byte……Page 185
Packages……Page 187
• Because the package java.awt has a subpackage image, it cannot (and does not) contain a declara………Page 188
7.2.1 Storing Packages in a File System……Page 189
• A package declaration (§7.4), giving the fully qualified name (§6.7) of the package to which th………Page 191
7.4.1.1 Package Annotations……Page 192
7.4.2 Unnamed Packages……Page 193
7.5 Import Declarations……Page 194
• any top level type named n declared in another compilation unit of p…….Page 195
7.5.2 Type-Import-on-Demand Declaration……Page 197
• any top level type (§7.6) named n declared in another compilation unit (§7.3) of p…….Page 198
7.5.6 A Strange Example……Page 199
7.6 Top Level Type Declarations……Page 200
• The type is referred to by code in other compilation units of the package in which the type is ………Page 201
7.7 Unique Package Names……Page 203
• If the domain name contains a hyphen, or any other special character not allowed in an identifi………Page 204
Classes……Page 207
8.1.1 Class Modifiers……Page 209
• C explicitly contains a declaration of an abstract method (§8.4.3)…….Page 210
8.1.2 Generic Classes and Type Parameters……Page 212
8.1.3 Inner Classes and Enclosing Instances……Page 215
• The class Point is a direct subclass of Object…….Page 218
• C directly depends on T…….Page 219
8.1.5 Superinterfaces……Page 220
• The interface Paintable is a superinterface of class PaintedPoint…….Page 221
8.1.6 Class Body and Member Declarations……Page 223
• For a field, its type…….Page 224
• An error occurs because ColoredPoint has no constructor declared with two integer parameters, a………Page 225
8.2.1.1 Example: Inheritance with Default Access……Page 226
8.2.1.3 Inheritance with private……Page 227
8.2.1.4 Accessing Members of Inaccessible Classes……Page 228
8.3 Field Declarations……Page 230
8.3.1 Field Modifiers……Page 231
8.3.1.1 static Fields……Page 232
8.3.1.4 volatile Fields……Page 233
• If the declarator is for a class variable (that is, a static field), then the variable initiali………Page 235
8.3.2.2 Initializers for Instance Variables……Page 236
• The usage occurs in an instance (respectively static) variable initializer of C or in an instan………Page 237
8.3.3.1 Example: Hiding of Class Variables……Page 239
8.3.3.2 Example: Hiding of Instance Variables……Page 240
8.3.3.3 Example: Multiply Inherited Fields……Page 241
8.4 Method Declarations……Page 243
8.4.1 Formal Parameters……Page 244
8.4.2 Method Signature……Page 246
• They have the same number of formal parameters (possibly zero)……Page 247
8.4.3.1 abstract Methods……Page 248
8.4.3.2 static Methods……Page 250
8.4.3.3 final Methods……Page 251
8.4.3.6 synchronized Methods……Page 252
• If R1 is a primitive type, then R2 is identical to R1…….Page 254
8.4.6 Method Throws……Page 255
• Exceptions that are represented by the subclasses of class Error, for example OutOfMemoryError,………Page 256
8.4.7 Method Body……Page 257
3. Either……Page 258
8.4.8.3 Requirements in Overriding and Hiding……Page 259
• The two methods have the same name, id……Page 261
8.4.8.4 Inheriting Methods with Override-Equivalent Signatures……Page 262
8.4.9 Overloading……Page 263
8.4.10.1 Example: Overriding……Page 264
8.4.10.3 Example: Incorrect Overriding……Page 265
8.4.10.4 Example: Overriding versus Hiding……Page 266
8.4.10.6 Large Example of Overriding……Page 268
8.4.10.7 Example: Incorrect Overriding because of Throws……Page 270
8.5 Member Type Declarations……Page 271
8.6 Instance Initializers……Page 272
8.7 Static Initializers……Page 273
8.8.1 Formal Parameters and Formal Type Parameter……Page 274
8.8.3 Constructor Modifiers……Page 275
8.8.7 Constructor Body……Page 276
8.8.7.1 Explicit Constructor Invocations……Page 277
• Alternate constructor invocations begin with the keyword this (possibly prefaced with explicit ………Page 278
• First, if the constructor invocation statement is a superclass constructor invocation, then the………Page 279
8.8.8 Constructor Overloading……Page 280
• If the class being declared is the primordial class Object, then the default constructor has an………Page 281
8.8.10 Preventing Instantiation of a Class……Page 282
8.9 Enums……Page 283
/**……Page 285
Interfaces……Page 293
9.1.1 Interface Modifiers……Page 294
9.1.3 Superinterfaces and Subinterfaces……Page 295
• K is a direct superinterface of I…….Page 296
• Those members declared in the interface…….Page 297
9.3 Field (Constant) Declarations……Page 298
9.3.2.1 Ambiguous Inherited Fields……Page 299
9.4 Abstract Method Declarations……Page 300
1. I is a subinterface of J…….Page 301
9.4.2 Overloading……Page 302
9.4.3.2 Example: Overloading……Page 303
9.6 Annotation Types……Page 304
• Annotation type declarations cannot be generic…….Page 305
9.6.1 Predefined Annotation Types……Page 311
• If m has an element whose value is annotation.RetentionPolicy.SOURCE, then a Java compiler must………Page 312
9.6.1.4 Override……Page 313
• The use is within an entity that itself is is annotated with the annotation @Deprecated; or……Page 314
9.7 Annotations……Page 315
• T is an array type E[] and either:……Page 317
Arrays……Page 321
10.2 Array Variables……Page 322
10.4 Array Access……Page 323
10.6 Array Initializers……Page 324
• The public final field length, which contains the number of components of the array (length may………Page 326
10.8 Class Objects for Arrays……Page 327
10.10 Array Store Exception……Page 328
Exceptions……Page 331
• An abnormal execution condition was synchronously detected by the Java virtual machine. Such co………Page 332
11.2.1 Exception Analysis of Expressions……Page 333
11.2.2 Exception Analysis of Statements……Page 334
11.2.5 Why Runtime Exceptions are Not Checked……Page 335
• If within a method, then the caller is the method invocation expression (§15.12) that was execu………Page 336
11.3.2 Handling Asynchronous Exceptions……Page 337
11.4 An Example of Exceptions……Page 338
11.5 The Exception Hierarchy……Page 340
11.5.2 Virtual Machine Errors……Page 341
12.1 Virtual Machine Start-Up……Page 343
12.1.2 Link Test: Verify, Prepare, (Optionally) Resolve……Page 344
12.1.3 Initialize Test: Execute Initializers……Page 345
• Given the same name, a good class loader should always return the same class object…….Page 346
• ClassCircularityError: A class or interface could not be loaded because it would be its own sup………Page 347
• VerifyError: The binary definition for a class or interface failed to pass a set of required ch………Page 348
• IllegalAccessError: A symbolic reference has been encountered that specifies a use or assignmen………Page 349
12.4.1 When Initialization Occurs……Page 350
• T is a class and an instance of T is created…….Page 351
12.4.2 Detailed Initialization Procedure……Page 353
7. Next, if the Class object represents a class rather than an interface, and the superclass of t………Page 354
12.4.3 Initialization: Implications for Code Generation……Page 355
3. This constructor does not begin with an explicit constructor invocation of another constructor………Page 356
5. Execute the rest of the body of this constructor. If that execution completes abruptly, then t………Page 357
12.6 Finalization of Class Instances……Page 359
12.6.1 Implementing Finalization……Page 360
• An object B is definitely reachable at di from static fields if there exists a write w1 to a st………Page 362
12.6.2 Finalizer Invocations are Not Ordered……Page 363
• Static variables (whose state would be lost)…….Page 364
• All the threads that are not daemon threads terminate…….Page 365
Binary Compatibility……Page 367
13.1 The Form of a Binary……Page 368
• The class or interface must be named by its binary name, which must meet the following constrai………Page 369
• If it is a class and is not class Object, then a symbolic reference to the erasure of the direc………Page 372
• Addition of more methods overloading a particular method name does not break compatibility with………Page 373
13.4.2 final Classes……Page 374
13.4.4 Superclasses and Superinterfaces……Page 375
13.4.6 Class Body and Member Declarations……Page 376
13.4.7 Access to Members and Constructors……Page 378
• The new field is less accessible than the old one…….Page 379
13.4.9 final Fields and Constants……Page 381
13.4.10 static Fields……Page 383
13.4.13 Method and Constructor Formal Type Parameters……Page 384
• If the type parameter is used as the type of a field, the effect is as if the field was removed………Page 385
13.4.16 abstract Methods……Page 386
13.4.17 final Methods……Page 387
13.4.22 Method and Constructor Body……Page 388
13.4.23 Method and Constructor Overloading……Page 389
13.5.1 public Interfaces……Page 390
13.5.4 Interface Formal Type Parameters……Page 391
13.5.7 Evolution of Annotation Types……Page 392
Blocks and Statements……Page 393
• A break with no label……Page 394
14.3 Local Class Declarations……Page 395
14.4 Local Variable Declaration Statements……Page 397
14.4.2 Scope of Local Variable Declarations……Page 398
14.4.4 Execution of Local Variable Declarations……Page 401
if (door.isOpen())……Page 402
14.7 Labeled Statements……Page 404
14.8 Expression Statements……Page 405
14.9.2 The if–then–else Statement……Page 406
14.10 The assert Statement……Page 407
• If the value is true, no further action is taken and the assert statement completes normally…….Page 409
• Every case constant expression associated with a switch statement must be assignable (§5.2) to ………Page 411
• If execution of the Statement completes abruptly because of a break with no label, no further a………Page 413
14.12 The while Statement……Page 414
• If execution of the Statement completes abruptly because of a break with no label, no further a………Page 415
• If execution of the Statement completes normally, then the Expression is evaluated. If the resu………Page 416
14.13.2 Example of do statement……Page 417
14.14.1 The basic for Statement……Page 418
• If the Expression is present, it is evaluated. If the result is of type Boolean, it is subject ………Page 419
• If execution of the Statement completes abruptly because of a break with no label, no further a………Page 420
T[] a = Expression;……Page 421
14.15 The break Statement……Page 422
14.16 The continue Statement……Page 424
14.17 The return Statement……Page 426
• The exception is not a checked exception (§11.2)—specifically, one of the following situations ………Page 427
14.19 The synchronized Statement……Page 429
14.20 The try statement……Page 430
• If execution of the try block completes normally, then no further action is taken and the try s………Page 432
14.20.2 Execution of try–catch–finally……Page 433
• If execution of the try block completes normally, then the finally block is executed, and then ………Page 434
• whether a statement is reachable……Page 436
• The block that is the body of a constructor, method, instance initializer or static initializer………Page 437
• HYPOTHETICAL: An if–then statement can complete normally iff at least one of the following is t………Page 439
• ACTUAL: An if–then statement can complete normally iff it is reachable. The then–statement is r………Page 440
• A variable (§4.12) (in C, this would be called an lvalue)……Page 443
15.3 Type of an Expression……Page 444
• Method invocation (§15.12). The particular method used for an invocation o.m(…) is chosen bas………Page 445
• In a cast, when the actual class of the object referenced by the value of the operand expressio………Page 446
• A class instance creation expression (§15.9), array creation expression (§15.10), or string con………Page 447
15.7 Evaluation Order……Page 448
15.7.1 Evaluate Left-Hand Operand First……Page 449
15.7.2 Evaluate Operands before Operation……Page 450
15.7.3 Evaluation Respects Parentheses and Precedence……Page 451
15.7.4 Argument Lists are Evaluated Left-to-Right……Page 452
• class instance creation expressions (§15.9.4)……Page 453
• The type of an integer literal that ends with L or l is long; the type of any other integer lit………Page 454
15.8.3 this……Page 455
15.8.5 Parenthesized Expressions……Page 456
15.9 Class Instance Creation Expressions……Page 457
• If the class instance creation expression is an unqualified class instance creation expression,………Page 458
15.9.2 Determining Enclosing Instances……Page 459
• If C is an anonymous class, then:……Page 460
• First, the actual arguments to the constructor invocation are determined…….Page 461
15.9.4 Run-time Evaluation of Class Instance Creation Expressions……Page 462
• If S is not an inner class, or if S is a local class that occurs in a static context, then the ………Page 463
15.9.6 Example: Evaluation Order and Out-of-Memory Detection……Page 464
15.10 Array Creation Expressions……Page 465
15.10.1 Run-time Evaluation of Array Creation Expressions……Page 466
15.10.2 Example: Array Creation Evaluation Order……Page 467
15.10.3 Example: Array Creation and Out-of-Memory Detection……Page 468
• If the identifier names several accessible member fields of type T, then the field access is a………Page 469
15.11.2 Accessing Superclass Members using super……Page 472
• If the form is MethodName, then there are three subcases:……Page 474
15.12.2 Compile-Time Step 2: Determine Method Signature……Page 476
• The name of the member is identical to the name of the method in the method invocation…….Page 477
• For , either:……Page 479
• If m is a generic method, then let F1 … Fn, where , be the types of the formal parameters of ………Page 480
15.12.2.5 Choosing the Most Specific Method……Page 481
• One member method has n parameters and the other has k parameters, where . The types of the pa………Page 482
• If all the maximally specific methods have override-equivalent (§8.4.2) signatures, then:……Page 483
• If unchecked conversion was necessary for the method to be applicable then the throws clause is………Page 484
• Type expressions are represented using the letters A, F, U, V and W. The letter A is only used ………Page 485
• If F does not involve a type parameter Tj then no constraint is implied on Tj…….Page 486
• If U is not one of the type parameters of the method, then U is the type inferred for Tj. Then ………Page 497
15.12.2.9 Examples……Page 500
15.12.2.11 Example: Return Type Not Considered……Page 502
15.12.2.12 Example: Compile-Time Resolution……Page 503
• If the method invocation has, before the left parenthesis, a MethodName of theform TypeName.Id………Page 505
• The name of the method…….Page 506
• If the first production for MethodInvocation, which includes a MethodName, is involved, then th………Page 507
15.12.4.2 Evaluate Arguments……Page 508
• If m is public, then m is accessible. (All members of interfaces are public (§9.2))…….Page 509
1. If class S contains a declaration for a non-abstract method named m with the same descriptor (………Page 510
15.12.4.5 Create Frame, Synchronize, Transfer Control……Page 511
15.12.4.7 Example: Evaluation Order……Page 513
15.12.4.8 Example: Overriding……Page 514
15.12.4.9 Example: Method Invocation using super……Page 515
15.13 Array Access Expressions……Page 516
15.13.2 Examples: Array Access Evaluation Order……Page 517
15.14.2 Postfix Increment Operator ++……Page 519
15.14.3 Postfix Decrement Operator –……Page 520
15.15.1 Prefix Increment Operator ++……Page 521
15.15.2 Prefix Decrement Operator –……Page 522
• If the operand is NaN, the result is NaN (recall that NaN has no sign)…….Page 523
15.16 Cast Expressions……Page 524
15.17 Multiplicative Operators……Page 525
• If either operand is NaN, the result is NaN…….Page 526
• If either operand is NaN, the result is NaN…….Page 527
• If either operand is NaN, the result is NaN…….Page 529
15.18 Additive Operators……Page 530
• If T is boolean, then use new Boolean(x)…….Page 531
15.18.1.3 Examples of String Concatenation……Page 532
• If either operand is NaN, the result is NaN…….Page 534
15.19 Shift Operators……Page 536
15.20.1 Numerical Comparison Operators =……Page 537
15.20.2 Type Comparison Operator instanceof……Page 538
15.21 Equality Operators……Page 539
• If either operand is NaN, then the result of == is false but the result of != is true. Indeed, ………Page 540
15.21.3 Reference Equality Operators ==and !=……Page 541
15.22.2 Boolean Logical Operators &, ^, and |……Page 542
15.24 Conditional-Or Operator ||……Page 543
15.25 Conditional Operator ?:……Page 544
• If the second and third operands have the same type (which may be the null type), then that is ………Page 545
15.26 Assignment Operators……Page 546
• If the left-hand operand expression is a field access expression (§15.11) e.f, possibly enclose………Page 547
short x = 3;……Page 552
• First, the array reference subexpression of the left-hand operand array access expression is ev………Page 553
• Literals of primitive type and literals of type String (§3.10.5)……Page 559
Definite Assignment……Page 561
• whether a variable is definitely unassigned after the expression when true;……Page 564
• V is definitely assigned after an empty statement iff it is definitely assigned before the emp………Page 565
• V is [un]assigned after a && b when true iff V is [un]assigned after b when true…….Page 567
• V is [un]assigned after a ? b : c when true iff V is [un]assigned after b when true and V is………Page 568
• V is definitely assigned after the assignment expression iff either……Page 569
• If the expression has no subexpressions, V is [un]assigned after the expression iff V is [un]………Page 570
• y is the leftmost immediate subexpression of x and V is [un]assigned before x…….Page 571
• A blank final member field V is definitely assigned (and moreover is not definitely unassigned)………Page 572
• V is [un]assigned after a local variable declaration statement that contains no variable initi………Page 573
• V is [un]assigned after an expression statement e; iff it is [un]assigned after e…….Page 574
• V is [un]assigned after a switch statement iff all of the following are true:……Page 575
• V is [un]assigned after while (e) S iff V is [un]assigned after e when false and V is [un]a………Page 576
• V is [un]assigned after a for statement iff both of the following are true:……Page 577
• If the incrementation part of the for statement is empty, then V is [un]assigned after the inc………Page 578
• V is [un]assigned before the try block iff V is [un]assigned before the try statement…….Page 579
• V is definitely assigned after the try statement iff at least one of the following is true:……Page 580
• V is [un]assigned after an empty array initializer iff it is [un]assigned before the empty arr………Page 581
16.6 Definite Assignment and Anonymous Classes……Page 582
• V is definitely unassigned (and moreover is not definitely assigned) before the leftmost enum c………Page 583
• V is definitely assigned (and moreover is not definitely unassigned) after an alternate constru………Page 584
• V is definitely assigned (and moreover is not definitely unassigned) before the block that is t………Page 585
Threads and Locks……Page 587
17.2 Notation in Examples……Page 588
Trace 17.2 : Surprising results caused by statement reordering – valid compiler transformation……Page 589
Trace 17.4 : Surprising results caused by forward substitution……Page 590
17.4 Memory Model……Page 591
• Read (normal, or non-volatile). Reading a variable…….Page 592
• t – the thread performing the action……Page 593
• w comes before r in the execution order, and……Page 594
17.4.5 Happens-before Order……Page 595
• If x and y are actions of the same thread and x comes before y in program order, then hb(x, y)…….Page 596
• An unlock on a monitor happens-before every subsequent lock on that monitor…….Page 597
Trace 17.5 Behavior allowed by happens-before consistency, but not sequential consistency. May ob………Page 600
• P – a program……Page 601
17.4.8 Executions and Causality Requirements……Page 602
8. Let sswi be the swi edges that are also in the transitive reduction of hbi but not in po. We c………Page 603
Trace 17.6 Happens-Before consistency is not sufficient……Page 604
17.4.9 Observable Behavior and Nonterminating Executions……Page 605
• There exists an execution E of P, and a set O of observable actions for E, and B is the set of ………Page 606
17.5 Final Field Semantics……Page 607
• Dereference Chain If an action a is a read or write of a field or element of an object o by a t………Page 609
17.5.3 Subsequent Modification of Final Fields……Page 610
17.6 Word Tearing……Page 612
17.7 Non-atomic Treatment of double and long……Page 613
2. Thread t does not execute any further instructions until it has been removed from m’s wait set………Page 614
• If n is zero an IllegalMonitorStateException is thrown. This is the case where thread t does no………Page 615
• at least one thread in s must return normally from wait, or……Page 616
17.9 Sleep and Yield……Page 617
18.1 The Grammar of the Java Programming Language……Page 619
Colophon……Page 683
Reviews
There are no reviews yet.