Подтвердить что ты не робот

Что означает "частный пакет"?

См. образец:

private package com.xm.aws;

import static com.xml.aws.PcgTest.test;

public class PackageTest {
    public static void main(String[] args) {
        test(args);
    }
}

Что сообщает private о пакете?

4b9b3361

Ответ 1

Не путайте это с модификаторами доступа к частному или другому доступу, которые могут быть добавлены к классам, методам и полям.

Спецификация языка Java четко заявляет:

6.6.1. Определение доступности

  • Пакет всегда доступен.

Глядя на это, единственный ответ, который приходит мне на ум, заключается в том, что (некоторые) компиляторы не рассматривают это как ошибку compiletime, но что это совершенно бессмысленно. Невозможно ограничить доступ к классу или пакету таким образом (и каждый пакет всегда доступен).

Другой раздел из java language spec:

7.4.1. Именованные пакеты

Объявление пакета в модуле компиляции указывает имя (§6.2) пакета, к которому принадлежит блок компиляции.

PackageDeclaration:

Аннотации opt package PackageName;

Таким образом, ключевое слово может предшествовать аннотации. Но модификаторы доступа не являются частью объявления пакета. И даже если мы расширяем "Аннотации" , здесь мы не найдем модификаторы доступа.

Еще одна ссылка, согласно JLS 18. Синтаксис единственное, что разрешено предшествовать package, - это Annotation.

CompilationUnit:
    [[Аннотации] пакет QualifiedIdentifier;]
                                {ImportDeclaration} {TypeDeclaration}

Ответ 2

Выбранный образец кода недействителен в java. Модификатор доступа private может применяться к членам и методам, включая внутренние классы. Ваш код компилируется в Eclipse, но его отклоняет собственный компилятор Oracle.

Фактически, байт-код, созданный Eclipse для этого java-кода, точно такой же с или без этого ключевого слова private. Это показывает, что это, вероятно, ошибка Eclipse, где он игнорирует текст перед словом package во время компиляции.

То, что вы, вероятно, читали или слышали, это фраза "package-private", что означает, что ничего за пределами пакета не может получить доступ к классу или члену. Вы делаете это, не используя модификатор доступа в самом классе. Не используя ключевое слово private в пакете.

Ответ 3

Хотя пакет не является наивысшей степенью инкапсуляции в Java, которая достигается с помощью частного ключевого слова, она по-прежнему занимает второе место и должна инкапсулировать весь а не просто классом.

Короче говоря, модификаторы доступа не входят в объявления пакетов

Отправьте ссылку

Ответ 4

Если вы добавите private перед именем пакета, это будет ошибка компилятора

Ответ 5

Мне кажется, что это происходит только в затмении. Когда я компилирую код, хотя команда javac через командную строку, я получаю эту ошибку времени компиляции:

ошибка: ожидается класс, интерфейс или enum

Глядя на сообщение здесь, похоже, что eclipse использует свой собственный jdk:

Нужно ли мне установить java sdk, если у меня есть eclipse

Ответ 6

Написание "частного пакета" и "пакета" одинаково. Они идентифицируют один и тот же уровень доступа (dafault one).

Частный модификатор указывает, что член может быть доступен только в пределах своего собственного пакета (как и для защищенного).