Хорошим местом для начала является JavaDocs . Они охватывают это:
Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
- Вызов метода экземпляра нулевого объекта.
- Доступ или изменение поля нулевого объекта.
- Выполнение длины null, как если бы это был массив.
- Доступ или изменение слотов с нулевым значением, как если бы это был массив.
- Бросать нуль, как если бы это было значение Throwable.
Приложения должны бросать экземпляры этого класса для указания других незаконных видов использования нулевого объекта.
blockquote>Также, если вы попытаетесь использовать нулевую ссылку с
synchronized
, который также выдаст это исключение, за JLS :SynchronizedStatement: synchronized ( Expression ) Block
blockquote>
- В противном случае, если значение выражения равно null,
NullPointerException
.Как это исправить?
Итак, у вас есть
NullPointerException
. Как вы это исправите? Возьмем простой пример, который выдаетNullPointerException
:public class Printer { private String name; public void setName(String name) { this.name = name; } public void print() { printString(name); } private void printString(String s) { System.out.println(s + " (" + s.length() + ")"); } public static void main(String[] args) { Printer printer = new Printer(); printer.print(); } }
Идентифицирует нулевые значения
. Первый шаг - точно определить , значения которого вызывают исключение . Для этого нам нужно выполнить некоторую отладку. Важно научиться читать stacktrace . Это покажет вам, где было выбрано исключение:
Exception in thread "main" java.lang.NullPointerException at Printer.printString(Printer.java:13) at Printer.print(Printer.java:9) at Printer.main(Printer.java:19)
Здесь мы видим, что исключение выбрано в строке 13 (в методе
printString
). Посмотрите на строку и проверьте, какие значения равны нулю, добавив протоколирующие операторы или используя отладчик . Мы обнаруживаем, чтоs
имеет значение null, а вызов методаlength
на него вызывает исключение. Мы видим, что программа перестает бросать исключение, когдаs.length()
удаляется из метода.Трассировка, где эти значения взяты из
Затем проверьте, откуда это значение. Следуя вызовам метода, мы видим, что
s
передается сprintString(name)
в методеprint()
, аthis.name
- null.Трассировка, где эти значения должны быть установлены
Где установлен
this.name
? В методеsetName(String)
. С некоторой дополнительной отладкой мы видим, что этот метод вообще не вызывается. Если этот метод был вызван, обязательно проверьте порядок , что эти методы вызывают, а метод set не будет называться после методом печати. Этого достаточно, чтобы дать нам решение: добавить вызов
printer.setName()
перед вызовомprinter.print()
.Другие исправления
Переменная может иметь значение по умолчанию (и
setName
может помешать ему установить значение null):private String name = "";
Либо метод
printString
может проверить значение null например:printString((name == null) ? "" : name);
Или вы можете создать класс, чтобы
name
всегда имел ненулевое значение :public class Printer { private final String name; public Printer(String name) { this.name = Objects.requireNonNull(name); } public void print() { printString(name); } private void printString(String s) { System.out.println(s + " (" + s.length() + ")"); } public static void main(String[] args) { Printer printer = new Printer("123"); printer.print(); } }
См. также:
Я все еще не могу найти проблему
Если вы попытались отладить проблему и до сих пор не имеете решения, вы можете отправить вопрос для получения дополнительной справки, но не забудьте включить то, что вы пробовали до сих пор. Как минимум, включите stacktrace в вопрос и отметьте важные номера строк в коде. Также попробуйте сначала упростить код (см. SSCCE ).
SmartPaster - (СВОБОДНЫЙ) Скопировать/вставить генератор кода для строк
AnkhSvn - (СВОБОДНАЯ) Интеграция Управления исходным кодом SVN для VS.NET
Сервер VisualSVN - (БЕСПЛАТНОЕ) Управление исходным кодом
ReSharper - улучшение IDE, которое помогает с рефакторингом и производительностью
CodeRush - генерал Code макросы на стероидах
, Осуществляет рефакторинг - помощь для рефакторинга Кода
(СВОБОДНЫЙ) CodeMaid - очистка Кода, организация и анализ сложности
CodeSmith - Генератор кода
GhostDoc - (СВОБОДНЫЙ) Простой инструмент комментария кода
(СВОБОДНЫЙ) DXCore и его много потрясающих плагинов: Плагины Сообщества DxCore , CR_Documentor, CodeStyleEnforcer, RedGreen
TestDriven. Сеть - (ОСВОБОЖДАЕТ/ПЛАТИТ) Поблочное тестирование, помогают
Отражатель - (ПЛАТА) Многофункциональный.Net Дизассемблер Отражатель AddIn
, веб-Проекты Развертывания - Обеспечивают дополнительную функциональность, чтобы создать и развернуть веб-сайты и веб-приложения ( источник ).
StudioTools - (БЕСПЛАТНЫЙ) помощник Навигации, кодируйте метрический инструмент, возрастающий поиск, файловый менеджер в Visual Studio и оторвите окна редактора. Перемещенный от [1 119] старый сайт (archive.org) к [1 120] новый сайт и прекращенный.
шрифт Consolas Свободный шрифт от MS разработан для чтения кода.
+1 для Визуального Помогают, И я добавлю VLH (Визуальная Локальная История), который обеспечивает своего рода локальную систему управления исходным кодом. Каждый раз, когда Вы сохранили файл, плагин добавляют копию в локальном репозитории.
Я использовал Визуальный, Помогают X в течение почти двух лет теперь, и я нахожу его столь полезным, что я могу честно сказать, что, если бы мой работодатель не обеспечил его, я должен был бы заплатить за него сам.
я также использую Прохладные Команды и SlickEdit (бесплатная версия), чьи инструменты File Explorer и Command Spy довольно полезны.
http://trolltech.com/products/qt/"> спокойная Межплатформенная Среда разработки приложения
кварта является межплатформенной средой разработки приложения для настольной и встроенной разработки. Это включает интуитивный API и богатую библиотеку класса C++, интегрированные инструменты для разработки GUI и интернационализации, и поддержки Javaв „ў и разработки C++
, у Них есть плагин для Visual Studio, которая стоит небольшого количества денег, но это стоит каждого пенса.
Поддерживает Ваши данные буфера обмена посредством удаления строк, нескольких других хороших объектов, но что один один делает меня счастливым.
, В то время как у некоторых есть проблемы с регионами, я думаю, используете ли Вы их, этот инструмент для Вас. Автоматически region'izes Ваш код в соответствующие блоки региона. Полностью настраивающийся для пользовательских объектов и т.д.
Что относительно IncrediBuild? Это - хорошая распределенная система сборки с интеграцией Visual Studio.
LinqPad является большим для тестирования linq к objects/xml/sql. Бесплатная загрузка.
+1 Визуальный Помогают.
неудачно, что Вам нужен плагин для получения действительно хорошего intellisense, но за это определенно стоит заплатить.
Если Вы используете SVN для управления исходным кодом, определенно получаете VisualSVN. Это включает взаимодействия TortoiseSVN из IDE Visual Studio.
я также повторяю комментарий Resharper. Розничная цена немного крута, но если Вы - студент или иначе с точки зрения образования связанный, это на самом деле довольно дешево.
Я нахожу Ghost Doc быть очень полезным.
GhostDoc является свободным дополнением для Visual Studio, которая автоматически генерирует комментарии документации XML для C#. Или при помощи существующей документации, наследованной от базовых классов или при помощи реализованных интерфейсов, или путем выведения комментариев из имени и типа, например, методов, свойств или параметров.
Я - большой поклонник CodeRush и Осуществляю рефакторинг! Pro DevExpress. Я использовал их в течение многих лет, и без сомнения это делает меня более быстрым разработчиком. Кроме того, оба основаны на свободной платформе, названной DXCore, который позволяет Вам разрабатывать свои собственные плагины для Visual Studio, и небо является пределом там...
RockScroll является потрясающим, и свободным.
<час>Приложение
Как @Andrei указывает, , MetalScroll является лучшей альтернативой. Это - Открытый исходный код и исправляет некоторые раздражающие вещи о RS
PowerCommands является созданным Microsoft плагином, который предлагает множество новых возможностей, что можно было бы думать, вероятно, должен был быть в Visual Studio во-первых.
Они включают
Я нашел этот сайт названным галерея Visual Studio - это имеет много дополнений Visual Studio. Я просматриваю его прямо сейчас, и я рекомендую всем посетить его.
Звуковое Средство поиска Файла для того, когда у Вас есть загрузки файлов в Ваших решениях и поиске их в проводнике решения, становится болью в запястье.
Вы могли бы также найти DPack интересный. Несколько инструментов и улучшений одновременно аккуратный пакет.
Целый Помидор Визуальный Помогает X . Я абсолютно клянусь им. Я хотел бы видеть, что лучшее включает для Линт , чем Визуальный Линт Riverblade, но так как это в конечном счете перейдется на сервер сборки, я не возражаю выполнять его каждые несколько дней вручную.
Для связанного ноутбука или для тех с vi/vim привязками клавиш врезался в мозг, который я рекомендую ViEmu.
, Если Вы не попытались редактировать с vi привязками клавиш, вот то, почему можно хотеть попробовать ", Да ведь О, ДА ВЕДЬ сделайте те #?! nutheads используют vi?"
Я люблю CopySourceAsToHTML как прохладное небольшое дополнение. Замечательно, если Вы хотите скопировать блоки кода для блоггинга и т.п. при поддержании форматирования синтаксиса.
я думаю, что это - все еще URL.. необходимо сделать некоторый физический труд для установки его с 08. http://www.jtleigh.com/people/colin/software/CopySourceAsHtml/
Если Вы делаете кодирование C++, передает Визуальный, Помогают .
+1 для CodeRush & Осуществите рефакторинг Pro. Я использовал CodeRush начиная с его воплощений Дельфи, и это совершенно замечательно. Молитва "Кода на скорости мысли" очень близко к действительности;)
Я всегда поражаюсь, что больше людей не знает [приблизительно 110] NDepend - он показывает все зависимости на каждом уровне Вашего кода и даже потянет симпатичное поле и изображения стрелки, показывающие, насколько запутанный Ваша архитектура действительно:) Вместе с TestDriven. Сеть, я не могу предположить работать без него больше. Свободный/дешевый.
Не свободный, но ReSharper является определенно одной рекомендацией.
Документация AtomineerUtils Pro - автоматическое создание / обновление комментариев к документам DocXml / Doxygen / JavaDoc / Qt (аналогично GhostDoc, но более мощное и гибкое и поддерживает C #, C ++, C ++ / CLI, C, Java и код Visual Basic).
Стиль сгенерированных комментариев очень настраиваемый, и можно дополнительно применить автоматическое переформатирование (например, управление пробелами и перенос слов), чтобы комментарии оставались как можно более читаемыми. . Он также имеет множество помощников, позволяющих пользователям читать и преобразовывать большинство устаревших комментариев к документам в любой из вышеперечисленных форматов.
(Я автор, но считаю, что приведенное выше описание является точным и объективным. Эта надстройка был бесплатным, когда этот ответ был впервые добавлен, но для покрытия расходов на хостинг, поддержку и продолжение улучшения надстройки в ежемесячных выпусках,
Для разработки C# я использую:
В дополнение к ним, у меня также есть несколько графических разработчиков DSL для особенно трудных сценариев - например, у меня есть DSL для сложных многопоточных операций, которые реализованы с помощью Импульса & Ожидать.
Вот мой список: