Подтвердить что ты не робот

Какова цель определения пакета в файле Java?

Я новичок и только что узнал, что если я скажу

package my.first.group.here;
...

тогда файлы Java, находящиеся в этом пакете, будут помещены в каталог my/first/group/here.

Какова основная цель размещения некоторых файлов Java в пакете? Кроме того, если я решил принять это, как мне их группировать?

Спасибо


EDIT: для тех, у кого может быть один и тот же вопрос, я только что нашел это руководство по пакетам от Sun.

4b9b3361

Ответ 1

Начнем с определения "пакета Java", как описано в статье Википедии:

Пакет Java - это механизм для организация классов Java в пространства имен, подобные модулям Modula. Пакеты Java могут быть сохранены в сжатые файлы, называемые JAR файлами, позволяя классам загружаться быстрее, чем группа, а не одна за раз. Программисты также обычно используют пакеты для организации классов к той же категории или предоставлению аналогичная функциональность.

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

Пакеты

Префикс уникального имени пакета всегда написанный во всех строчных ASCII письма и должен быть одним из доменные имена верхнего уровня, в настоящее время com, edu, gov, mil, net, org или один из Английский двухбуквенный код, идентифицирующий стран, указанных в стандарте ИСО 3166, 1981.

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

<сильные > Примеры:

  • com.sun.eng

  • com.apple.quicktime.v2

  • edu.cmu.cs.bovik.cheese

Ответ 2

Я большое приложение, вы должны иметь два файла с одинаковым именем (java.util.Date и java.sql.Date), особенно когда вы начинаете привлекать сторонние банки. Таким образом, вы можете использовать пакеты для обеспечения уникальности.

Самое главное, на мой взгляд, упаковка разбивает проекты на значимые сегменты. Таким образом, мой SQL-пакет имеет код, связанный с sql, и мой пакет logger обрабатывает протоколирование.

Ответ 3

Он позволяет программе составляться из нескольких разных программ/компонентов/библиотек, так что их имена классов не будут конфликтовать, а компоненты легче организовать. См. http://java.sun.com/docs/books/tutorial/java/package/index.html

В Java принято обозначать пакеты как обратные доменные имена. Например, если домен вашей компании "initech.com" и вы делаете программу под названием "Gizmo", имена пакетов обычно префикс "com.initech.gizmo" с подпакетами для разных компонентов программы.

Ответ 4

В дополнение к пространству имен, упомянутому в других ответах, вы можете ограничить доступ к методам и полям на основе области, объявленной для этого члена. Члены с общедоступным доступом свободно доступны, чтобы ограничить доступ, который вы обычно определяете как частный (т.е. Скрытый вне класса). Вы также можете использовать защищенную область, чтобы ограничить доступ к типу и его дочерним элементам. Существует также область по умолчанию (член без квалификатора имеет область по умолчанию), которая позволяет дочерним типам и типам в том же пакете получать доступ к члену. Это может быть эффективным способом совместного использования полей и методов, не делая их слишком широко доступными и может помочь при тестировании.

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

public class Foo {
    int doSomething() {
        return 1;
    }
}

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

public class FooTest {
    @Test
    int testDoSomething() {
        Foo foo = new Foo();
        assertEquals(1, foo.doSomething());
    }
}

Ответ 5

Пакеты важны для обеспечения гибкости разделения классов. Их можно использовать для:

  • разделяющие проекты
  • разделяющие модули
  • разделение слоев приложений (бизнес, веб, дао)
  • дальнейшее разделение более тонкого кода

Например

com.mycompany.thisproject.thismodule.web

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

Ответ 6

На странице Wikipedia на тему:

"Java-пакет - это механизм для размещения классов Java в пространствах имен, аналогичных модулям Modula. Пакеты Java могут храниться в сжатых файлах, называемых JAR файлами, что позволяет классам загружаться быстрее, чем группа, а не по одному. Программисты также обычно используют пакеты для организации классов, принадлежащих к той же категории, или предоставления аналогичной функциональности.

Ответ 7

также, если я решил принять это, как следует ли их группировать?

Это во многом зависит от шаблонов проектирования, которые вы будете использовать в своем проекте. По большей части (особенно, если вы новичок), вы захотите сгруппировать их по функциональности или другому логическому подобию.

Ответ 8

Java очень точен в своей реализации. Это не оставляет места для мокрой.

Если все будут использовать один и тот же пакет, им придется найти какой-то "всемирный" способ обеспечить, чтобы ни одно имя класса не сталкивалось.

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

У вас могут быть разные объекты "Point", определенные в 4 разных местах вашей системы, но ваш класс будет использовать только тот, который вы ожидаете (потому что вы импортируете его).

Как они гарантируют, что у каждого есть свое пространство, чтобы использовать свой обратный домен, так что мой "tv.kress.bill". Я владею этим доменом. Фактически, я разделяю его с моим братом "tv.kress.doug", и хотя мы разделяем один и тот же домен, мы не можем столкнуться.

Если в вашей компании развиваются сотни подразделений в вашей компании, они могут делать это без столкновений и точно знать, как их разделить.

Системы, которые не делают такого рода деления, кажутся мне действительно шелушащимися. Я мог бы использовать их, чтобы взломать script для чего-то личного, но мне было бы неудобно создавать что-нибудь большое без какой-либо строгой упаковки.

Ответ 9

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

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

Подобно каталогам, он также предоставляет способ разрешения конфликтов имен. Вы можете иметь temp.txt в нескольких разных каталогах таким же образом, что вы можете иметь два класса, которые отображаются в разных пакетах. Это становится важным (1), когда вы начинаете комбинировать код с другими людьми в Интернете или (2) даже понимаете, как работает загрузка классов Java.

Ответ 10

Еще одна важная вещь в пакетах - это protected для контроля доступа.

Защищено где-то между общедоступными (каждый может получить доступ) и private (доступ только для внутреннего класса). Вещи, помеченные как защищенные, могут быть доступны из одного и того же пакета или из подклассов. Это означает, что для ограниченного доступа вам не нужно ставить все в одном классе.

Ответ 11

В конечном счете, есть 3 основных причины, по которым мы хотим использовать пакеты в Java.

1) Простое обслуживание

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

2) Предоставить безопасность пакета

Пакеты допускают внешний доступ только к модификаторам доступа public к методам содержащихся классов. Использование модификатора protected или no будет доступно только для классов внутри одного и того же пакета. Для получения дополнительной информации см. Сообщение: Какой модификатор доступа Java допускает доступ к члену только подклассами в другом пакете?

3) Избегайте аналогичного наименования

Подобно пространству имен .NET, имена классов содержатся в пределах их содержащего пакета. Это означает, что два взаимоисключающих пакета могут содержать классы с тем же именем. Это связано с тем, что сами пакеты имеют разные имена, и, следовательно, имена полностью различаются. Для получения дополнительной информации см. Учебник [Именование пакета: Учебники Java] [3].