Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Import в Java: полные имена, пакеты и static import

💻 Информатика · 9 класс

Почему import не скачивает библиотеку и почему java.util.* не включает вложенные пакеты.

Клавиатура в компьютерном классе
Иллюстрация к предмету «Информатика»Hmartil · Wikimedia Commons · CC BY-SA 4.0

Для чего нужен import

Import позволяет обращаться к доступному типу по короткому имени вместо полного. Например, после import java.util.ArrayList; можно писать ArrayList, не повторяя java.util. Это удобство разрешения имён в исходном коде, а не команда скачать библиотеку из интернета.

Тип всё равно должен быть доступен компилятору и программе через её конфигурацию: JDK, зависимости, classpath или модули. Один import не устанавливает отсутствующий пакет и не делает закрытый класс публичным.

Полный пример

import java.util.ArrayList;

public class ImportDemo {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("Mira");
        System.out.println(names.get(0));
    }
}

Файл ImportDemo.java при корректной сборке выводит Mira. Без import можно написать полное имя java.util.ArrayList в объявлении и создании. Наличие строки import не меняет способ хранения списка или результат get.

Где располагаются объявления

Если файл содержит package, оно идёт раньше import. Затем следуют объявления типов. Не помещайте import внутрь метода или тела класса как обычную исполняемую команду.

Типы из java.lang и собственного пакета доступны по кратким именам без явного обычного импорта. Поэтому String и System в примере не требуют двух дополнительных строк. Это не означает, что каждый пакет с началом java доступен автоматически.

Звёздочка и вложенные пакеты

import java.util.*; позволяет использовать доступные типы непосредственно из java.util. Но java.util.concurrent — отдельный пакет. Звёздочка не означает рекурсивное включение всех названий с таким префиксом.

Если два импортированных пакета содержат тип с одинаковым простым именем, появляется неоднозначность. Например, Date встречается в java.util и java.sql. Явный выбор полного имени показывает, какой тип нужен, и делает смысл понятнее читателю.

Static import

import static java.lang.Math.max;

После такого объявления в соответствующем файле можно писать max(3, 8) вместо Math.max(3,8). Static import относится к доступным статическим членам, а не к созданию объекта Math. Он полезен умеренно: слишком много неявных коротких имён затрудняет поиск их происхождения.

Разобранная ошибка

Компилятор сообщает, что стороннего пакета нет. Добавление ещё одной строки import не решит отсутствие зависимости. Нужно проверить корректность имени, наличие библиотеки и настройки сборки. Если же библиотека есть, но короткое имя неоднозначно, помогает полное квалифицированное имя.

Практика

  1. Скачивает ли import библиотеку?
  2. Покрывает ли java.util.* пакет java.util.concurrent?
  3. Нужен ли обычный import для String?

Ответы

1. Нет: доступность зависимости обеспечивается отдельно. 2. Нет: подпакеты не импортируются рекурсивно. 3. Обычно нет: String находится в java.lang. Различайте три вопроса: где тип определён, доступен ли он программе и каким именем к нему обращаются.

Связанные материалы

Источники и материалы