Table of Contents
Java Language Specification Java SE 17 Edition - Table of Contents
Return to Java 17 Language Spec Table of Contents, Java 17 Language Spec, Java Language Specifications, Language Specifications, Java bibliography, Java DevOps, Java, Java topics, Awesome Java, Java development tools
“ (JSR-392 JvLngSpc17 2021)
Brief Contents
Full Contents
1. Introduction
- 1 Introduction 1
- 1.2 Example Programs 6
- 1.3 Notation 6
- 1.5 Preview Features 7
- 1.6 Feedback 9
- 1.7 References 10
2. Grammar
- 2 Grammars 11
- 2.1 Context-Free Grammars 11
- 2.2 The Lexical Grammar 11
- 2.3 The Syntactic Grammar 12
- 2.4 Grammar Notation 12
3. Lexical Structure
- 3 Lexical Structure 17
- 3.1 Unicode 17
- 3.2 Lexical Translations 18
- 3.3 Unicode Escapes 19
- 3.4 Line Terminators 22
- 3.5 Input Elements and Tokens 22
- 3.6 White Space 24
- 3.7 Comments 25
- 3.8 Identifiers 26
- 3.9 Keywords 28
- 3.10 Literals 31
- 3.10.1 Integer Literals 31
- 3.10.2 Floating-Point Literals 38
- 3.10.3 Boolean Literals 41
- 3.10.4 Character Literals 42
- 3.10.5 String Literals 43
- 3.10.6 Text Blocks 45
- 3.10.7 Escape Sequences 51
- 3.10.8 The Null Literal 52
- 3.11 Separators 52
- 3.12 Operators 52
4. Types, Values, and Variables
iii
The Java Language Specification
- 4.2 Primitive Types and Values 54
- 4.2.1 Integral Types and Values 55
- 4.2.2 Integer Operations 55
- 4.2.3 Floating-Point Types and Values 57
- 4.2.4 Floating-Point Operations 59
- 4.2.5 The boolean Type and boolean Values 61
- 4.3 Reference Types and Values 62
- 4.3.1 Objects 64
- 4.3.2 The Class Object 66
- 4.3.3 The Class String 67
- 4.3.4 When Reference Types Are the Same 67
- 4.4 Type Variables 68
- 4.5 Parameterized Types 70
- 4.5.1 Type Arguments of Parameterized Types 71
- 4.6 Type Erasure 75
- 4.8 Raw Types 77
- 4.9 Intersection Types 81
- 4.10 Subtyping 82
- 4.10.1 Subtyping among Primitive Types 82
- 4.10.3 Subtyping among Array Types 83
- 4.10.4 Least Upper Bound 84
- 4.10.5 Type Projections 87
- 4.11 Where Types Are Used 89
- 4.12 Variables 94
- 4.12.1 Variables of Primitive Type 94
- 4.12.2
Variables of Reference Type 95
- 4.12.3
Kinds of Variables 97
- 4.12.4
- 4.12.5
Initial Values of Variables 101
- 4.12.6
5. Conversions and Contexts
5 Conversions and Contexts 107
- 5.1 Kinds of Conversion 110
- 5.1.1 Identity Conversion 110
- 5.1.2 Widening Primitive Conversion 111
- 5.1.3 Narrowing Primitive Conversion 112
- 5.1.5 Widening Reference Conversion 115
- 5.1.6 Narrowing Reference Conversion 115
Conversions 118
- 5.1.7 Boxing Conversion 122
iv
The Java Language Specification
- 5.1.8 Unboxing Conversion 123
- 5.1.9 Unchecked Conversion 125
- 5.1.10 Capture Conversion 125
- 5.1.11 String Conversion 127
- 5.1.12 Forbidden Conversions 128
- 5.2 Assignment Contexts 128
- 5.3 Invocation Contexts 133
6. Names
6 Names 147
- 6.1 Declarations 148
- 6.2 Names and Identifiers 156
- 6.3 Scope of a Declaration 158
- 6.3.1.1
Conditional-And Operator && 162
- 6.3.1.2
Conditional-Or Operator || 162
- 6.3.1.3
Logical Complement Operator ! 163
- 6.3.1.4
Conditional Operator ? : 163
- 6.3.1.5
Pattern Match Operator instanceof 164
- 6.3.1.6
switch Expressions 165
- 6.3.1.7
- 6.3.2
Scope for Pattern Variables in Statements 165
- 6.3.2.1 Blocks 166
- 6.3.2.2 if Statements 166
- 6.3.2.3 while Statements 168
- 6.3.2.4 do Statements 168
- 6.3.2.5 for Statements 168
- 6.3.2.6 switch Statements 169
- 6.3.2.7 Labeled Statements 169
- 6.4.1 Shadowing 172
- 6.4.2 Obscuring 175
- 6.5.3.1
Simple Package Names 184
- 6.5.3.2
Qualified Package Names 184
- 6.5.4
Meaning of PackageOrTypeNames 184
- 6.5.4.1
- 6.5.4.2
Qualified PackageOrTypeNames 185
- 6.5.5
- 6.5.5.1
- 6.5.5.2
- 6.5.6
Meaning of Expression Names 187
v
The Java Language Specification
- 6.5.6.1 Simple Expression Names 187
- 6.5.6.2 Qualified Expression Names 191
- 6.5.7 Meaning of Method Names 193
- 6.5.7.1 Simple Method Names 193
- 6.6 Access Control 195
- 6.6.1 Determining Accessibility 196
- 6.6.2 Details on protected Access 200
- 6.6.2.1 Access to a protected Member 201
- 6.6.2.2 Access to a protected Constructor 201
- 6.7 Fully Qualified Names and Canonical Names 203
7. Packages and Modules
7 Packages and Modules 207
- 7.1 Package Members 208
- 7.3 Compilation Units 212
- 7.4 Package Declarations 214
- 7.4.1 Named Packages 214
- 7.4.2 Unnamed Packages 215
- 7.4.3 Package Observability and Visibility 215
- 7.5 Import Declarations 216
- 7.5.1 Single-Type-Import Declarations 217
- 7.5.2 Type-Import-on-Demand Declarations 219
- 7.5.3 Single-Static-Import Declarations 220
- 7.5.4 Static-Import-on-Demand Declarations 221
- 7.6 Top Level Class and Interface Declarations 222
- 7.7 Module Declarations 225
- 7.7.1 Dependences 228
- 7.7.2 Exported and Opened Packages 230
- 7.7.3 Service Consumption 231
- 7.7.4 Service Provision 232
- 7.7.5 Unnamed Modules 233
- 7.7.6 Observability of a Module 233
8. Classes
Java Language Specification Java SE 17 Edition Chapter 8 - Classes
8 Classes 235
- 8.1 Class Declarations 237
- 8.1.1 Class Modifiers 237 - Java Class Modifiers
- 8.1.1.1 abstract Classes 238 - Java abstract Classes
- 8.1.1.3 strictfp Classes 241 - Java strictfp Class
- 8.1.1.4 static Classes 241 - Java static Class
- 8.1.5 Superinterfaces 251 - Java Superinterface
- 8.1.6 Permitted Direct Subclasses 254 - Java Permitted Direct Subclass
- 8.2 Class Members 257 - Java Class Member
vi The Java Language Specification
- 8.3 Field Declarations 261 - Java Field Declaration
- 8.3.1 Field Modifiers 266 - Java Field Modifier
- 8.3.1.1 static Fields 266 - Java static Field
- 8.3.1.2 final Fields 269 - Java final Field
- 8.3.1.3 transient Fields 270 - Java transient Field
- 8.3.1.4 volatile Fields 270 - Java volatile Field
- 8.3.2 Field Initialization 271 - Java Field Initialization
- 8.4 Method Declarations 276 - Java Method Declaration
- 8.4.1 Formal Parameters 278 - Java Formal Parameter
- 8.4.2 Method Signature 280 - Java Method Signature
- 8.4.3 Method Modifiers 282 - Java Method Modifier
- 8.4.3.1 abstract Methods 282 - Java abstract Method
- 8.4.3.2 static Methods 284 - Java static Method
- 8.4.3.3 final Methods 284 - Java final Method
- 8.4.3.4 native Methods 285 - Java native Method
- 8.4.4 Generic Methods 287 - Java Generic Method
- 8.4.5 Method Result 288 - Java Method Result
- 8.4.6 Method Throws 289 - Java Method Throw
- 8.4.7 Method Body 290 - Java Method Body
- 8.4.9 Overloading 302 - Java Overloading
- 8.6 Instance Initializers 306 - Java Instance Initializer
- 8.7 Static Initializers 307 - Java Static Initializer
- 8.8.1 Formal Parameters 308 - Java Formal Parameter
- 8.8.2 Constructor Signature 309 - Java Constructor Signature
- 8.8.3 Constructor Modifiers 310 - Java Constructor Modifier
- 8.8.4 Generic Constructors 310 - Java Generic Constructor
- 8.8.5 Constructor Throws 311 - Java Constructor Throw
- 8.8.6 The Type of a Constructor 311 - Java Type of a Constructor
- 8.8.7 Constructor Body 311 - Java Constructor Body
- 8.8.8 Constructor Overloading 317 - Java Constructor Overloading
- 8.8.9 Default Constructor 317 - Java Default Constructor
- 8.9 Enum Classes 319 - Java Enum Class
- 8.9.1 Enum Constants 320 - Java Enum Constant
- 8.9.2 Enum Body Declarations 321 - Java Enum Body Declaration
- 8.9.3 Enum Members 323 - Java Enum Member
vii The Java Language Specification
- 8.10 Record Classes 328 - Java Record Class
- 8.10.1 Record Components 329 - Java Record Component
- 8.10.2 Record Body Declarations 330 - Java Record Body Declaration
- 8.10.3 Record Members 331 - Java Record Member
- 8.10.4.1 Normal Canonical Constructors 336 - Java Normal Canonical Constructor
- 8.10.4.2 Compact Canonical Constructors 337 - Java Compact Canonical Constructor
9. Interfaces
9 Interfaces 341
- 9.1 Interface Declarations 342
- 9.1.1 Interface Modifiers 342
- 9.1.1.1 abstract Interfaces 343
- 9.1.1.2 strictfp Interfaces 343
- 9.1.1.3 static Interfaces 343
- 9.1.1.4 sealed and non-sealed Interfaces 344
- 9.1.2 Generic Interfaces and Type Parameters 344
- 9.1.3 Superinterfaces and Subinterfaces 345
- 9.1.4 Permitted Direct Subclasses and Subinterfaces 346
- 9.1.5 Interface Body and Member Declarations 348
- 9.2 Interface Members 348
- 9.4 Method Declarations 352
- 9.4.1 Inheritance and Overriding 354
- 9.4.1.1 Overriding (by Instance Methods) 355
- 9.4.1.2 Requirements in Overriding 356
- 9.4.2 Overloading 358
- 9.4.3 Interface Method Body 358
- 9.6 Annotation Interfaces 360
- 9.6.1 Annotation Interface Elements 362
- 9.6.3 Repeatable Annotation Interfaces 366
- 9.6.4 Predefined Annotation Interfaces 371
- 9.6.4.1 @Target 371
- 9.6.4.2 @Retention 372
- 9.6.4.3 @Inherited 373
- 9.6.4.4 @Override 374
- 9.6.4.5 @SuppressWarnings 375
- 9.6.4.6 @Deprecated 376
- 9.6.4.7 @SafeVarargs 378
- 9.6.4.8 @Repeatable 379
- 9.6.4.9 @FunctionalInterface 379
- 9.7 Annotations 379
- 9.7.1 Normal Annotations 380
viii The Java Language Specification
- 9.7.2 Marker Annotations 383
- 9.7.3 Single-Element Annotations 383
- 9.7.4 Where Annotations May Appear 384
- 9.8 Functional Interfaces 390
- 9.9 Function Types 394
10. Arrays
10 Arrays 399
- 10.1 Array Types 400
- 10.2 Array Variables 400
- 10.3 Array Creation 403
- 10.4 Array Access 403
- 10.5 Array Store Exception 404
- 10.6 Array Initializers 405
- 10.7 Array Members 407
- 10.8 Class Objects for Arrays 408
- 10.9 An Array of Characters Is Not a String 409
11 Exceptions
11 Exceptions 411
- 11.1.1 The Kinds of Exceptions 412
- 11.1.3 Asynchronous Exceptions 414
- 11.2.1 Exception Analysis of Expressions 416
- 11.2.2 Exception Analysis of Statements 417
- 11.2.3 Exception Checking 418
12. Execution
12 Execution 425
- 12.1 Java Virtual Machine Startup 425
- 12.1.1 Load the Class Test 426
- 12.2.2 Class Loader Consistency 429
- 12.3.3 Resolution of Symbolic References 431
- 12.4.1 When Initialization Occurs 433
ix The Java Language Specification
- 12.6 Finalization of Class Instances 441
- 12.6.1 Implementing Finalization 443
- 12.6.2 Interaction with the Memory Model 444
- 12.8 Program Exit 447
13. Binary Compatibility
13 Binary Compatibility 449
- 13.2 What Binary Compatibility Is and Is Not 457
- 13.3 Evolution of Packages and Modules 458
- 13.4.1 abstract Classes 459
- 13.4.2 sealed, non-sealed, and final Classes 459
- 13.4.2.1 sealed Classes 459
- 13.4.2.2 non-sealed Classes 460
- 13.4.2.3 final Classes 460
- 13.4.3 public Classes 460
- 13.4.4 Superclasses and Superinterfaces 460
- 13.4.5 Class Type Parameters 462
- 13.4.6 Class Body and Member Declarations 462
- 13.4.8 Field Declarations 465
- 13.4.9 final Fields and static Constant Variables 467
- 13.4.10 static Fields 469
- 13.4.11 transient Fields 469
- 13.4.12 Method and Constructor Declarations 469
- 13.4.13 Method and Constructor Type Parameters 470
- 13.4.15 Method Result Type 471
- 13.4.16 abstract Methods 471
- 13.4.17 final Methods 472
- 13.4.18 native Methods 473
- 13.4.19 static Methods 473
- 13.4.20 synchronized Methods 473
- 13.4.21 Method and Constructor Throws 473
- 13.4.22 Method and Constructor Body 474
- 13.4.23 Method and Constructor Overloading 474
- 13.4.24 Method Overriding 475
- 13.4.25 Static Initializers 475
- 13.4.26 Evolution of Enum Classes 475
- 13.4.27 Evolution of Record Classes 476
- 13.5.1 public Interfaces 476
- 13.5.2 sealed and non-sealed Interfaces 476
- 13.5.3 Superinterfaces 477
- 13.5.4 Interface Members 477
- 13.5.5 Interface Type Parameters 478
x The Java Language Specification
- 13.5.6 Field Declarations 478
- 13.5.7 Interface Method Declarations 478
- 13.5.8 Annotation Interfaces 479
14. Blocks, Statements, and Patterns
14 Blocks, Statements, and Patterns 481
- 14.2
Blocks 483
- 14.3
Local Class and Interface Declarations 484
- 14.4
Local Variable Declarations 486
- 14.4.1
Local Variable Declarators and Types 487
- 14.4.2
Local Variable Declaration Statements 488
- 14.5
Statements 489
- 14.6
The Empty Statement 491
- 14.7
Labeled Statements 491
- 14.8
Expression Statements 493
- 14.9
The if Statement 494
- 14.9.1
- 14.9.2
The if-then-else Statement 494
- 14.10 The assert Statement 495
- 14.11 The switch Statement 498
- 14.11.1 Switch Blocks 498
- 14.11.2 The Switch Block of a switch Statement 501
- 14.11.3 Execution of a switch Statement 501
- 14.12 The while Statement 504
- 14.13 The do Statement 505
- 14.14 The for Statement 507
- 14.14.1 The basic for Statement 508
- 14.14.1.1 Initialization of for Statement 508
- 14.14.1.2 Iteration of for Statement 509
- 14.14.2 The enhanced for statement 511
- 14.15 The break Statement 514
- 14.16 The continue Statement 516
- 14.17 The return Statement 519
- 14.18 The throw Statement 520
- 14.19 The synchronized Statement 522
- 14.20 The try statement 523
- 14.20.3 try-with-resources 530
- 14.20.3.1 Basic try-with-resources 532
- 14.20.3.2 Extended try-with-resources 535
- 14.21 The yield Statement 536
- 14.22 Unreachable Statements 537
- 14.30 Patterns 543
xi The Java Language Specification
- 14.30.1 Kinds of Patterns 544
- 14.30.2 Pattern Matching 545
15 Expressions
15 Expressions 547
- 15.2 Forms of Expressions 548
- 15.3 Type of an Expression 549
- 15.4 Floating-point Expressions 550
- 15.7 Evaluation Order]] 557
- 15.7.5 Evaluation Order]] for Other Expressions 562
- 15.8 Primary Expression]]s 563
- 15.8.3 this 565
- 15.8.4 Qualified this 566
- 15.8.5 Parenthesized Expressions 567
- 15.9.1 Determining the Class being Instantiated 569
- 15.9.2 Determining Enclosing Instances 571
- 15.9.5 Anonymous Class Declarations 579
- 15.9.5.1 Anonymous Constructors 580
- 15.10 Array Creation and Access Expressions 581
- 15.10.1 Array Creation Expressions 581
- 15.11 Field Access Expressions 589
- 15.12 Method Invocation Expressions 594
xii The Java Language Specification
- 15.12.2.6 Method Invocation Type 613
- 15.12.4 Run-Time Evaluation of Method Invocation 617
- 15.13 Method Reference Expressions 628
- 15.13.2 Type of a Method Reference 637
- 15.13.3 Run-Time Evaluation of Method References 638
- 15.14 Postfix Expressions 641
- 15.14.1 Expression Names 642
- 15.14.2 Postfix Increment Operator ++ 642
- 15.14.3 Postfix Decrement Operator – 643
- 15.15 Unary Operators 643
- 15.15.1 Prefix Increment Operator ++ 645
- 15.15.2 Prefix Decrement Operator – 645
- 15.15.3 Unary Plus Operator + 646
- 15.15.4 Unary Minus Operator - 646
- 15.15.6 Logical Complement Operator ! 647
- 15.16 Cast Expressions 648
15.17 Multiplicative Operators 649
- 15.17.1 Multiplication Operator * 650
- 15.17.2 Division Operator / 650
- 15.17.3 Remainder Operator % 652
- 15.18 Additive Operators 654
- 15.18.1 String Concatenation Operator + 655
- 15.18.2 Additive Operators (+ and -) for Numeric Types 657
- 15.19 Shift Operators 659
- 15.20 Relational Operators 660
- 15.20.1 Numerical Comparison Operators <, ⇐, >, and >= 660
- 15.20.2 The instanceof Operator 661
- 15.21 Equality Operators 664
- 15.21.1 Numerical Equality Operators == and != 664
- 15.21.2 Boolean Equality Operators == and != 665
- 15.21.3 Reference Equality Operators == and != 666
- 15.22 Bitwise and Logical Operators 666
- 15.22.1 Integer Bitwise Operators &, ^, and | 667
- 15.22.2 Boolean Logical Operators &, ^, and | 668
- 15.23 Conditional-And Operator && 668
- 15.24 Conditional-Or Operator || 669
- 15.25 Conditional Operator ? : 670
xiii The Java Language Specification
- 15.25.1 Boolean Conditional Expressions 677
- 15.25.2 Numeric Conditional Expressions 677
- 15.25.3 Reference Conditional Expressions 678
- 15.26 Assignment Operators 679
- 15.26.1 Simple Assignment Operator = 680
- 15.26.2 Compound Assignment Operators 686
- 15.27 Lambda Expressions 692
- 15.27.1 Lambda Parameters 694
- 15.27.2 Lambda Body 697
- 15.27.3 Type of a Lambda Expression 700
- 15.27.4 Run-Time Evaluation of Lambda Expressions 702
- 15.28 switch Expressions 704
- 15.28.2 Run-Time Evaluation of switch Expressions 706
- 15.29 Constant Expressions 707
16 Definitie Assignment
16 Definite Assignment 709
- 16.1 Definite Assignment and Expressions 715
- 16.1.1 Boolean Constant Expressions 715
- 16.1.2 Conditional-And Operator && 715
- 16.1.3 Conditional-Or Operator || 716
- 16.1.4 Logical Complement Operator ! 716
- 16.1.5 Conditional Operator ? : 716
- 16.1.6 switch Expressions 717
- 16.1.8 Assignment Expressions 720
- 16.1.9 Operators ++ and – 720
- 16.1.10 Other Expressions 721
- 16.2 Definite Assignment and Statements 722
- 16.2.1 Empty Statements 722
- 16.2.2 Blocks 722
- 16.2.3 Local Class and Interface Declarations 724
- 16.2.4 Local Variable Declaration Statements 724
- 16.2.5 Labeled Statements 724
- 16.2.6 Expression Statements 725
- 16.2.7 if Statements 725
- 16.2.8 assert Statements 725
- 16.2.9 switch Statements 726
- 16.2.10 while Statements 726
- 16.2.11 do Statements 727
- 16.2.12 for Statements 727
- 16.2.14 synchronized Statements 729
- 16.2.15 try Statements 729
- 16.3 Definite Assignment and Parameters 731
xiv The Java Language Specification
- 16.4 Definite Assignment and Array Initializers 731
- 16.5 Definite Assignment and Enum Constants 732
- 16.6 Definite Assignment and Anonymous Classes 732
- 16.8 Definite Assignment and Static Initializers 733
17 Threads and Locks
17 Threads and Locks 737
- 17.1 Synchronization 738
- 17.2 Wait Sets and Notification 738
- 17.2.1 Wait 739
- 17.2.2 Notification 741
- 17.2.3 Interruptions 741
- 17.4 Memory Model 743
- 17.4.1 Shared Variables 746
- 17.4.2 Actions 746
- 17.4.4 Synchronization Order 748
- 17.4.5 Happens-before Order 749
- 17.4.6 Executions 752
- 17.4.7 Well-Formed Executions 753
- 17.5 final Field Semantics 758
- 17.5.1 Semantics of final Fields 760
- 17.5.4 Write-Protected Fields 762
- 17.6 Word Tearing 763
18 Type Inference
18 Type Inference 765
- 18.1.1 Inference Variables 766
- 18.1.2 Constraint Formulas 767
- 18.1.3 Bounds 767
- 18.2 Reduction 769
- 18.2.1 Expression Compatibility Constraints 769
- 18.2.2 Type Compatibility Constraints 774
- 18.2.3 Subtyping Constraints 775
- 18.2.4 Type Equality Constraints 777
- 18.2.5 Checked Exception Constraints 778
- 18.3 Incorporation 780
- 18.3.1 Complementary Pairs of Bounds 781
- 18.3.2 Bounds Involving Capture Conversion 782
xv The Java Language Specification
- 18.4 Resolution 782
- 18.5 Uses of Inference 785
- 18.5.2 Invocation Type Inference 787
- 18.5.2.1 Poly Method Invocation Compatibility 787
- 18.5.3 Functional Interface Parameterization Inference 794
- 18.5.4 More Specific Method Inference 795
19 Syntax
Fair Use Sources
Java: Java Fundamentals, Java Inventor - Java Language Designer: James Gosling of Sun Microsystems, Java Docs, JDK, JVM, JRE, Java Keywords, JDK 17 API Specification, java.base, Java Built-In Data Types, Java Data Structures - Java Algorithms, Java Syntax, Java OOP - Java Design Patterns, Java Installation, Java Containerization, Java Configuration, Java Compiler, Java Transpiler, Java IDEs (IntelliJ - Eclipse - NetBeans), Java Development Tools, Java Linter, JetBrains, Java Testing (JUnit, Hamcrest, Mockito), Java on Android, Java on Windows, Java on macOS, Java on Linux, Java DevOps - Java SRE, Java Data Science - Java DataOps, Java Machine Learning, Java Deep Learning, Functional Java, Java Concurrency, Java History,
Java Bibliography (Effective Java, Head First Java, Java - A Beginner's Guide by Herbert Schildt, Java Concurrency in Practice, Clean Code by Robert C. Martin, Java - The Complete Reference by Herbert Schildt, Java Performance by Scott Oaks, Thinking in Java, Java - How to Program by Paul Deitel, Modern Java in Action, Java Generics and Collections by Maurice Naftalin, Spring in Action, Java Network Programming by Elliotte Rusty Harold, Functional Programming in Java by Pierre-Yves Saumont, Well-Grounded Java Developer, Second Edition, Java Module System by Nicolai Parlog
), Manning Java Series, Java Glossary, Java Topics, Java Courses, Java Security - Java DevSecOps, Java Standard Library, Java Libraries, Java Frameworks, Java Research, Java GitHub, Written in Java, Java Popularity, Java Awesome List, Java Versions. (navbar_java and navbar_java_detailed - see also navbar_jvm, navbar_java_concurrency, navbar_java_standard_library, navbar_java_libraries, navbar_java_navbars)
© 1994 - 2024 Cloud Monk Losang Jinpa or Fair Use. Disclaimers
SYI LU SENG E MU CHYWE YE. NAN. WEI LA YE. WEI LA YE. SA WA HE.