An import declaration allows a static member or a named type to be referred to by a single unqualified identifier.
The first argument signals whether the declaration only imports static members.
The last argument signals whether the declaration brings all names in the named type or package, or only brings
a single name into scope.

A class body may contain declarations of members of the class, that is,
fields, classes, interfaces and methods.
A class body may also contain instance initializers, static
initializers, and declarations of constructors for the class.

An interface declaration introduces a new reference type whose members
are classes, interfaces, constants and abstract methods. This type has
no implementation, but otherwise unrelated classes can implement it by
providing implementations for its abstract methods.

A class or interface member can be an inner class or interface, a field or
constant, or a method or constructor. An interface may only have as members
constants (not fields), abstract methods, and no constructors.

An explicit constructor invocation invokes another constructor of the
same class, or a constructor of the direct superclass, which may
be qualified to explicitly specify the newly created object's immediately
enclosing instance.

A modifier specifying properties of a given declaration. In general only
a few of these modifiers are allowed for each declaration type, for instance
a member type declaration may only specify one of public, private or protected.

A synchronized statement acquires a mutual-exclusion lock on behalf of the executing thread, executes a block,
then releases the lock. While the executing thread owns the lock, no other thread may acquire the lock.

A try statement executes a block. If a value is thrown and the try statement has one or more catch clauses that
can catch it, then control will be transferred to the first such catch clause. If the try statement has a finally
clause, then another block of code is executed, no matter whether the try block completes normally or abruptly,
and no matter whether a catch clause is first given control.

A class instance creation expression is used to create new objects that are instances of classes.
| The first argument is a list of non-wildcard type arguments to a generic constructor.
What follows is the type to be instantiated, the list of arguments passed to the constructor, and
optionally a class body that makes the constructor result in an object of an anonymous class.

A cast expression converts, at run time, a value of one numeric type to a similar value of another
numeric type; or confirms, at compile time, that the type of an expression is boolean; or checks,
at run time, that a reference value refers to an object whose class is compatible with a specified
reference type.

The left-hand side of an assignment expression. This operand may be a named variable, such as a local
variable or a field of the current object or class, or it may be a computed variable, as can result from
a field access or an array access.

There are three kinds of reference types: class types, interface types, and array types.
Reference types may be parameterized with type arguments.
Type variables cannot be syntactically distinguished from class type identifiers,
and are thus represented uniformly as single ident class types.