Что такое пакет по умолчанию, в который помещаются мои классы, если я не укажу его? - PullRequest
19 голосов
/ 25 февраля 2010

Предположим, у меня есть файл с именем Main.java со следующим кодом:

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}

Он помещен в конкретный пакет, в (может быть?) Безымянный пакет?

Спасибо

Ответы [ 3 ]

25 голосов
/ 25 февраля 2010

Класс, которого нет в именованном пакете, находится в неназванном пакете . Таким образом, полное имя класса Main.

Такие классы нельзя использовать из именованного пакета, кроме как с помощью отражения.

JLS говорит, что:

Безымянные пакеты предоставляются платформой Java SE главным образом для удобства при разработке небольших или временных приложений или только в начале разработки.

6 голосов
/ 25 февраля 2010

В Java нет пространств имен, есть пакеты. И да, классы без объявлений пакета неявно являются частью " неназванного пакета ", часто также называемого "пакетом по умолчанию". Однако, поскольку невозможно импортировать классы из неназванного пакета и поскольку спецификация языка явно позволяет реализациям иметь разные правила относительно того, являются ли и как классы в неназванных пакетах видимыми друг для друга, обычно рекомендуется помещать все классы в именованные пакеты, кроме экспериментального кода.

4 голосов
/ 25 февраля 2010

Согласно JLS это называется:

7.4.2 Безымянные пакеты

Модуль компиляции, у которого нет объявления пакета, является частью безымянного пакета.

...