JAVA, можете ли вы объяснить странное для меня for(: );?
Noodle noodle : allTheNoodles
Условно можно прочитать как: переменная noodle в массиве объектов Noodle[].
Это тип цикла for each, где итерируя вы получаете каждый объект содержащийся в массиве Noodle[] 
А чтобы обратиться к соответствующему объекту в цикле вы можете использовать переменную noodle. Т.е. в каждой итерации этой переменной будет присвоен следующий объект содержащийся в массиве
Вышеуказанные ответы не показали одну ключевую особенность, которая доступна на данный момент, а именно использование var в схеме for.
Нет абсолютно никакой необходимости в том, чтобы явно определять тип переменной, можно просто обойтись следующей конструкцией: for (var noodle : allTheNoodles)

Более того, жизнь эффективно упрощается, когда вы переходите от массивов к коллекциям и потокам (streams api), в этом случае появляется прямой доступ к лямбдам и параллелизации:
Noodle[] allTheNoodles = {spaghetti, ramen, pho};
Stream.of(allTheNoodles).parallelStream().forEach(noodle -> { System.out.println(noodle.getCookPrep()) });