[Закрываются] любимые сочетания клавиш 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 ).

336
задан 5 revs, 5 users 60% 8 December 2013 в 19:31
поделиться

110 ответов

Ctrl +   E  +   D  : Подсказка по Документу

Формата для команд : Настроенный договорился о параметрах форматирования в Visual Studio (они очень гибки), затем экспортируйте настройки в .settings файл для каждого разработчика для импорта.

Теперь, если все разработчики учатся автоформатировать все, это не только произведет идеальная непротиворечивость форматирования в течение проекта без усилия во всем , но также и значительно уменьшит раздражающие ложные различия в различном инструменте при слиянии нескольких регистраций с Управлением исходным кодом.

, О, я наслаждаюсь хорошими инструментами!

1
ответ дан Tor Haugen 23 November 2019 в 00:39
поделиться

Я просто узнал, что Сдвиг + F11 ступает из текущей функции.

Это очень полезно, когда Вы хотите к нечто функции отладки в нечто (панель (baz ()). Используйте F11 , Сдвиг + F11 для вскакивания и из панели и baz.

1
ответ дан 2 revs, 2 users 50%Ruben 23 November 2019 в 00:39
поделиться

Высокий звук + Сдвиг + Клавиши со стрелками ( ), или перемещение мыши = выбор Блока/Столбец

происходит действительно удобный

1
ответ дан 2 revs, 2 users 80% 23 November 2019 в 00:39
поделиться

Ctrl + M , Ctrl + O : выйдите из строя к определениям. Я использую все это время вместе с #regions

(несмотря на , что Jeff говорит ) получить обзор кода моего экрана.

1
ответ дан 2 revs, 2 users 86% 23 November 2019 в 00:39
поделиться

Ctrl + Сдвиг + R -> Осуществляют рефакторинг с Resharper

1
ответ дан 2 revs, 2 users 67% 23 November 2019 в 00:39
поделиться

Ctrl + Сдвиг + 8 - Отслеживание в обратном порядке переходит к предыдущему" F12 / Переходят к определению"

1
ответ дан 2 revs, 2 users 67% 23 November 2019 в 00:39
поделиться

Если Вы устанавливаете Визуальный, Помогают X , который я настоятельно рекомендую, чтобы Вы сделали, они полезны:

  • Высокий звук + O : Переключите текущий документ между заголовком/реализацией (.h/.cpp)

  • Высокий звук + G : Перейдите к определению/объявлению

1
ответ дан 2 revs, 2 users 86% 23 November 2019 в 00:39
поделиться

F7 для создания и затем F8 для движения в ошибки и предупреждения один за другим.

1
ответ дан 2 revs, 2 users 67% 23 November 2019 в 00:39
поделиться

Высокий звук + F4 ;)

, Но на более серьезной ноте, Ctrl + Пространство , вероятно, поражен много от меня в моем ограниченном использовании VS.

1
ответ дан ocharles 23 November 2019 в 00:39
поделиться

F7 переключается от режима конструктора для кодирования представления.

1
ответ дан 2 revs, 2 users 67% 23 November 2019 в 00:39
поделиться

Найдите и замените

  • Ctrl + F и Ctrl + H - Находят, Находят & замена, соответственно

  • Ctrl + сдвиг + F и Ctrl + сдвиг + H - Находят в файлах, Находят & замена в файлах, соответственно

"Находят в файлах", был огромный усилитель производительности для меня. Вместо того, чтобы переходить к каждому результату один за другим, это просто показывает Вам список результатов в Вашем всем проекте или решении. Это делает очень простым найти пример кода или видеть, используется ли функция где-нибудь.

1
ответ дан 2 revs, 2 users 78% 23 November 2019 в 00:39
поделиться

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

1
ответ дан Jeff 23 November 2019 в 00:39
поделиться

Ctrl + BP (Предыдущая закладка), Ctrl + BN (Следующая закладка)

2
ответ дан 23 November 2019 в 00:39
поделиться

Вставить фрагмент:

Ctrl + K , Ctrl + S

Я часто использую if для try..catch и #region

1
ответ дан 23 November 2019 в 00:39
поделиться

Я большой поклонник Ctrl + D + Q для открытия Quickwatch во время отладки.

1
ответ дан 23 November 2019 в 00:39
поделиться

Control + Apostrophe.

Ой, подождите, это было после того, как я переназначил его с этого дурацкого Alt + Shift + F10 или чего-то еще.

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

1
ответ дан 23 November 2019 в 00:39
поделиться

Ctrl + Shift + V несколько раз переключает кольцо буфера обмена.

1
ответ дан 23 November 2019 в 00:39
поделиться

Ctrl + W for selecting the current word

2
ответ дан 23 November 2019 в 00:39
поделиться

Это просто, но

Ctrl + L

удаляет всю строку. Отлично подходит для быстрого редактирования кода.

1
ответ дан 23 November 2019 в 00:39
поделиться

Комбинация Ctrl + U и Ctrl + Shift + U ] для преобразования блока символов в верхний / нижний регистр.

2
ответ дан 23 November 2019 в 00:39
поделиться

Ctrl + K + C - установить текущий выбранный код в качестве комментариев {{1} } Ctrl + K + U - установить текущий выбранный комментарий как код

2
ответ дан 23 November 2019 в 00:39
поделиться

Я отобразил все команды расширения/свертывания так, чтобы их можно было использовать левой и только правой рукой, чтобы моя правая рука оставалась на мыши.
Ctrl + E, Ctrl + E переключает расширение, Ctrl + E, Ctrl + D сворачивает все к определениям, Ctrl + E, Ctrl + A переключает все выделения.

1
ответ дан 23 November 2019 в 00:39
поделиться

Обрисовывание в общих чертах

  • ctrl + M , ctrl + M - Выходит из строя/расширяет элемент тока

  • ctrl + M , ctrl + O - Коллапс все (дает Вам хороший обзор сложного класса, например)

  • ctrl + M , ctrl + O - Переключатель весь

, Это работает оба в коде VB/C# (например, выйдите из строя/расширьте функцию), и на aspx странице (например, выходят из строя/расширяют определение GridView).

Одно очень хорошее использование этого должно сократить или скопировать большой блок разметки или кода: Например, для перемещения большого, обширного <table> или <asp:gridview> определение:

  1. Переходят к первой строке

  2. ctrl + M , ctrl + M для сворачивания его

  3. ctrl + X для вырезания его (Вы не должны выбирать его, пока Ваша точка вставки находится все еще в той строке)

  4. Перемещение туда, где Вы хотите, чтобы он и ctrl + V вставил.
0
ответ дан 2 revs, 2 users 81% 23 November 2019 в 00:39
поделиться

Ctrl + Сдвиг + F4 для закрытия всех окон. Необходимо отобразить его сами:

Инструкции:

  • В Visual Studio, перейдите к Инструменту |, Опции
  • Под Средой выбирают Клавиатуру
  • На Шоу, управляет содержащий, введите Окно. CloseAllDocuments. Необходимо получить однократный въезд в поле списка ниже его
  • Помещенный курсор в сочетания клавиш Нажатия и нажатие Ctrl + Сдвиг + F4 .
  • Нажимают "OK"

Кредит к Kyle Baley по codebetter.com . Я изменил его пример для использования сдвига вместо высокого звука, потому что это было легче на моих руках.

0
ответ дан 2 revs, 2 users 94% 23 November 2019 в 00:39
поделиться

Я имею два, что я использую много, первое является стандартным, вторым, необходимо отобразиться:

Ctrl + , Ctrl + E , F (Выбор Все, Выбор Формата)

Ctrl + E , R (Удаляют Неиспользованные Использования и Вид)

И справка платят наличными за "долг хлама" рано и часто

0
ответ дан 2 revs, 2 users 86% 23 November 2019 в 00:39
поделиться

Ctrl + Сдвиг + S //Сохраняют

Ctrl + Сдвиг + B //Сборка

0
ответ дан 2 revs, 2 users 67% 23 November 2019 в 00:39
поделиться

Hmmm, никто не сказал F1 для справки.

Мог он быть, что Google быстрее и лучше для достигания информации, в которой Вы нуждаетесь.

0
ответ дан 2 revs, 2 users 50% 23 November 2019 в 00:39
поделиться

Простой. F8 : Пойдите для следующего создания ошибки.

Найденный, что теперь это будет работать в любом виде окна списка (те, что кластер вместе в нижней части обычно.

0
ответ дан 2 revs, 2 users 80% 23 November 2019 в 00:39
поделиться

Что сказанный Ray. Ctrl + . .

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

я думаю Ctrl + . для открытия умного меню тега сохраняет меня приблизительно пять минут каждый день и значительно уменьшает мое кровяное давление.

0
ответ дан 4 revs, 3 users 78% 23 November 2019 в 00:39
поделиться

Ctrl + X

Это сокращает (к буферу обмена) текущую строку кода.

0
ответ дан 3 revs, 3 users 67% 23 November 2019 в 00:39
поделиться
Другие вопросы по тегам:

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