почему java.io.PrintStream не нужен в System.out.println ()? - PullRequest
0 голосов
/ 23 мая 2018

Поэтому я спрашиваю себя, почему мне не нужно импортировать java.io.PrintStream, чтобы использовать System.out.Я знаю, что java.lang по умолчанию импортируется компилятором.Отлично.

Поскольку System является классом java.lang, я могу использовать поле System.out.Но это поле имеет тип java.io.PrintStream, и этот класс не импортируется по умолчанию (он находится в пакете java.io), так почему я могу получить доступ к System.out.print(), например, без импорта java.io.PrintStream отдельно?

Если я создаю свой собственный класс MyClass, я не могу сделать что-то подобное MyClass anInstance = new MyClass(); MyClass нужно сначала импортировать.Почему это не обязательно для PrintStream?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

X.java

package p;
import q.Y;
public class X { Y y; }

Z.java

import p.X;

... X x = ...;
... x.y ...;

Для появления X компилятору требуется импорт X.

Для x.y компилятор может найти в данных класса X класс Y для наличия методов Y и подобных.

0 голосов
/ 23 мая 2018

Вам нужно будет импортировать PrintStream, только если вам нужно использовать PrintStream (имя класса) в вашем коде.Использование поля в другом объекте типа PrintStream не требует этого.

То есть import означает компилятор, что означает PrintStream (буквальный текст) в вашем коде.Нельзя сказать компилятору, что вы будете использовать PrintStream объект, который вы получите откуда-то еще (в данном случае System).

Другими словами: import - это знание того, какскомпилировать исходный текст;это не о том, что используется во время выполнения.Например, импорт не записывается в файлы классов;информация просто не нужна во время выполнения.Определения полей и переменных хранятся с их полностью определенными именами классов, а не import -относительными.Поскольку информация о типе out в System говорит о том, что это java.io.PrintStream, компилятор (а позже и JVM) знает, что это java.io.PrintStream, независимо от того, импортируете ли вы PrintStream в своем коде или нет.

...