1 - Структура язака

2 - Lexical Issues

2.1 - Comments

2.2 - Identifiers

2.3 - Keywords

2.4 - Literals

2.4.1 - Integer Literals

2.4.2 - Floating Point Literals

2.4.3 - Boolean Literals

2.4.4 - Character Literals

2.4.5 - String Literals

2.5 - Operators and Miscellaneous Separators

3 - Types

3.1 - Numeric Types

3.1.1 - Integer Types

3.1.2 - Floating Point Types

3.1.3 - Character Types

3.2 - Boolean Types

3.3 - Arrays

3.3.1 - Array Detail

4 - Classes

4.1 - Casting Between Class Types

4.2 - Methods

4.2.1 - Instance Variables

4.2.2 - The this and super Variables

4.2.3 - Setting Local Variables

4.3 - Overriding Methods

4.4 - Overload Resolution

4.5 - Constructors

4.6 - Object Creation--the new Operator

4.6.1 - Garbage Collection

4.6.2 - Finalization

4.6.3 - The null Reference

4.7 - Static Methods, Variables, and Initializers

4.7.1 - Order of Declarations

4.7.2 - Order of Initialization

4.8 - Access Specifiers

    1. - Variable Scoping Rules
    2. - Modifiers

4.10.1 - Threadsafe Variables

4.10.2 - Transient Variables

4.10.3 - Final Classes, Methods, and Variables

4.10.4 - Native Methods

4.10.5 - Abstract Methods

4.10.6 - Synchronized Methods and Blocks

5 - Interfaces

5.1 - Interfaces as Types

5.2 - Methods in Interfaces

5.3 - Variables in Interfaces

5.4 - Combining Interfaces

6 - Packages

6.1 - Specifying a Compilation Unit's Package

6.2 - Using Classes and Interfaces from Other Packages

7 - Expressions

7.1 - Operators

7.1.1 - Operators on Integers

7.1.2 - Operators on Boolean Values

7.1.3 - Operators on Floating Point Values

7.1.4 - Operators on Arrays

7.1.5 - Operators on Strings

7.1.6 - Operators on Objects

7.2 - Casts and Conversions

8 - Statements

8.1 - Declarations

8.2 - Expressions

8.3 - Control Flow

8.4 - Exceptions

8.4.1 - The finally Statement

8.4.2 - Runtime Exceptions

A - Appendix: Floating Point

A.1 - Special Values

A.2 - Binary Format Conversion

A.3 - Ordering

A.4 - Summary of IEEE-754 Differences

B - Appendix: Java Language Grammar



CompilationUnit = 
        PackageStatement? ImportStatement* TypeDeclaration* 
; 
PackageStatement = 
        `package' PackageName `;' 
; 
ImportStatement = 
        `import' PackageName `.' `*' `;' 
|       `import' ( ClassName | InterfaceName )`;' 
; 
TypeDeclaration = 
        ClassDeclaration 
|       InterfaceDeclaration 
|       `;' 
; 
ClassDeclaration = 
        Modifier* `class' Identifier 
        (`extends' ClassName)? 
        (`implements' InterfaceName (`,' InterfaceName)*)? 
        `{' FieldDeclaration* `}' 
; 
InterfaceDeclaration = 
        Modifier* `interface' Identifier 
        (`extends' InterfaceName (`,' InterfaceName)*)? 
        `{' FieldDeclaration* `}' 
; 
FieldDeclaration = 
        DocComment? MethodDeclaration 
|       DocComment? ConstructorDeclaration 
|       DocComment? VariableDeclaration 
|       StaticInitializer 
|       `;' 
; 
MethodDeclaration = 
        Modifier* Type Identifier `(' ParameterList? `)' ( `[' `]' )* 
        ( `{' Statement* `}' | `;' ) 
; 
ConstructorDeclaration = 
        Modifier* Identifier `(' ParameterList? `)' 
        `{' Statement* `}' 
; 
VariableDeclaration = 
        Modifier* Type VariableDeclarator (`,' VariableDeclarator)* `;' 
; 
VariableDeclarator = 
        Identifier (`[' `]')* (`=' VariableInitializer)? 
; 

VariableInitializer  = 
        Expression 
|       `{'  ( VariableInitializer  ( `,' VariableInitializer  )* `,'? )? `}' 
; 
StaticInitializer = 
        `static' `{' Statement* `}' 
; 
ParameterList = 
        Parameter (`,' Parameter)* 
; 
Parameter = 
        TypeSpecifier Identifier (`[' `]')* 
; 
Statement = 
        VariableDeclaration 
|       Expression `;' 
|       `{' Statement* `}' 
|       `if' `(' Expression `)' Statement (`else' Statement)? 
|       `while' `(' Expression `)' Statement 
|       `do' Statement `while' `(' Expression `)' `;' 
|       `try' Statement (`catch' `(' Parameter `)' Statement)* 
                (`finally' Statement)? 
|       `switch' `(' Expression `)' `{' Statement* `}' 
|       `synchronized' `(' Expression `)' Statement 
|       `return' Expression? `;' 
|       `throw' Expression `;' 
|       `case' Expression `:' 
|       `default' `:' 
|       Identifier `:' Statement 
|       `break' Identifier? `;' 
|       `continue' Identifier? `;' 
|       `;' 
; 
Expression = 
        Expression `+' Expression 
|       Expression `-' Expression 
|       Expression `*' Expression 
|       Expression `/' Expression 
|       Expression `%' Expression 
|       Expression `^' Expression 
|       Expression `&;' Expression 
|       Expression `|' Expression 
|       Expression `&;&;' Expression 
|       Expression `||' Expression 
|       Expression `<;<;` Expression 
|       Expression `;;' Expression 
|       Expression `;;;' Expression 
|       Expression `=' Expression 
|       Expression `+=' Expression 
|       Expression `-=' Expression 
|       Expression `*=' Expression 
|       Expression `/=' Expression 
|       Expression `%=' Expression 
|       Expression `^=' Expression 
|       Expression `&;=' Expression 
|       Expression `|=' Expression 
|       Expression `<;<;=' Expression 
|       Expression `;;=' Expression 
|       Expression `;;;=' Expression 
|       Expression `<;` Expression 
|       Expression `;' Expression 
|       Expression `<;=' Expression 
|       Expression `;=' Expression 
|       Expression `==' Expression 
|       Expression `!=' Expression 
|       Expression `.' Expression 
|       Expression `,' Expression 
|       Expression `instanceof' ( ClassName | InterfaceName ) 
|       Expression `?' Expression `:' Expression 
|       Expression `[' Expression `]' 
|       `++' Expression 
|       `--' Expression 
|       Expression `++' 
|       Expression `--' 
|       `-' Expression 
|       `!' Expression 
|       `~' Expression 
|       `(' Expression  `)' 
|       `(' Type `)' Expression 
|       Expression  `(' ArgList? `)' 
|       `new' ClassName  `(' ArgList?`)' 
|       `new' TypeSpecifier  ( `[' Expression `]' )+ (`['  `]')* 
|       `new' `(' Expression  `)' 
|       `true' 
|       `false' 
|       `null' 
|       `super' 
|       `this' 
|       Identifier 
|       Number 
|       String 
|       Character 
; 
ArgList = 
        Expression (`,' Expression )* 
; 
Type = 
        TypeSpecifier (`[' `]')* 
; 
TypeSpecifier = 
        `boolean' 
|       `byte' 
|       `char' 
|       `short' 
|       `int' 
|       `float' 
|       `long' 
|       `double' 
|       ClassName 
|       InterfaceName 
; 


Modifier = 
        `public' 
|       `private' 
|       `protected' 
|       `static' 
|       `final' 
|       `native' 
|       `synchronized' 
|       `abstract' 
|       `threadsafe' 
|       `transient' 
; 
PackageName = 
        Identifier 
|       PackageName `.' Identifier 
; 

ClassName = 
        Identifier 
|       PackageName `.' Identifier 
; 

InterfaceName = 
        Identifier 
|       PackageName `.' Identifier 
;