Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Я высуну шею и скажу, что каждое техническое положение требует четкого понимания битовых операций.
И у меня есть история, которая косвенно обращается к теме.
январь 2007 я был в Cochin, Индия, принимающая на работу на постоянный штат разработки. Так как я не был вовлечен в предварительное экранирование кандидатов, я понятия не имел, какой стандарт ожидать, таким образом, я подготовил диапазон вопросов и тем в пределах от простого понимания двоичных и шестнадцатеричных до архитектуры, дизайна и управления проектами.
, Когда я обсудил свой подход с индийским парнем HR, меня (мягко) упрекнули за подачу слишком низко. Он прояснил, что мои вопросы о шестнадцатеричном числе будут возможно истолкованы как оскорбление опыта кандидатов или образования.
, Но мой опыт интервьюирования сотен кандидатов в Великобритании зафиксировал во мне убеждение, что не было возможно сделать подачу слишком низко. Мое мнение было и все еще - что, если это становится очевидным, кандидат хорошо квалифицирован затем, это просто и легко для корректировки уровня обсуждения. Я никогда не сделал, чтобы любой выразил чувства того, чтобы быть оскорбленным, наоборот я думаю, что хорошо подходящий кандидат мог бы чувствовать облегчение в многообещающем начале интервью. Это также помогает повредить лед и создать взаимопонимание, необходимое для значимого интервью. С другой стороны, неподготовленные кандидаты обычно падают на эти более низкие препятствия.
, Но не желание полностью проигнорировать локальный совет я осторожно решил включать свои основные темы интервью и был вполне готов отказаться от них, если они не работали.
, Поскольку интервью прогрессировали, я был рад, что запустил на том уровне. Это не оскорбляло никого, и неподходящие кандидаты были легко идентифицированы.
Нельзя сказать, что я ожидаю, что кандидаты будут повседневно иметь дело с битовым жонглированием, но безотносительно языка четкое понимание основных принципов программирования важно. Даже разработчики в более высоких уровнях абстракции подвергаются для преобразовывания в шестнадцатеричную систему регулярно (значения RGB, например). При болтании как попугай материал, который Вы находите в сети , только поможет до такой степени, что вещи работают в совершенно первый раз.
, Но для разработчиков, начинающих за прошлые пять лет, я полагаю, что слишком легко замять основные принципы, избалованные хорошо умышленными IDE и мемом программирования "codeless". Установка Visual Studio spash экранирует хвастовство о разработке без написания кода. Действительно, Visual Studio гниет ум ?
Битовые операции примерно не сохраняют память. Они действительно полезны для написания кода разъединения. Который Вы видели бы?
OpenFile("...", true, false)
или
OpenFile("...", writeonly | append)
Это - своего рода бессмысленный/тривиальный пример, но Вы получаете идею.
Много программистов в эти дни, кажется, просто заполняет их головы достаточным знанием к коду "в лоб" и затем отправленный в трудовые ресурсы, не преподаваясь то, что даже означают слова как "поразрядный".
Это - умирающее искусство, которое я говорю Вам...
Битовые поля очень полезны, если у Вас есть очень трудные требования к памяти и скорости, или при выполнении аппаратного программирования низкого уровня.
, Если Вы не делаете встроенное программирование или что-то подобное, Вам не нужны они. Существует намного больше читаемых, мощных, расширяемых механизмов для выполнения той же задачи. Например, EnumSets Java.
я ожидал бы, что хороший программист будет знать их и не использовать их :-p
Если бы у Вас есть уже сложное приложение, почему Вы сделали бы его более сложным при помощи поразрядных флагов. Я лично не использовал бы этот вид флаги, если бы больше не было позитивных аспектов, затем просто являющихся прохладным. И из опыта, пишущий это довольно легко, корректирование его позже больше тяжелее, уже не говоря о том, если Вы не записали это сами.
, О, и для записи, я действительно знаю, как использовать их.
"Много" довольно универсально, мы хотим имена! ;-)
Серьезно, я происхожу из ассемблера и C, и я являюсь довольно опытным с битовыми операциями. Но я не использовал бы их, чтобы заменить, сказать 10 несвязанных булевских переменных в классе с двоичными флагами в целом числе... Если, возможно, у меня нет миллионов экземпляров этого класса!
Должен, я должен управлять партией экземпляра булевских переменных, я использовал бы некоторый bitset класс, чтобы оптимизировать и абстрагировать далеко эти массивы битов.
Теперь, побитовая обработка fu почти обязательна в программировании, если Вы захотите получить доступ к компонентам RGB к значениям, если Вы захотите назвать некоторые API (даже если это будет просто осуществлением операции ИЛИ много именованных флагов), и т.д.
то Короче говоря, я не буду использовать это в каждом проекте, который я делаю, но Вы не можете проигнорировать, как сделать это (немного как regexes...).
Я все еще использую побитовые операторы, хотя, поскольку мой основной предпочтительный язык (и профессионально) является C#, я часто использую перечисления Флага для него :) Но да, я думаю много людей, которые кодируют в вещах как PHP, выучились самостоятельно, и не знают о битовых операциях или использованиях их.
Являющийся выучившимся самостоятельно самостоятельно, я не знал много о них, пока я не начал писать код C++ и C. Теперь я использую их, где они имеют смысл :)
У них всегда есть место для хранения большого количества булевых флагов в небольшом количестве пространства;
Просто думают, есть ли у Вас 32 флага (например); Вы могли сохранить их всех в одном "длинном целом" и просто израсходовать 4 байта, Теперь предположить, что приняли решение использовать длинное для каждого флага (просто, потому что код легче поддержать - Вы теперь заставили 128 байтов иметь дело с.
Моим образованием является, прежде всего, C/C++, таким образом, я воспитывался на них так, я определенно использую их на каждом языке, который я использую; но я действительно соглашаюсь; программисты новичка склонны даже не заботиться - вся эта память, лежащая вокруг - кто заботится?