Обычно для каждого цикла используется обычная форма:
for(Foo bar: bars){
    bar.doThings();
}
Но если я хочу сохранить бар до цикла, я не могу использовать для каждого цикла:
Foo bar = null;
// - Syntax error on token "bar", Identifier expected after this token
for(bar: bars){ 
    if(bar.condition())
        break;
}
bar.doThings();
В цикле for получена синтаксическая ошибка, упомянутая выше.
Почему это? Меня не интересуют обходные пути, но просто любопытно соображения, лежащие в основе этого ограничения.
В отличие от обычного цикла, переменная может быть объявлена вне или вообще не...
int i = 1;
for(;i<max;i++){
    for(;;){
        // Do things
    }
}