Java - pakiety

Pakiety są używane w Javie w celu zapobiegania konfliktom nazw, kontroli dostępu, ułatwienia wyszukiwania / lokalizowania i używania klas, interfejsów, wyliczeń i adnotacji itp.

ZA Package można zdefiniować jako grupę powiązanych typów (klas, interfejsów, wyliczeń i adnotacji) zapewniających ochronę dostępu i zarządzanie przestrzenią nazw.

Niektóre z istniejących pakietów w Javie to -

  • java.lang - zawiera podstawowe klasy

  • java.io - klasy dla wejścia, funkcje wyjściowe są zawarte w tym pakiecie

Programiści mogą definiować własne pakiety w celu spakowania grup klas / interfejsów itp. Dobrą praktyką jest grupowanie zaimplementowanych przez Ciebie powiązanych klas, tak aby programista mógł łatwo określić, czy klasy, interfejsy, wyliczenia i adnotacje są powiązane.

Ponieważ pakiet tworzy nową przestrzeń nazw, nie będzie żadnych konfliktów nazw z nazwami w innych pakietach. Korzystając z pakietów, łatwiej jest zapewnić kontrolę dostępu, a także łatwiej jest zlokalizować powiązane klasy.

Tworzenie pakietu

Tworząc pakiet, należy wybrać nazwę pakietu i dołączyć plik package wraz z tą nazwą u góry każdego pliku źródłowego, który zawiera klasy, interfejsy, wyliczenia i typy adnotacji, które chcesz dołączyć do pakietu.

Instrukcja pakietu powinna być pierwszym wierszem w pliku źródłowym. W każdym pliku źródłowym może znajdować się tylko jedna instrukcja pakietu i ma ona zastosowanie do wszystkich typów w pliku.

Jeśli instrukcja pakietu nie jest używana, klasa, interfejsy, wyliczenia i typy adnotacji zostaną umieszczone w bieżącym pakiecie domyślnym.

Aby skompilować programy Java z instrukcjami pakietu, musisz użyć opcji -d, jak pokazano poniżej.

javac -d Destination_folder file_name.java

Następnie w określonym miejscu docelowym tworzony jest folder o podanej nazwie pakietu, a skompilowane pliki klas zostaną umieszczone w tym folderze.

Przykład

Spójrzmy na przykład, który tworzy pakiet o nazwie animals. Dobrą praktyką jest używanie nazw pakietów z małymi literami, aby uniknąć konfliktów z nazwami klas i interfejsów.

Poniższy przykład pakietu zawiera interfejs o nazwie animals -

/* File name : Animal.java */
package animals;

interface Animal {
   public void eat();
   public void travel();
}

Teraz zaimplementujmy powyższy interfejs w tym samym pakiecie animals -

package animals;
/* File name : MammalInt.java */

public class MammalInt implements Animal {

   public void eat() {
      System.out.println("Mammal eats");
   }

   public void travel() {
      System.out.println("Mammal travels");
   } 

   public int noOfLegs() {
      return 0;
   }

   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

Teraz skompiluj pliki java, jak pokazano poniżej -

$ javac -d . Animal.java 
$ javac -d . MammalInt.java

Teraz pakiet / folder z nazwą animals zostaną utworzone w bieżącym katalogu i te pliki klas zostaną w nim umieszczone, jak pokazano poniżej.

Możesz uruchomić plik klasy w pakiecie i uzyskać wynik, jak pokazano poniżej.

Mammal eats
Mammal travels

Import Keyword

Jeśli klasa chce użyć innej klasy w tym samym pakiecie, nie trzeba używać nazwy pakietu. Klasy z tego samego pakietu znajdują się nawzajem bez żadnej specjalnej składni.

Przykład

W tym przypadku klasa o nazwie Boss jest dodawana do pakietu listy płac, który zawiera już pracownika. Szef może wtedy odwołać się do klasy Pracownik bez używania przedrostka listy płac, jak pokazano na poniższej klasie Szef.

package payroll;
public class Boss {
   public void payEmployee(Employee e) {
      e.mailCheck();
   }
}

Co się stanie, jeśli klasa pracownika nie znajduje się w liście płac? Klasa Boss musi następnie używać jednej z następujących technik w celu odwoływania się do klasy w innym pakiecie.

  • Można użyć w pełni kwalifikowanej nazwy klasy. Na przykład -
payroll.Employee
  • Pakiet można zaimportować za pomocą słowa kluczowego import i symbolu wieloznacznego (*). Na przykład -

import payroll.*;
  • Samą klasę można zaimportować za pomocą słowa kluczowego import. Na przykład -
import payroll.Employee;

Note- Plik klasy może zawierać dowolną liczbę instrukcji importu. Instrukcje importu muszą znajdować się po instrukcji pakietu i przed deklaracją klasy.

Struktura katalogów pakietów

Dwa główne wyniki pojawiają się, gdy zajęcia są umieszczane w pakiecie -

  • Nazwa pakietu staje się częścią nazwy klasy, co omówiliśmy w poprzedniej sekcji.

  • Nazwa pakietu musi odpowiadać strukturze katalogów, w których znajduje się odpowiedni kod bajtowy.

Oto prosty sposób zarządzania plikami w Javie -

Umieść kod źródłowy klasy, interfejsu, wyliczenia lub typu adnotacji w pliku tekstowym, którego nazwa jest prostą nazwą typu i którego rozszerzenie to .java.

Na przykład -

// File Name :  Car.java
package vehicle;

public class Car {
   // Class implementation.   
}

Teraz umieść plik źródłowy w katalogu, którego nazwa odzwierciedla nazwę pakietu, do którego należy klasa -

....\vehicle\Car.java

Teraz kwalifikowana nazwa klasy i nazwa ścieżki wyglądałyby następująco -

  • Nazwa klasy → pojazd. Samochód
  • Nazwa ścieżki → pojazd \ Car.java (w systemie Windows)

Ogólnie firma używa odwróconej nazwy domeny internetowej do nazw swoich pakietów.

Example- Nazwa domeny internetowej firmy to apple.com, wtedy wszystkie nazwy jej pakietów zaczynałyby się od com.apple. Każdy składnik nazwy pakietu odpowiada podkatalogowi.

Example - Firma miała pakiet komputerów com.apple.com, który zawierał plik źródłowy Dell.java, byłby on zawarty w szeregu podkatalogów takich jak ten -

....\com\apple\computers\Dell.java

W momencie kompilacji kompilator tworzy inny plik wyjściowy dla każdej zdefiniowanej w nim klasy, interfejsu i wyliczenia. Podstawową nazwą pliku wyjściowego jest nazwa typu, a jego rozszerzenie to.class.

Na przykład -

// File Name: Dell.java
package com.apple.computers;

public class Dell {
}

class Ups {
}

Teraz skompiluj ten plik w następujący sposób, używając opcji -d -

$javac -d . Dell.java

Pliki zostaną skompilowane w następujący sposób -

.\com\apple\computers\Dell.class
.\com\apple\computers\Ups.class

Możesz zaimportować wszystkie klasy lub interfejsy zdefiniowane w \ com \ apple \ computers \ w następujący sposób -

import com.apple.computers.*;

Podobnie jak pliki źródłowe .java, skompilowane pliki .class powinny znajdować się w szeregu katalogów odpowiadających nazwie pakietu. Jednak ścieżka do plików .class nie musi być taka sama, jak ścieżka do plików źródłowych .java. Możesz osobno uporządkować katalogi źródłowe i klasowe, ponieważ -

<path-one>\sources\com\apple\computers\Dell.java

<path-two>\classes\com\apple\computers\Dell.class

W ten sposób możliwe jest udostępnienie katalogu klas innym programistom bez ujawniania źródeł. Musisz także zarządzać plikami źródłowymi i klasami w ten sposób, aby kompilator i wirtualna maszyna języka Java (JVM) mogły znaleźć wszystkie typy używane przez program.

Pełna ścieżka do katalogu klas, <ścieżka-two> \ classes, nazywana jest ścieżką klasy i jest ustawiana za pomocą zmiennej systemowej CLASSPATH. Zarówno kompilator, jak i maszyna JVM tworzą ścieżkę do plików .class, dodając nazwę pakietu do ścieżki klasy.

Powiedzmy, że <ścieżka-two> \ classes to ścieżka klasy, a nazwa pakietu to com.apple.computers, a kompilator i maszyna JVM będą szukać plików .class w lokalizacji <path-two> \ classes \ com \ apple \ computers.

Ścieżka klasy może zawierać kilka ścieżek. Wiele ścieżek należy oddzielić średnikiem (Windows) lub dwukropkiem (Unix). Domyślnie kompilator i maszyna JVM przeszukują bieżący katalog i plik JAR zawierający klasy platformy Java, tak aby katalogi te automatycznie znalazły się w ścieżce klas.

Ustaw zmienną systemową CLASSPATH

Aby wyświetlić bieżącą zmienną CLASSPATH, użyj następujących poleceń w systemach Windows i UNIX (powłoka Bourne'a) -

  • W systemie Windows → C: \> ustaw CLASSPATH
  • W systemie UNIX →% echo $ CLASSPATH

Aby usunąć bieżącą zawartość zmiennej CLASSPATH, użyj -

  • W systemie Windows → C: \> ustaw CLASSPATH =
  • W UNIX →% unset CLASSPATH; eksportuj CLASSPATH

Aby ustawić zmienną CLASSPATH -

  • W systemie Windows → ustaw CLASSPATH = C: \ users \ jack \ java \ classes
  • W systemie UNIX →% CLASSPATH = / home / jack / java / classes; eksportuj CLASSPATH