Ответ 1
Это означает одно: это расширенный цикл.
for (String i: words)
означает те же самые вещи, что и
for (int i = 0; i < words.length; i++) {
//
}
Джошуа Блох, в пункте 46 его стоит прочитать Эффективная Java, говорит следующее:
Цикл for-each, введенный в версии 1.5, избавляется от беспорядка и возможности ошибки, полностью спрятав итератор или переменную индекса. Полученная идиома в равной степени относится к коллекциям и массивам:
Предпочтительная идиома для итерации над коллекциями и массивами
for (Element e : elements) {
doSomething(e);
}
Когда вы видите двоеточие (:), прочитайте его как "in". Таким образом, вышеприведенный цикл читается как "для каждого элемента e в элементах". Обратите внимание, что для использования цикла for-each нет ограничений производительности даже для массивов. Фактически, он может предложить небольшое преимущество в производительности по сравнению с обычным циклом в некоторых случаях, поскольку он вычисляет предел индекса массива только один раз. Хотя вы можете сделать это вручную (пункт 45), программисты не всегда это делают.