Пакеты Java
Вступление
Приличный размер проекта может иметь сотни классов Java, и вам нужно организовать их в пакеты (например, каталоги файлов). Это позволит вам классифицировать файлы, контролировать доступ к вашим классам и избежать потенциальных конфликтов имен. Иногда вы будете использовать сторонние библиотеки классов Java, написанные в другом отделе или даже за пределами вашей компании. Чтобы свести к минимуму вероятность того, что имена пакетов будут одинаковыми, обычно используют так называемые соглашения об обратном доменном имени. Например, если вы работаете в компании с именем SCT, у которой есть веб-сайт sct.com, вы можете поставить префикс всех имен пакетов с com.sct. Чтобы поместить класс Java в определенный пакет, добавьте оператор пакета в начале класса (это должен быть первый оператор без комментариев в классе). Например, если класс SalesTax был разработан для бухгалтерии, Вы можете объявить это следующим образом, что приведет к созданию структуры каталогов, как показано ниже:
packagecom.sct.account;
classSalesTax {
// the class body goes here
}
Классы Java также организованы в пакеты, и полное имя класса состоит из имени пакета, за которым следует имя класса. Например, полное имя Java-класса Double isjava.lang.Double, где java.lang - это имя пакета.
Чтобы использовать открытый элемент пакета вне его пакета, необходимо выполнить одно из следующих действий:
- Обращайтесь к члену по его полному имени: здесь нет необходимости в операторе импорта, но код станет нечитаемым из-за более длинного оператора.
newpackageName.className (). methodName (аргумент1, аргумент2);
- Импортировать элемент пакета. Таким образом, мы можем импортировать один класс из одного пакета. Оператор импорта должен быть помещен после оператора декларации пакета.
importpackageName.className; newclassName (). methodName (аргумент 1, аргумент2);
- Импортировать весь пакет участника: это поможет импортировать все классы определенного пакета.
importpackageName *. newclassName (). methodName (аргумент1, аргумент2);
Мы можем поместить наш файл класса в «classpath», чтобы иметь глобальный доступ без необходимости импорта, но это не рекомендуемый способ программирования. Ранее мы обсуждали, как создать / обновить «classpath». Мы можем добавить наш скомпилированный Java-каталог в classpath, как показано ниже,
[PackageDir] packageNameClassName.java
Предположим, что нашему классу SalesTax необходимо использовать метод calcInterest () класса «MyCalculation», объявленный в пакете «com.sct.calculate».
package com.sct.calculate;
public class MyCalculation
{
//This method calculate interst
public int calculateInterest(int amount, int rate)
{
int intrerstAmount = amount * rate/100;
return intrerstAmount;
}
}
Мы можем вызвать метод executeInterest () двумя способами.
1. Вызов с полным именем: как показано ниже, мы вызываем метод с полным путем.
2. импорт пакета и затем прямой вызов метода: здесь мы добавили строку 3, которая является оператором импорта, и строка 11 будет работать точно так же, как строка 8.
package com.sct.account;
import com.sct.calculate.*;
public class SalesTax {
public static void main (String args[]){
int interestAmount = new com.sct.calculate.MyCalculation().calculateInterest(1000, 8);
System.out.println("Interest Amount ="+ interestAmount);
int intAmount2 = new MyCalculation().calculateInterest(1000,8);
System.out.println("Interest Amount2="+ intAmount2);
}
}
Выход вышеупомянутого класса SalesTax будет как ниже
Пример вывода:
Если вам нужно импортировать несколько классов из одного пакета, используйте подстановочный знак в операторе импорта, а не перечисляйте каждый из классов в отдельной строке, как показано ниже,
package com.sct.account;
import com.sct.calculate.*;
public class SalesTax
{
public static void main (String args[])
{
int interestAmount = new com.sct.calculate.MyCalculation().calculateInterest(1000, 8);
System.out.println("Interest Amount ="+ interestAmount);
int intAmount2 = new MyCalculation().calculateInterest(1000,8);
System.out.println("Interest Amount2="+ intAmount2);
}
}
Пакет в основном используется для реализации принципа инкапсуляции Java OOP. Давайте возьмем пример. У нас есть требование, чтобы у нас был один метод executeSPLInterest (), доступный только в том же пакете, т.е. «Com.sct.calculate». Это может быть для расчета процентов сотрудников банка. Так что наш класс «MyCalculation» будет выглядеть ниже
package com.sct.calculate;
public class MyCalculation {
//This method calculate interst
public int calculateInterest(int amount, int rate){
int intrerstAmount = amount * rate/100;
return intrerstAmount;
}
//This is Special Interst Calculation
protected int calculateSPLInterest (int amount, int rate){
int intrerstAmount = (amount * rate/100) + 100;
return intrerstAmount;
}
}
При попытке доступа к этому методу из внешнего пакета компилятор выдаст ошибку, как показано на экране ниже. Таким образом, мы можем скрыть конкретную реализацию члена класса вне пакета.
Здесь программы небольшие и используют ограниченное количество классов, вы можете обнаружить, что вам вообще не нужно изучать пакеты. Но когда вы начнете создавать более сложные проекты с множеством классов, связанных друг с другом наследованием, вы можете обнаружить преимущества организации их в пакеты.
Пакеты полезны по нескольким широким причинам:
- Они позволяют вам организовать ваши классы в единицы. Так же как у вас есть папки или каталоги на жестком диске для организации ваших файлов и приложений, пакеты позволяют вам организовать ваши классы в группы, чтобы вы использовали только то, что вам нужно для каждой программы.
- Они уменьшают проблемы с конфликтами по поводу имен. По мере роста числа классов Java возрастает вероятность того, что вы будете использовать то же имя класса, что и у другого разработчика, что открывает возможность именования коллизий и сообщений об ошибках, если вы попытаетесь объединить группы классов в одну программу. Пакеты предоставляют способ ссылаться конкретно на желаемый класс, даже если он разделяет имя с классом в другом пакете.
- Они позволяют вам защищать классы, переменные и методы более широкими способами, чем в каждом отдельном классе, как вы узнали сегодня. Вы узнаете больше о защите с пакетами позже.
- Пакеты могут быть использованы для уникальной идентификации вашей работы.
Резюме
- Пакет Java является способом организации классов в большом проекте, а также помогает в реализации инкапсуляции.
- Чтобы получить доступ к коду, находящемуся вне текущего пакета, либо импортируйте класс, либо используйте полное имя класса.
Предыдущая: Класс, методы, переменные экземпляра
Далее: Концепции Java объектно-ориентированного программирования
Новый контент: Composer: менеджер зависимостей для PHP , R программирования