Рекомендуемый add-ons/plugins для [закрытого] Microsoft Visual Studio

Что такое NullPointerException?

Хорошим местом для начала является JavaDocs . Они охватывают это:

Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра нулевого объекта.
  • Доступ или изменение поля нулевого объекта.
  • Выполнение длины null, как если бы это был массив.
  • Доступ или изменение слотов с нулевым значением, как если бы это был массив.
  • Бросать нуль, как если бы это было значение Throwable.

Приложения должны бросать экземпляры этого класса для указания других незаконных видов использования нулевого объекта.

blockquote>

Также, если вы попытаетесь использовать нулевую ссылку с synchronized, который также выдаст это исключение, за JLS :

SynchronizedStatement:
    synchronized ( Expression ) Block
  • В противном случае, если значение выражения равно null, NullPointerException.
blockquote>

Как это исправить?

Итак, у вас есть 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 = "";

Либо метод print, либо 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 ).

207
задан 10 revs, 9 users 50% 8 August 2012 в 16:29
поделиться

74 ответа

Я знаю, что это не дополнение VS, но , SSMS один так или иначе мог быть полезен для любого работающего с MSSQL.

Только для случая Вы хотите видеть больше как эта проверка это сообщение . На самом деле от ssmstoolspack создателя.

0
ответ дан hugosanguino 23 November 2019 в 04:42
поделиться

TracExplorer прохладен для интеграции Trac с VS.

0
ответ дан Mladen Mihajlovic 23 November 2019 в 04:42
поделиться

Это не Visual Studio, включают, но это - инструмент, что я не мог использовать Visual Studio без него...

ClipX - это - работы с нормальным буфером обмена, но сохраняет записи в доступный для поиска список, можно использовать копию и вставить как ususal, но можно поразить CTRL+SHIFT+V, и список открывается. Это работает с изображениями, текстом, и т.д. Это даже сохраняется после перезагрузки компьютера.

0
ответ дан Hugoware 23 November 2019 в 04:42
поделиться

Программа проверки правописания для комментариев является удачей. GhostDoc является большим для того, чтобы сделать хорошо зарегистрированные API.

0
ответ дан Rick Minerich 23 November 2019 в 04:42
поделиться
0
ответ дан 2 revs 23 November 2019 в 04:42
поделиться
0
ответ дан 2 revs 23 November 2019 в 04:42
поделиться

дополнение PInvoke.NET Меню для поиска предзаписанного кода P/Invoke. Намного легче, чем разработка маршалинга кодируют себя, особенно когда существуют противные объединения и требования выравнивания.

0
ответ дан 2 revs 23 November 2019 в 04:42
поделиться

Командный процессор VS Командный процессор в Области вывода. Совсем не прекрасный, но часто очень, очень полезный. Быстрее и легче добраться до, чем отдельный cmd и имеет легче, скопировать/вставить поддерживают.

0
ответ дан Seth Morris 23 November 2019 в 04:42
поделиться

При поиске лучшего редактора кода энергия идет с VisVim, плагином для замены редактора кода VS энергией.

0
ответ дан baudtack 23 November 2019 в 04:42
поделиться

Средство обеспечения выполнения Стиля кода Позволяет Вам определить стиль кода.NET (с определенной степенью гибкости) и подчеркивает нарушения. Имеет опции контекстного меню изменить код для соответствия стилю. Требует DXCore, который связан от страницы Code Style Enforcer. Оба свободны.

0
ответ дан Seth Morris 23 November 2019 в 04:42
поделиться

XPathmania является хорошим небольшим инструментом для записи и тестирования запросов XPath.

0
ответ дан David 23 November 2019 в 04:42
поделиться
0
ответ дан 2 revs 23 November 2019 в 04:42
поделиться

В конкретном примере, который вы разместили, не будет никаких преимуществ перед использованием обычного конструктора. Однако есть два общих шаблона, которые используют подобный метод для создания объекта:

Одноэлементный шаблон

Одноэлементный шаблон можно использовать, когда вы хотите предотвратить множественные экземпляры объекта. создаются, но по-прежнему хотят использовать объектно-ориентированные аспекты класса (например, поля, свойства, методы без параметров). Пример:

public class MySingletonClass
{
    private MySingletonClass currentInstance = null;

    public MySingletonClass CreateInstance()
    {
         if (currentInstance == null)
         {
              currentInstance = new MySingletonClass();
         }
         else
         {
              return currentInstance;
         }
    }
}

Factory Pattern

Factory Pattern - прекрасная возможность абстрагироваться от создания конкретных классов; например, предположим на мгновение, что у вас есть некоторый XML, и в зависимости от того, какой узел (NodeA, NodeB или NodeC) вы видите в XML, у вас есть другой класс, который будет его обрабатывать. Пример:

0
ответ дан 23 November 2019 в 04:42
поделиться

Quick Open File - это плагин, без которого я не могу жить, поскольку я использую фон Eclipse

http://kutny.net/vsopen /

Больше не нужно копаться в проводнике решений, пытаясь найти файлы

0
ответ дан 23 November 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: