Каждый раз, когда мы пишем любой оператор для печати к консоли в программе Java:
System.out.print
или System.out.println
В вышеупомянутом оба оператора мы вызываем ссылочную переменную объекта PrintStream, явно не импортируя java.io пакет, поэтому как мы получаем доступ к этому методы объекта, не заканчиваясь никакая ошибка времени компиляции?
Системный объект имеет ссылки на java.io.printstream
объекты, встроенные в него. Таким образом, вам не нужно явно импортировать это - время выполнения может получить эту информацию однозначно, так как она была встроена в совокупность.
Как вы определили, если вы напрямую использовали Printstream
объект напрямую, вам придется импортировать это. Этап компиляции не знает, где его найти (это поиск, но это может легко дать неоднозначные результаты).
Примечание также (в случае, если есть какая-то путаница), Java.lang
неявно импортируется, поэтому вам не требуется оператор импорта для системы
.
Вам нужно только импортировать имена классов для тех, которые вы хотите объявить. Так, например:
PrintStream out = System.out;
не будет компилировать, если вы не импортируете java.io.printStream
, но вы можете использовать методы от System.out, поскольку он «неявно» импортируется в этот момент Компилятор точно знает, какой тип System.out
. На некоторых языках, например, Scala , вам не нужно было бы объявить тип переменной, поскольку он может быть разработан через тип вывода .
Импорт - это синтаксический сахар, который позволяет Вам не печатать, например, java.io.File file = new java.io.File("foo.txt")
каждый раз, но позволяет набирать File file = new File("foo.txt")
.
Ничего больше.
Итак, если вам не нужно создавать новый объект или присваивать объект переменной, и вы хотите избежать полного вычеркивания имени класса, вам не нужно делать никаких импортов.
(в приведенном выше рассмотрении интерфейсы рассматриваются как класс под крышкой)
.