Имя пакета отображает структуру каталога, в котором хранятся файлы *.class
D:\ work\ access\mypackage\MyClass.class
То есть путь к файлу ”кодируется” в имени пакета. Все файлы пакета хранятся в отдельном каталоге (папке). Каждый класс пакета должен иметь одинаковое начало:
package access.mypackage;
и хранится файл *.class в директории \access\mypackage\
Для уникальности первая часть имени доменное имя, записанное наоборот (или e-mail)
ru.mail.my.util
а первая часть пути - указывается в переменной окружения CLASSPATH
set CLASSPATH = D: \work;
Имена пакетов записываются с маленькой буквы
Если классы в нескольких местах, то нужно пути к пакетам разделять точкой с запятой
set CLASSPATH =.; D: \work\; D: \work\myutil.jar
Стандартные пакеты - в jdk\jre\lib\rt.jar (rt-это RunTime)
пакет java.lаng – подключен по умолчанию автоматически.
Если нужен файл x.class (в точке, где создается объект этого класса или при первом обращении к статическим членам класса) интерпретатор ищет каталог с файлом x.class:
- поиск в стандартных местах jdk\jre\lib
jdk\jre\ext
- берется CLASSPATH.
- берется имя пакета, точки заменяются на слэши.
|
|
- соединяются все элементы CLASSPATH и имена пакетов и там ищется x.class.
сли класс не найден-то выводится сообщение.
Вывод: Имя пакета –это его каталог.
Спецификаторы доступа Java
Доступ в пределах пакета(дружественный).
По умолчанию член класса доступен для всех классов текущего пакета. Без спецификатора. Вне пакета – он private.
Чтобы получить доступ к членам класса из другого пакета можно:
1) Объявить член класса public
2) Сделать пакетный доступ и разместить класс в том же пакете
3) Производные классы имеют доступ к protected членам (и к public тоже)
4) Написать методы для доступа get и set и сделать их public.
Пример: access\dessert\Cookie.java
package access.dessert;
public class Cookie {
public Cookie (){}
void bite (){}
}
/access/Dinner.java
import access.dessert.*;
public class Dinner {
public static void main (string[] args){
Cookie x = new Cookie ();
//x.bite(); - это ошибка!
}
}
Пакет по умолчанию: если классы в одном каталоге и не имеют пакета, то они входят в пакет по умолчанию для текущего каталога и обладают пакетным доступом друг другу. CLASSPATH должен содержать .( точку).