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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
С точки зрения прямого самого прохладного я должен был бы сказать, что PyD Kirk McDonald (и другая подобная привязка), поскольку они имеют, делают к огромному объему работы в обнаружении и обработке большого количества различных типов, а также поколения сложного кода.
Тем не менее PyD только побеждает, потому что БЛЕЙД технически использует CTFE, не шаблоны.
На большем количестве личного сообщения, D шаблоны получили широкое применение в моем исследовательском проекте. Это - платформа моделирования, где модули могут определить свои собственные частные типы данных. Представление нового пользовательского типа к платформе требует одной строки кода, который создает синтаксический анализатор XML для типа, а также связал сетевой код сериализации/десериализации.
тип произвольной точности Это генерирует код ASM во время компиляции (прежде чем компилятор сделает)
DParse в инструментах Scrapple является шаблонным парсером-генератором. Однако ldc является единственным компилятором D с функционирующим GC времени компиляции (но даже тогда это имеет пару странно случайных катастрофических отказов). Я играл с ним немного, и можно сделать некоторые интересные вещи как парсинг файла конфигурации и материал, но пока GC времени компиляции не является полностью рабочим, Вы не можете сделать больших вещей.
Мост D/Objective-C использование обрабатывает по шаблону, чтобы позволить Вам управлять объектами Какао в D.
Моим избранным был бы ElemType и KeyType от tools.base:
template ElemType(T) {
alias typeof((function() {
foreach (elem; Init!(T)) return elem; assert(false);
})()) ElemType;
}
template KeyType(T) {
alias typeof((function() {
foreach (key, elem; Init!(T)) return key; assert(false);
})()) KeyType;
}
объединенная шаблонная структура типа (Это привычка позволяют Вам совершать ошибки единицы.)
строка Времени компиляции, хеширующая . Можно использовать это для запутывания встроенных строк в коде. Просто поиск "хеша". довольно много других интересных образцов на той странице, также.
Я отвечу на свой вопрос, потому что этого не существовало, когда я его задал. Я написал патч для сборщика мусора, который использует шаблоны и самоанализ во время компиляции, чтобы генерировать информацию о смещении указателя для произвольно сложных пользовательских типов, чтобы обеспечить точное сканирование кучи, вместо того, чтобы делать это внутри компилятора.