Брюс Эккель - Философия Java3

Тут можно читать онлайн Брюс Эккель - Философия Java3 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Брюс Эккель - Философия Java3 краткое содержание

Философия Java3 - описание и краткое содержание, автор Брюс Эккель, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Философия Java3 - читать онлайн бесплатно полную версию (весь текст целиком)

Философия Java3 - читать книгу онлайн бесплатно, автор Брюс Эккель
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

if(i % 10 != 0) continue; 11 Возврат в начало цикла

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

}

}

} /* Output:

0 9 18 27 36 45 54 63 72 0 9 18 27 36 45 54 63 72 10 20 30 40 *///:-

В цикле for переменная i никогда не достигает значения 100 — команда break прерывает цикл, когда значение переменной становится равным 74. Обычно break используется только тогда, когда вы точно знаете, что условие выхода из цикла действительно достигнуто. Команда continue переводит исполнение в начало цикла (и таким образом увеличивает значение i), когда i не делится без остатка на 9. Если деление производится без остатка, значение выводится на экран.

Второй цикл for демонстрирует использование «синтаксиса foreach» с тем же результатом.

Последняя часть программы демонстрирует «бесконечный цикл», который теоретически должен исполняться вечно. Однако в теле цикла вызывается команда break, которая и завершает цикл. Команда continue переводит исполнение к началу цикла, и при этом остаток цикла не выполняется. (Таким образом, вывод на экран в последнем цикле происходит только в том случае, если значение i делится на 10 без остатка.) Значение 0 выводится, так как 0 % 9 дает в результате 0.

Вторая форма бесконечного цикла — for(;;). Компилятор реализует конструкции while(true) и for(;;) одинаково, так что выбор является делом вкуса.

Нехорошая команда goto

Ключевое слово goto появилось одновременно с языками программирования. Действительно, безусловный переход заложил основы принятия решений в языке ассемблера: «если условие А, перейти туда, а иначе перейти сюда». Если вам доводилось читать код на ассемблере, который генерируют фактически все компиляторы, наверняка вы замечали многочисленные переходы, управляющие выполнением программы (компилятор Java производит свой собственный «ассемблерный» код, но последний выполняется виртуальной-машиной Java, а не аппаратным процессором).

Команда goto реализует безусловный переход на уровне исходного текста программы, и именно это обстоятельство принесло ей дурную славу. Если программа постоянно «прыгает» из одного места в другое, нет ли способа реорганизовать ее код так, чтобы управление программой перестало быть таким «прыгучим»? Команда goto впала в настоящую немилость с опубликованием знаменитой статьи Эдгара Дейкстры «Команда GOTO вредна» ( Goto considered harmful), их тех пор порицание команды goto стало чуть ли не спортом, а защитники репутации многострадального оператора разбежались по укромным углам.

Как всегда в ситуациях такого рода, существует «золотая середина». Проблема состоит не в использовании goto вообще, но в злоупотреблении — все же иногда именно оператор goto позволяет лучше всего организовать управление программой.

1Оригинал статьи Go То Statement considered harmful имеет постоянный адрес в Интернете: http:// www.acm.org/classics/oct95. — Примеч. ред.

Хотя слово goto зарезервировано в языке Java, оно там не используется; Java не имеет команды goto. Однако существует механизм, чем-то похожий на безусловный переход и осуществляемый командами break и continue. Скорее, это способ прервать итерацию цикла, а не передать управление в другую точку программы. Причина его обсуждения вместе с goto состоит в том, что он использует тот же механизм — метки.

Метка представляет собой идентификатор с последующим двоеточием:

label 1•

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

labell:

внешний-цикл {

внутренний-цикл { //.

break; // 1 // .

continue; // 2 //..

continue labell; // 3 //...

break labell; // 4

Философия Java3 - изображение 13

В первом случае (1) команда break прерывает выполнение внутреннего цикла, и управление переходит к внешнему циклу. Во втором случае (2) оператор continue передает управление к началу внутреннего цикла. Но в третьем варианте (3) команда continue labell влечет выход из внутреннего и внешнего циклов и возврат к метке labell. Далее выполнение цикла фактически продолжается, но с внешнего цикла. В четвертом случае (4) команда break labell также вызывает переход к метке labell, но на этот раз повторный вход в итерацию не происходит. Это действие останавливает выполнение обоих циклов. Пример использования цикла for с метками:

//: control/LabeledFor.java

// Цикл for с метками

import static net.mindview.util.Print.*;

public class LabeledFor {

public static void main(String[] args) { int i = 0;

outer- // Другие команды недопустимы for(; true ,) { // infinite loop

inner: // Другие команды недопустимы for(; i < 10; i++) {

printC'i = " + i);

if(i == 2) {

print("continue"); continue;

}

if(i == 3) {

printC'break");

i++; // В противном случае значение i

// не увеличивается break;

}

if(i - 7) {

printC'continue outer");

i++; // В противном случае значение i

// не увеличивается continue outer;

}

if(i == 8) {

printC'break outer"); break outer;

}

for(int k = 0; k < 5; k++) {• if (k == 3) {

printC'continue inner"); continue inner;

}

}

}

}

// Использовать break или continue // с метками здесь не разрешается

}

} /* Output: i = 0

continue inner i = 1

continue inner i = 2 continue i = 3 break i = 4

continue inner i = 5

continue inner i = 6

continue inner i = 7

continue outer i = 8

break outer *///:-

Заметьте, что оператор break завершает цикл for, вследствие этого выражение с инкрементом не выполняется до завершения очередного шага. Поэтому из-за пропуска операции инкремента в цикле переменная непосредственно увеличивается на единицу, когда i — 3. При выполнении условия i == 7 команда continue outer переводит выполнение на начало цикла; инкремент опять пропускается, поэтому и в этом случае переменная увеличивается явно.

Без команды break outer программе не удалось бы покинуть внешний цикл из внутреннего цикла, так как команда break сама по себе завершает выполнение только текущего цикла (это справедливо и для continue).

Конечно, если завершение цикла также приводит к завершению работы метода, можно просто применить команду return.

Теперь рассмотрим пример, в котором используются команды break и continue с метками в цикле while:

//: control/LabeledWhile java

// Цикл while с метками

import static net mindview.util.Print.*;

public class LabeledWhile {

public static void main(String[] args) { int i = 0; outer:

while(true) {

print("Внешний цикл while"); while(true) { i++;

printC'i = " + i); if(i == 1) {

print("continue"); continue;

}

if(i == 3) {

print("continue outer"); continue outer;

}

if(i == 5) {

printC'break"); break,

}

if(i == 7) {

printC'break outer"); break outer;

}

}

}

}

} /* Output: Внешний цикл while i = 1 continue i = 2 i = 3

continue outer Внешний цикл while i = 4 i = 5 break

Внешний цикл while i = 6

i = 7

break outer

*///-

Те же правила верны и для цикла while:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Брюс Эккель читать все книги автора по порядку

Брюс Эккель - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Философия Java3 отзывы


Отзывы читателей о книге Философия Java3, автор: Брюс Эккель. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x