Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
, Когда Вы получаете итератор и переступаете через него, который является внешним итератором
for (Iterator iter = var.iterator(); iter.hasNext(); ) {
Object obj = iter.next();
// Operate on obj
}
, Когда Вы передаете функциональный объект методу для работания на основе списка, который является внутренним итератором
var.each( new Functor() {
public void operate(Object arg) {
arg *= 2;
}
});
Я нашел этот описание :
Внешний по сравнению с внутренними итераторами.
Внешние Итераторы - когда повторением управляет объект коллекции, мы говорим, что у нас есть внешний Итератор.
На языках как .net или Java очень легко создать внешние итераторы. В нашей классической реализации реализован внешний итератор. В следующем примере используется внешний итератор:
// using iterators for a clloection of String objects:
// using in a for loop
for (Iterator it = options.iterator(); it.hasNext(); ) {
String name = (String)it.next();
System.out.println(name);
}
// using in while loop
Iterator name = options.iterator();
while (name.hasNext() ){
System.out.println(name.next() );
}
// using in a for-each loop (syntax available from java 1.5 and above)
for (Object item : options)
System.out.println(((String)item));
Внутренние Итераторы - Когда итератор управляет им, у нас есть внутренний итератор
, С другой стороны реализация и использование внутренних итераторов являются действительно трудными. То, когда внутренний итератор используется, это означает, что код быть выполненным, делегировано к совокупному объекту. Например, на языках, которые предлагают поддержку этого, легко назвать внутренние итераторы:
collection do: [:each | each doSomething] (Smalltalk)
основная идея состоит в том, чтобы передать код, который будет выполняться к набору. Тогда набор назовет внутренне doSomething метод на каждом из компонентов. В C++ возможно отправить doMethod метод как указатель. В C#.NET или VB.NET возможно отправить метод как делегата. В Java Functor
должен использоваться шаблон разработки. Основная идея состоит в том, чтобы создать основной Интерфейс только с одним методом (doSomething). Тогда метод будет реализован в классе, который реализует интерфейс, и класс будет передан набору для итерации. Для получения дополнительной информации посмотрите Functor
шаблон разработки.
Это о кто средства управления повторение .
Другие детали находятся в этом вопросе , Каковы преимущества интерфейса Iterator в Java?