Чтение онлайн

на главную - закладки

Жанры

Программирование на Java

Вязовик Н.А.

Шрифт:

Операторы в блоке выполняются слева направо, сверху вниз. Если все операторы (выражения) в блоке выполняются нормально, то и весь блок выполняется нормально. Если какой-либо оператор (выражение) завершается ненормально, то и весь блок завершается ненормально.

Нельзя объявлять несколько локальных переменных с одинаковыми именами в пределах видимости блока. Приведенный ниже код вызовет ошибку времени компиляции.

public class Test {

public Test {

}

public static void main(String[] args) {

Test t = new Test;

int x;

lbl: {

int x = 0;

System.out.println("x = " + x);

}

}

}

В

то же время не следует забывать, что локальные переменные перекрывают видимость переменных-членов. Так, следующий пример отработает нормально.

public class Test {

static int x = 5;

public Test { }

public static void main(String[] args) {

Test t = new Test;

int x = 1;

System.out.println("x = " + x);

}

}

На консоль будет выведено x = 1.

То же самое правило применимо к параметрам методов.

public class Test {

static int x;

public Test {

}

public static void main(String[] args) {

Test t = new Test;

t.test(5);

System.out.println("Member value x = " + x);

}

private void test(int x) {

this.x = x + 5;

System.out.println("Local value x = " + x);

}

}

В результате работы этого примера на консоль будет выведено:

Local value x = 5

Member value x = 10

На следующем примере продемонстрируем, что область видимости локальной переменной ограничена областью видимости блока, или оператора, в пределах которого данная переменная объявлена.

public class Test {

static int x = 5;

public Test {

}

public static void main(String[] args) {

Test t = new Test; {

int x = 1;

System.out.println("First block x = " + x);

}

{

int x = 2;

System.out.println("Second block x =" + x);

}

System.out.print("For cycle x = ");

for(int x =0;x<5;x++) {

System.out.print(" " + x);

}

}

}

Данный пример откомпилируется без ошибок и на консоль будет выведен следующий результат:

First block x = 1

Second block x =2

For cycle x = 0 1 2 3 4

Следует помнить, что определение локальной переменной есть исполняемый оператор. Если задана инициализация переменной, то выражение исполняется слева направо и его результат присваивается локальной переменной. Использование неинициализированных локальных переменных запрещено и вызывает ошибку компиляции.

Следующий

пример кода

public class Test {

static int x = 5;

public Test {

}

public static void main(String[] args) {

Test t = new Test;

int x;

int y = 5;

if( y > 3) x = 1;

System.out.println(x);

}

}

вызовет ошибку времени компиляции, т.к. возможны условия, при которых переменная x может быть не инициализирована до ее использования (несмотря на то, что в данном случае оператор if(y > 3) и следующее за ним выражение x = 1; будут выполняться всегда).

Пустой оператор

Точка с запятой (;) является пустым оператором. Данная конструкция вполне применима там, где не предполагается выполнение никаких действий. Преждевременное завершение пустого оператора невозможно.

Метки

Любой оператор, или блок, может иметь метку. Метку можно указывать в качестве параметра для операторов break и continue. Область видимости метки ограничивается оператором, или блоком, к которому она относится. Так, в следующем примере мы получим ошибку компиляции:

public class Test {

static int x = 5;

static {

}

public Test {

}

public static void main(String[] args) {

Test t = new Test;

int x = 1;

Lbl1: {

if(x == 0) break Lbl1;

}

Lbl2: {

if(x > 0) break Lbl1;

}

}

}

В случае, если имеется несколько вложенных блоков и операторов, допускается обращение из внутренних блоков к меткам, относящимся к внешним.

Этот пример является вполне корректным:

public class Test {

static int x = 5; static {

}

public Test {

}

public static void main(String[] args) {

Test t = new Test;

int L2 = 0;

Test: for(int i = 0; i< 10;i++) {

test: for(int j = 0; j< 10;j++) {

if( i*j > 50) break Test;

}

}

}

private void test {

;

}

}

В этом же примере можно увидеть, что метки используют пространство имен, отличное от пространства имен переменных, методов и классов.

Традиционно использование меток не рекомендуется, особенно в объектно-ориентированных языках, поскольку серьезно усложняет понимание порядка выполнения кода, а значит, и его тестирование и отладку. Для Java этот запрет можно считать не столь строгим, поскольку самый опасный оператор goto отсутствует. В некоторых ситуациях (как в рассмотренном примере с вложенными циклами) использование меток вполне оправданно, но, конечно, их применение следует ограничивать лишь самыми необходимыми случаями.

Поделиться:
Популярные книги

Ермак. Регент

Валериев Игорь
10. Ермак
Фантастика:
попаданцы
альтернативная история
4.80
рейтинг книги
Ермак. Регент

На прицеле

Кронос Александр
6. Лэрн
Фантастика:
фэнтези
боевая фантастика
стимпанк
5.00
рейтинг книги
На прицеле

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Сексуальная жизнь мужчины. Книга 1

Еникеева Диля Дэрдовна
Дом и Семья:
образовательная литература
здоровье и красота
7.00
рейтинг книги
Сексуальная жизнь мужчины. Книга 1

Жизнь-поиск

Данилов Борис Федорович
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Жизнь-поиск

Морана

Кулаков Алексей Иванович
Фантастика:
фэнтези
альтернативная история
5.00
рейтинг книги
Морана

Маршалы и генсеки

Зенькович Николай Александрович
Тирания
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Маршалы и генсеки

Жизнь с препятствиями

Кривин Феликс Давидович
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
Жизнь с препятствиями

Игры патриотов

Клэнси Том
1. Джек Райан
Детективы:
триллеры
6.86
рейтинг книги
Игры патриотов

Тринадцатый VII

NikL
7. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Тринадцатый VII

"Люди, годы, жизнь", книга VI

Эренбург Илья Григорьевич
Проза:
классическая проза
6.25
рейтинг книги
Люди, годы, жизнь, книга VI

Первый среди равных. Книга VII

Бор Жорж
7. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Первый среди равных. Книга VII

Ученик. Книга третья

Первухин Андрей Евгеньевич
3. Ученик
Фантастика:
фэнтези
7.64
рейтинг книги
Ученик. Книга третья

"Фантастика 2025-123". Компиляция. Книги 1-32

Ипатова Наталия Борисовна
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
попаданцы
мистика
фэнтези
5.00
рейтинг книги
Фантастика 2025-123. Компиляция. Книги 1-32