Файлы и пакеты
Код на 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 Курс «Основы Java-программирования» Глава «Объектно-ориентированное программирование на 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, как если бы в импортах была строка import java.lang.*;. В этом пакете находятся, в частности, классы Object, String и многие другие.
Модификаторы доступа классов
Если класс публичный (ключевое слово public), он должен быть объявлен в одноимённом файле. Как, например, java.util.Date объявлен в файле Date.java.
Если модификатор доступа не указан, то класс доступен в пределах пакета (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
}
}