В чём разница между «import java.util.*» и «import java.util.Scanner»

280
24 апреля 2017, 02:14

Вместо Scanner может быть что угодно - суть ясна. А именно: зачем использовать второй вариант, если первый и набирать короче, и пригодится когда понадобится что-то ещё из java.util? Изучаю Java, и во многих примерах из книг и статьях в интернете используется второй вариант импорта, но нигде не видел объяснения почему именно так. Наверное, у него есть какие-то преимущества перед первым?

Answer 1

Потому что в Java импорты нужны для разделения классов. Понятнее будет на примере. Допустим есть класс com.blabla.Scanner и вы написали import com.blabla.*;. А потом вам захотелось добавить импорт от java.util.Scanner и вы опять написали import java.util.*;. В этом случае, если вы в коде напишете Scanner, компилятор не поймет какой именно Scanner вам нужен. Полная запись импорта это не допустит

Answer 2

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

Выделить оттуда можно такие моменты.

За импорт всего пакета:

  • Не приходится писать огромное количество импортов, а читающему - их пролистывать
  • В плане производительность разницы нет
  • Конфликты имён встречаются не часто и довольно просто разрешаются
  • "Так советуют делать в книгах". В качества примера приводится отрывок из книги "Clean Code" Robert C. Martin. За достоверность отрывка не ручаюсь.

За перечисление конкретных классов:

  • Не происходят конфликты имён при импорте класса только из одного пакета. Причём речь идёт не только про первоначальную разработку кода, но и про переход на более новую версию Java. Коронным примером является переход с JDK 1.1 на 1.2 и import java.util.*; с import java.awt.*; при использовании List.
  • Возможность понять к какому пакету относится класса при чтении кода без IDE
  • Если в классе много импортов, то, вероятно, этот класс делает больше, чем должен
  • В современных IDE можно скрыть блок импортов, чтобы не приходилось их пролистывать

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

Answer 3

java.util.* - импортируешь все, что есть в библиотеке import java.util.Scanner - импортируешь конкретно Scanner

READ ALSO
Макет портфолио [требует правки]

Макет портфолио [требует правки]

Подскажите пожалуйста где можно найти бесплатные psd макеты для сайта портфолио (верстальщик)?

281
Можно ли сделать прозрачный для нажатий фон?

Можно ли сделать прозрачный для нажатий фон?

Пытаюсь сделать игру, когда надо находить блоки, а поверх фон потихоньку все темнел и темнелСледовательно нужно, чтобы верхний слой был прозрачным...

305
Как реализовать вывод блока div на конкретной странице

Как реализовать вывод блока div на конкретной странице

многоязычный сайт где три главные страницы и на каждой нужно вывести сообщение на её языкеКак это можно реализовать?

398
Print-page. Неккоректное отображение текста в Chrome

Print-page. Неккоректное отображение текста в Chrome

Привет всем! Нужна помощь! На pic1 видно, что текст в Print Preview отображается некорректно

374