

Структура java-файла
(классы без внутренних классов и блоков-инициализаторов)
[ package packageName; ] |
|
[ import packageOrClassNameToImport; |
|
… ] |
|
[ accessSpecifier ] class ClassName[ typeParameters ] |
// класс |
[ extendsOrImplements ] { |
|
[ accessSpecifier ] dataType variableName [ = initialValue ] [ , …]; |
// поле |
... |
|
[accessSpecifier ] [ typeParameters ] ClassName ( [ argumentsList ] ) {
//конструктор
operatorsList
}
…
[ accessSpecifier ] [ typeParameters ] retValueDataType
methodName ( [ argumentsList ] ) [ throwsList ] { //метод operatorsList
}
…
}
[…] |
//еще классы и/или интерфейсы |

Лексика языка Java
Тексты программ рассматриваются компилятором как последовательность UNICODE-символов в формате UTF-8 (форматы ASCII и Latin-1 являются допустимыми подмножествами UTF-8).
Где угодно можно записать Unicode-символ в таком представлении: \uxxxx, где x – шестнадцатеричная цифра (например, \u0020 – символ пробела).
Идентификатор в языке Java - это последовательность букв (не обязательно латинских), цифр (цифра не может быть первым символом), подчеркиваний ( _ ) и любых валютных символов Unicode (например $, €, £, ¥ …). Идентификаторы «чувствительны» к регистру символов, т.е. long и Long – это разные слова.
Способы записи литералов (123, "строка", 0xfffe, 3.14159, 1e-13, '\t', …) в основном унаследованы из С/С++.
Знаки операций, операторы и комментарии в основном унаследованы от С/С++.

Специальные идентификаторы (зарезервированные слова)
abstract |
double |
int |
strictfp *(1.2) |
assert ** (1.4) |
else |
interface |
super |
boolean |
extends |
long |
switch |
break |
false |
native |
synchronized |
byte |
final |
new |
this |
case |
finally |
null |
throw |
catch |
float |
package |
throws |
char |
for |
private |
transient |
class |
goto *** |
protected |
true |
const *** |
if |
public |
try |
continue |
implements |
return |
void |
default |
import |
short |
volatile |
do |
instanceof |
static |
while |

Начнем с operatorsList: Типы данных (1)
Java – язык со строгой типизацией.
Типы данных: примитивные и ссылочные.
Примитивных типов данных в языке Java 8 (нет unsigned):
Тип |
Содержит |
Размер |
Диапазон |
boolean |
true/false |
1 бит |
– |
char |
символ Unicode |
16 бит |
от \u0000 до \uFFFF |
byte |
целое со знаком |
8 бит |
от –128 до 127 |
short |
целое со знаком |
16 бит |
от –32768 до 32767 |
int |
целое со знаком |
32 бит |
от –2147483648 до 2147483647 |
long |
целое со знаком |
64 бит |
от –9223372036854775808 до |
|
|
|
9223372036854775807 |
float |
вещественное |
32 бит |
от +–1.4Е – 45 до +–3.4023285Е38 |
double |
вещественное |
64 бит |
от +–4.9Е – 324 до +–1.79769331348623157Е308 |

Типы данных (2)
Преобразования примитивных типов
|
N |
- невозможно; |
|
|
|
|
|
|
|
|
E - требуется явное (explicit) указание типа; |
|
|
||||||
|
A |
- автоматически (automatic); |
|
|
|
|
|||
|
A* - автоматически но с возможной потерей младших разрядов |
||||||||
из: |
в: |
boolean |
byte |
short |
char |
int |
long |
float |
double |
boolean |
|
- |
N |
N |
N |
N |
N |
N |
N |
byte |
|
N |
- |
A |
E |
A |
A |
A |
A |
short |
|
N |
E |
- |
E |
A |
A |
A |
A |
char |
|
N |
E |
E |
- |
A |
A |
A |
A |
int |
|
N |
E |
E |
E |
- |
A |
A* |
A |
long |
|
N |
E |
E |
E |
E |
- |
A* |
A* |
float |
|
N |
E |
E |
E |
E |
E |
- |
A |
double |
|
N |
E |
E |
E |
E |
E |
E |
- |

Типы данных (3)
Ссылочные типы данных:
объекты (экземпляры классов); массивы (примитивных или ссылочных типов).
Указателей, с которыми можно явно манипулировать, в языке Java нет. Тем не менее, в байт-коде любой экземпляр класса представлен указателем (ссылкой). Операция . в языке Java по существу эквивалентна операции -> в C/C++:
System.out.println( "Hello, World!" );
Здесь имена System и out надо понимать как указатели на объекты, автоматически создаваемые виртуальной машиной при запуске программы на выполнение.

Типы данных (4)
Не существует возможности создавать глобальные переменные или глобальные функции:
Все переменные могут быть либо полями классов, либо локальными переменными методов.
Любая функция может быть объявлена только как метод какого-либо класса.
В языке Java отсутствуют структуры (struct) и объединения (union).
Нет спецификатора typedef, позволяющего давать символические имена производным типам данных и использовать эти имена впоследствии.

Операции (1)
В основном унаследованы от С/С++
P A Операция Тип(ы) операнда(ов) |
Действие |
15 L .
[ ] …
( )
++ – –
14 R ++ – –
+ –
~
!
объект . член класса |
доступ к полю или методу объекта |
массив [ целое ] … |
доступ к элементу массива |
метод ( список аргументов ) |
вызов метода |
переменная |
постфиксный инкремент декремент |
переменная |
префиксный инкремент декремент |
число / переменная |
унарный плюс минус |
целое |
битовое дополнение |
булево |
логическое отрицание |

Операции (2)
P |
A |
Операция |
Тип(ы) операнда(ов) |
Действие |
13 |
R |
new |
класс( список |
создание объекта |
|
|
|
аргументов) |
|
|
|
(type) |
любой тип |
приведение к указанному типу |
12 |
L |
* / % |
число число |
умножение деление остаток |
11 |
L |
+ – |
число число |
сложение вычитание |
|
|
+ |
строка любой тип |
конкатенация строк |
10 |
L |
<< |
целое целое |
сдвиг влево |
|
|
>> |
целое целое |
сдвиг вправо с размножением знака |
|
|
>>> |
целое целое |
сдвиг вправо с дополнением нулем |

Операции (3)
P |
A |
Операция |
Тип(ы) операнда(ов) |
Действие |
|
9 |
L |
< |
<= |
число число |
меньше / меньше или равно |
|
|
> |
>= |
число число |
больше / больше или равно |
|
|
instanceof |
ссылка тип |
сравнение типов |
|
8 |
L |
= = |
|
примитив примитив |
сравнение на идентичность |
|
|
! = |
|
примитив примитив |
сравнение на неидентичность |
|
|
= = |
|
ссылка ссылка |
сравнение на идентичность |
|
|
! = |
|
ссылка ссылка |
сравнение на неидентичность |