Мы написали несколько программ на Java. Каждая предыдущая программа Java сохранялась в виде файла, например Test.java. Впоследствии программа компилируется в Test.class. В конечном итоге мы используем $java Test для запуска программы.
Однако в обычном проекте Java нам часто приходится писать более одной программы .java, и конечный продукт Java включает в себя все программы Java. Следовательно, Java необходимо решить проблему организации программ Java. Целью пакета является лучшая организация программ Java.
Создание пакета
Создание пакета очень простое. Нам нужно только добавить пакет в начало Java-программы. Давайте возьмем в качестве примера класс Human и добавим его в пакет:
Скопируйте код кода следующим образом:
пакет com.vamei.society;
общественный класс Человек
{
/**
* конструктор
*/
общественный человек (int h)
{
this.height = ч;
System.out.println("Я родился");
}
/**
*аксессуар
*/
публичный int getHeight()
{
вернуть this.height;
}
/**
* мутатор
*/
public voidrowHeight(int h)
{
this.height = this.height + h;
}
частная высота int;
}
Код для копирования первой строки приведенных выше операторов выглядит следующим образом:
пакет com.vamei.society;
Указывает, что программа находится в пакете com.vamei.society. com.vamei (обратная сторона vamei.com) представляет собой доменное имя автора пакета (к сожалению, это доменное имя было зарегистрировано кем-то другим, поэтому оно используется только в демонстрационных целях). Java требует, чтобы пакеты имели префиксы доменных имен, чтобы различать разных авторов. Общество — это еще одно локальное имя пути. com.vamei.society вместе образуют имя пакета.
Пакеты предоставляют пространство имен для программ Java. Полный путь к классу Java состоит из его пакета и имени класса, например com.vamei.society.Human. Соответствующую программу Human.java следует разместить в папке com/vamei/society/. Классы идентифицируются по их полным путям, поэтому вы можете иметь классы с одинаковыми именами в разных пакетах, не запутываясь в Java. Например, com.vamei.society.Human и com.vamei.creature.Human — это два разных класса.
Давайте рассмотрим еще одну деталь. Класс Human является общедоступным, и его конструктор также является общедоступным, поэтому любой другой объект может вызвать этот класс. Как мы говорили ранее, в файле Java может быть только один общедоступный класс, и этот класс должен иметь то же имя, что и файл .java. Классу не требуется ключевое слово public, которое на самом деле представляет собой разрешение: класс виден в пакете, в котором он находится. То есть другие программы Java в пакете могут получить доступ к классу. Это доступ по умолчанию в Java.
Аналогично, члены объекта также могут иметь разрешения по умолчанию (видимые в пакетах). Например, мы удалим ключевое слово public перед методом getHeight().
пакетный вызов
Нам нужно всего лишь поместить скомпилированный Human.java Human.class в соответствующую папку. Например, я поместил Human.class в com/vamei/society/. Фактически, вы также можете поместить файл .java по соответствующему пути, и Java будет автоматически скомпилирована при использовании.
Если весь пакет (то есть папка com) находится по текущему рабочему пути, то для использования пакета не требуется никаких специальных настроек, таких как следующий TestAgain.java:
Скопируйте код кода следующим образом:
импортировать com.vamei.society.*;
общедоступный класс TestAgain
{
public static void main(String[] args)
{
Человек aPerson = новый Человек(180);
System.out.println(aPerson.getHeight());
}
}
импорт используется для определения путей. Используя оператор импорта, мы можем ввести классы по соответствующему пути. *Указывает на введение всех классов в папку общества. В TestAgain мы напрямую используем класс Human.
Мы также можем предоставить полный путь к классу. Это позволяет различать классы с одинаковым именем, но разными путями, например:
Скопируйте код кода следующим образом:
общедоступный класс TestAgain
{
public static void main(String[] args)
{
com.vamei.society.Human aЧеловек =
новый com.vamei.society.Human(180);
System.out.println(aPerson.getHeight());
}
}
Поскольку мы предоставляем полный путь к классам, нет необходимости использовать оператор импорта.
Если пакет не помещен в текущий рабочий путь, нам необходимо уведомить Java при использовании пакета. Например, мы помещаем пакет в /home/vamei/javapackage, так что Human.class находится в /home/vamei/javapackage/com/vamei/society/Human.class, а наш рабочий путь — /home/vamei. Таким образом, пакет не может быть найден. Один из способов — использовать -classpath для указания пути к папке, в которой находится пакет при использовании javac и java, например:
Скопируйте код кода следующим образом:
$javac -classpath /home/vamei/javapackage:.
$java -classpath /home/vamei/javapackage:.
Просто найдите пакет в /home/vamei/javapackage и рабочий путь (.). Java может найти класс Human из /home/vamei/javapackage и класс TestAgain из .
Кроме того, вы также можете установить системную переменную среды CLASSPATH и добавить указанный выше путь к переменной, не вводя каждый раз параметр -classpath.
Механизмы, подобные пакетам, также распространены в других языках, например механизм импорта в Python. Все они направлены на лучшую организацию и использование существующих программ. Используя пакеты, мы можем легко расширять программы Java и использовать существующие библиотеки программ Java. Обратите внимание, что пакет управляет файлами .class. Java известна как «Однажды компилировать, запускать где угодно» (Compile Once, runwhere). Файлы .class могут работать на любой платформе, оснащенной виртуальной машиной Java (JVM, Java Virtual Machine), что помогает нам преодолевать трудности с портированием программ, вызванные системными различиями.
Различия между системами могут быть очень большими. Если мы пишем программу на языке C, исходную программу необходимо перекомпилировать на каждой платформе, чтобы адаптировать ее к различным аппаратным условиям. Виртуальная машина Java соединяет платформу и вселенную Java и образует промежуточный уровень между аппаратным обеспечением и логикой программирования. JVM скрывает аппаратные различия и предоставляет программистам «стандартную» вселенную Java. Файл .class можно рассматривать как валюту, обращающуюся во вселенной Java. Благодаря инфраструктуре JVM и поддержке управления пакетами программы Java достигают хорошей переносимости.
Подвести итог
упаковка, импорт
Разрешения по умолчанию: видны в пакете.
-путь к классам, ПУТЬ К КЛАССУ