Файлы, пакеты и импорты, модификаторы доступа

Файлы и пакеты

Код на Java пишется в файлах. Так как кода может быть очень много, файлы объединяются в пакеты, а пакеты представляются каталогами (папками). Это также позволякт классам с одинаковыми именами не конфликтовать (в Java есть два класса Date!).

Например, использование класса java.util.Date (который находится по адресу java/util/Date.java относительно места, где хранятся классы) может выглядеть так:

package online.javanese.basics.oop.packages;

public class NoImportExample {

    public static void main(String[] args) {
        System.out.println("сегодня " + new java.util.Date());
    }

}

Для избежания случаев, когда разные авторы придумывают одинаковые имена пакетов, имя пакета предваряется частями доменного имени личного или корпоративного сайта в обратном порядке (javanese.online -> online.javanese).

сайт javanese.online
Курс «Основы JVM-программирования»
Глава «Объектно-ориентированное программирование на Java»
Тема про пакеты

пакет online.javanese.basics.oop.packages
расположение online/javanese/basics/oop/packages

Импорты

Для того чтобы иметь возможность опустить имя пакета, используют импорты:

package online.javanese.basics.oop.packages;

import java.util.Date;

public class ImportExample {

    public static void main(String[] args) {
        System.out.println("сегодня " + new Date());
    }

}

Это даёт возможность использовать имя класса без имени пакета.

В любой Java-файл неявно импортирован пакет java.lang. В нём находятся, в частности, классы Object, String и многие другие.

Модификаторы доступа классов

Если класс публичный (ключевое слово public), он должен быть объявлен в одноимённом файле. Если у класса доступ в пределах пакета (package-private, без ключевого слова), он может быть объявлен в любом файле.

package online.javanese.basics.oop.packages;

// файл Nexus5.java

// класс доступен отовсюду
public class Nexus5 {

    private Gsm1900Module gsmModule = new Gsm1900Module();

    public void dial(String number) {
        gsmModule.dial(number);
    }

}

// класс доступен только в пределах
// пакета online.javanese.basics.oop.packages
class Gsm1900Module {

    void dial(String number) {
        // dial
    }

}
Комментарии к уроку

Сообщить об ошибке