NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Вы правы. Идея, лежащая в основе атрибутов, не являющихся частью пространства имен по умолчанию, заключается в том, что они считаются существующими в «пространстве имен элементов» & mdash; поэтому в этом случае <foo:child/>
считается «пространством имен» для @attrib
. Обратите внимание, что это просто концептуально; нет никакого API или чего-либо, что ссылается на пространства имен атрибутов таким образом.
Это было выбрано потому, что несколько элементов могут иметь атрибуты с одинаковыми именами, но разными значениями & mdash; в отличие от традиционного пространства имен, которое представляет собой набор имен (поэтому без дубликатов). В некотором смысле, это дает больше структуры пространству имен, вместо того, чтобы иметь плоский набор.
Вы можете прочитать об этом в очень старой версии рекомендации Пространства имен .
Это соглашение означает, что всякий раз, когда вы видите префиксный атрибут, он представляет некоторую «дополнительную» информацию, которая не связана с основной схемой в документе.
Ваша интерпретация спецификации верна. Некоторое обоснование также приводится во втором абзаце раздела 6.2 в спецификации пространств имен, на которую вы ссылались:
интерпретация нефиксированных атрибутов определяется элементом, на котором они появляются.
Но меня также интересовали бы некоторые подробности о том, почему было выбрано это конкретное поведение.