Механизмы module-based доступа в Java 9 работают следующим образом: компилятор и виртуальная машина считают публичные типы в пакете одного модуля доступными для кода в другом модуле только тогда, когда первый модуль читается вторым и первый модуль экспортирует этот пакет. 5
По умолчанию модуль не может получить доступ к пакетам или классам другого модуля, если они не экспортированы модулем-владельцем или модуль не требует их. 1 Однако отражение возможно без объявления всех классов или пакетов, экспортируемых в другие модули. 1 Для этого разработчики могут использовать директивы «open», «opens» или «opens to». 1
Также в Java 9 есть возможность использовать ручки переменных (variable handles), которые предоставляют доступ на чтение и запись к переменным в разных режимах доступа. 2