3.8 Пакет

3.8 Пакет


Возможность многократного использования кода - одно из самых важных требований в программировании. Это позволяет экономит время, усилие и также гарантирует последовательность. Например, класс, однажды определенный и затем неоднократно используемый будет гарантировать, что все приложения, используя специфический класс будут иметь идентичное поведение.

Главное требование для возможности многократного использования - это способность программы легко включать код многократного использования в данное приложение. В Java мы используем «Пакеты» для повторного использования уже существующего кода.

В Java, весь код многократного использования помещён в пакеты. Пакет - совокупность классов, интерфейсов и/или других пакетов.

Пакеты - по существу средство организации классов вместе как группы.

Короче говоря, пакеты полезны для следующих целей:
Пакеты позволяют нам организовывать наши классы в меньшие модули и облегчить определение местонахождения и использовать соответствующий файл класса.
Пакеты помогают избегать различные конфликты. Когда мы работаем с множеством классов, становится труднее выбирать имена классов и методов. Иногда мы хотим использовать название, которое уже принадлежит другому классу. Пакет в основном скрывает классы и таким образом избегается конфликт с именами.
Пакеты позволяют нам защищать наши классы, данные и методы большим количеством способов, чем на основании иерархии от класса к классу.
Название пакета может использоваться для идентификации наших классов.

Пакеты не должны быть только совокупностью классов и интерфейсов. Они могут также содержать другие пакеты, каждый уровень, представляющий меньшую, более определенную группировку классов.

3.8.1 Создание пакета

Мы должны сначала объявить имя пакета, используя ключевое слово package, сопровождаемое именем пакета; это должно быть первой записью в исходном файле Java. Тогда мы определяем класс, который должен быть включен в класс.

Пример, данный ниже, показывает, как создать пакет.
Пример 15:
package mypackage;
public class Calculate
{
public double volume(double height,double width,double depth) {
return (height*width*depth);
    }
public int add(int x, int у )
    {
return (x+y);
    }
public int divide(int x, int y)
    {
return (x / y);
    }
}


Здесь название пакета - mypackage. Класс Calculate - теперь часть этого пакета. Этот листинг должен быть сохранен как файл calculate.java и помещен в каталог, названный "mypackage". Когда файл Calculate.java выполнен, файл Calculate.class будет сохранен в каталоге mypackage.

Обратите внимание: Помните, что файлы".class" должны быть расположены в каталоге, который имеет то же самое название что и пакет, и этим каталогом должен быть подкаталог каталога, где находятся классы, которые импортируют пакет.

Все члены пакета были бы определены как public, если к ним нужно было бы обратиться снаружи.
Использование этого пакета:
Когда импортируют класс, который используется
Когда импортируют полный пакет

При создании пакетов, мы можем или сохранить файл класса непосредственно в каталог, названный также как и пакет, или мы можем даже написать код, как показано ниже. Это может компилироваться c-d опцией, посредством чего создается папка с именем пакета и автоматически в эту папку размещается файл ".class".
javac d   c: JavaProgs Calculate.java

Вышеупомянутая команда гарантирует, что компилятор создает папку, названную mypackage в каталоге JavaProgs и сохранит Calculate.class в эту папку.

Следующий пример показывает, как использовать пакет
Пример 16:
import java.io.*;
import mypackage.Calculate;

class PackageDemo
{
public static void main(String args[])
    {
Calculate calc=new Calculate( ) ;
int sum = calc.add(10,20);
double vol = calc.volume(10.3f,13.2f,32.32f);
int div = calc.divide(2 0,4);
System.out.println( The addition is :   + sum);
System.out.println( The Volume is :   + vol);
System.out.println( The division is :   + div);
    }
}


Если мы используем класс из различных пакетов, не используя запись импорта на этот пакет, то мы должны использовать название класса с именем пакета.
mypackage.Calculate calc=new mypackage.Calculate( );

Обращение к членам пакета Java
Рассмотрите класс 'My Class', который будет определен в пакете 'My_Package'. Чтобы обращаться к этому классу, мы используем примечание:
My_Package.My_Class

Таким образом, к членам пакета обращаются, используя "точечное примечание". То же самое также сохраняется для членов подпакетов. Например, мы имеем класс MyClass в каталоге или упаковываем My_Sub_Package, который находится в пакете MyJPackage. Чтобы обратиться к классу My_Class, мы используем следующую запись:
My_Package.My_Sub_Package.My_Class
Здесь My_sub_Package подпакет MyPackage.

3.8.2 Включение пакета

Чтобы правильно использовать члены пакета, мы должны явно включить пакет в программу Java. Это делается с помощью инструкции "import" как показано ниже:
import package_name.*;

Символ '*' используется, чтобы импортировать все классы текущего пакета (здесь раскаде_nате). Вышеупомянутая запись включает все классы / интерфейсы, которые найдены в пакете. Чтобы включать определенный класс / интерфейс, найденный в пакете использует примечание:
import package_name.class_name;

Запись выше импортирует только указанный член класса, а не все члены класса.

Таким образом, мы можем включить все или только некоторые из членов в пакете.

Включённые подпакеты
Запись,
import package_name.*;
включает все классы / интерфейсы, найденные в указанном пакете, но не любые подпакеты или их члены.

Рассмотрите следующую иерархию:
Рисунок 3.19: Package Hierarchy

Следующий фрагмент кода:
import Main_Package.*; (Refer to Figure 3.19)
будет включать все классы Main_Package:
Class_l
Class_2
Class_3

в программе Java, но не подпакеты Sub_Package_1, Sub_Package_2 и Sub_Package_3. При включении членов специфического пакета sub используют примечание:
import package_name.sub_package_name.*;

Например, запись:
import Main_Package.Sub_Package_3.*;
будет включать все классы Sub_Package_3:
Class_31
Class_32


Таким образом, мы должны импортировать члены каждого пакета или подпакета индивидуально.

Следующая таблица показывает некоторые записи импорта, чтобы включить пакет, и подпакеты.
Таблица 2

3.8.3 Установка CLASSPATH

Оба, компилятор и интерпретатор ищут классы в текущем каталоге. Это означает, что JDK файлы классов и текущий каталог автоматически установлены в CLASSPATH -переменной окружения. Однако, в некоторых случаях, мы должны установить CLASSPATH.

CLASSPATH - список каталогов, которые используют компилятор и интерпретатор для поиска соответствующего файла класса. Вообще установка переменной окружения CLASSPATH не желательна, поскольку это долгий процесс. Предпочтительна установка CLASSPATH во время выполнения, поскольку устанавливается путь для текущего выполнения.
javac classpath c: JavaProgs PackageDemo.java

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

Rus. Open Source company, г. Саратов
ул. Орджоникидзе, 156, офис 203
тел: 8 (8452) 57-84-41
e-mail: info@rus_opensource.com

Главная | Обзоры | О разном
Карта сайта

Учебная литература:

Введение в Linux
Основы JAVA
Архивы

© 2013 opensourcerules.net