Лаконичность и правильность кода в Java. В какой момент стоит объявлять переменные в коде?
Ни так, ни так. Сканер создаёте в начале 1 раз. А переменные лучше объявлять ближе к месту использования и сразу же присваивать им значения используя 1 и тот же сканер.
Как написали ранее, сканером стоит пользоваться одним, и его стоит закрыватьpublic static void main(String[] args) {
    try(Requester requester = new Requester()) {
      String name = requester.requestLine("Введите ваше имя");
      String surName = requester.requestLine("Введите вашу фамилию");
      System.out.println(String.format("Здравствуйте, %s %s!", name, surName));

      String dish = requester.requestLine("Ваше любимое блюдо?");
      System.out.println(String.format("О, %s! Мне это тоже нравится!", dish));
    }
  }

  private static class Requester implements AutoCloseable {
    private final Scanner scanner;

    private Requester() {
      this.scanner = new Scanner(System.in);
    }

    private String requestLine(String requestMessage) {
      System.out.println(requestMessage);
      return scanner.nextLine();
    }

    @Override
    public void close() {
      scanner.close();
    }
  }