Guide to Java Packages

Руководство по пакетам Java

1. Вступление

В этом кратком руководстве мы рассмотрим основы работы с пакетами на Java. Мы увидим, как создавать пакеты и получать доступ к типам, которые мы помещаем в них.

Мы также обсудим соглашения об именах и их связь с базовой структурой каталогов.

Наконец, мы скомпилируем и запустим наши упакованные классы Java.

2. Обзор пакетов Java

В Java мыuse packages to group related classes, interfaces and sub-packages.

Основными преимуществами этого являются:

  • Упрощение поиска связанных типов - пакеты обычно содержат типы, которые логически связаны

  • Избежание конфликтов именования - пакет поможет нам однозначно идентифицировать класс; например, мы могли бы иметь классыcom.example.Application,, а такжеcom.example.Application

  • Управление доступом - мы можем контролировать видимость и доступ к типам, комбинируя пакеты иaccess modifiers

Затем давайте посмотрим, как мы можем создавать и использовать пакеты Java.

3. Создание пакета

Чтобы создать пакет,we have to use the package statement by adding it as the very first line of code in a file.

Поместим тип в пакет с именемcom.example.packages:

package com.example.packages;

It’s highly recommended to add each new type in a package. Если мы определяем типы и не помещаем их в пакет, они попадут вdefault или в безымянный пакет. При этом мы теряем преимущества использования структуры пакета и не будем получать доступ к этим типам из других пакетов.

3.1. Соглашения об именах

Чтобы избежать пакетов с одинаковым именем, мы придерживаемся некоторых соглашений об именах:

  • мы определяем наш пакетnames in all lower case

  • имена пакетов разделены точкой

  • имена также определяютсяthe company or organization that creates them

Чтобы определить название пакета на основе организации, мы обычно начинаем с изменения URL-адреса компании. После этого соглашение об именах определяется компанией и может включать названия подразделений и проектов.

Например, чтобы сделать пакет изwww.example.com, давайте перевернем его:

com.example

Затем мы можем дополнительно определить подпакеты этого, напримерcom.example.packages илиcom.example.packages.domain.

3.2. Структура каталогов

Пакеты в Java соответствуют структуре каталогов.

Each package and subpackage has its own directory. Итак, для пакетаcom.example.packages у нас должна быть структура каталоговcom → example → packages.

Большинство IDE помогут создать эту структуру каталогов на основе имен наших пакетов, поэтому нам не нужно создавать их вручную.

4. Использование членов пакета

Начнем с определения классаTodoItem в подпакете с именемdomain:

package com.example.packages.domain;

public class TodoItem {
    private Long id;
    private String description;

    // standard getters and setters
}

4.1. импорт

Чтобы использовать наш классTodoItem из класса в другом пакете, нам нужно его импортировать. После импорта мы можем получить к нему доступ по имени.

Мы можем импортировать один тип из пакета или использовать звездочку для импорта всех типов в пакете.

Давайте импортируем весь подпакетdomain:

import com.example.packages.domain.*;

Теперь давайте импортируем только классTodoItem:

import com.example.packages.domain.TodoItem;

JDK и другие библиотеки Java также поставляются со своими собственными пакетами. We can import pre-existing classes that we want to use in our project in the same manner.с

Например, давайте импортируем интерфейс ядра JavaList и классArrayList:

import java.util.ArrayList;import java.util.List;

Затем мы можем использовать эти типы в нашем приложении, просто используя их имя:

public class TodoList {
    private List todoItems;

    public void addTodoItem(TodoItem todoItem) {
        if (todoItems == null) {
            todoItems = new ArrayList();
        }
        todoItems.add(todoItem);
    }
}

Здесь мы использовали наши новые классы вместе с базовыми классами Java, чтобы создатьList изToDoItems.

4.2. Полностью квалифицированное имя

Иногда мы можем использовать два класса с одинаковыми именами из разных пакетов. Например, мы можем использовать какjava.sql.Date, так иjava.util.Date. When we run into naming conflicts, we need to use a fully qualified class name for at least one of the classes.

Давайте использоватьTodoItem с полным именем:

public class TodoList {
    private List todoItems;

    public void addTodoItem(com.example.packages.domain.TodoItem todoItem) {
        if (todoItems == null) {
            todoItems = new ArrayList();
        }todoItems.add(todoItem);
    }

    // standard getters and setters
}

5. Компиляция сjavac

Когда пришло время скомпилировать наши упакованные классы, нам нужно вспомнить нашу структуру каталогов. Начиная с исходной папки, нам нужно указатьjavac, где найти наши файлы.

Нам нужно сначала скомпилировать наш классTodoItem, потому что наш классTodoList зависит от него.

Давайте начнем с открытия командной строки или терминала и перехода в наш исходный каталог.

Теперь давайте скомпилируем наш классcom.example.packages.domain.TodoItem:

> javac com/example/packages/domain/TodoItem.java

Если наш класс компилируется правильно, мы не увидим сообщений об ошибках и в нашем каталогеcom/example/packages/domain должен появиться файлTodoItem.class.

Для типов, которые ссылаются на типы в других пакетах, мы должны использовать флаг-classpath, чтобы указать командеjavac, где найти другие скомпилированные классы.

Теперь, когда наш классTodoItem скомпилирован, мы можем скомпилировать наши классыTodoList иTodoApp:

>javac -classpath . com/example/packages/*.java

Опять же, мы не должны видеть сообщений об ошибках и должны найти два файла классов в нашем каталогеcom/example/packages.

Давайте запустим наше приложение, используя полное имя нашего классаTodoApp:

>java com.example.packages.TodoApp

Наш вывод должен выглядеть так:

image

6. Заключение

В этой короткой статье мы узнали, что такое пакет и почему мы должны его использовать.

Мы обсудили соглашения об именах и то, как пакеты связаны со структурой каталогов. Мы также увидели, как создавать и использовать пакеты.

Наконец, мы рассмотрели, как скомпилировать и запустить приложение с пакетами, используя командыjavac иjava.

Полный пример кода доступенover on GitHub.