1. Paczki
Zwykłe programy Java obejmują ogromną liczbę klas. Ile? Tysiące, dziesiątki tysięcy. A jeśli weźmiemy pod uwagę fakt, że program korzysta z różnych bibliotek zawierających klasy napisane przez innych programistów, to liczbę klas można śmiało mierzyć w milionach!
Wymyślenie unikalnych nazw dla wszystkich tych milionów, a nawet tysięcy klas byłoby prawie niemożliwe.
Oczywiście możemy sobie wyobrazić nazwy takie jak A123
i B345
, ale jeśli mówimy o wybraniu dobrej nazwy klasy, takiej, która ułatwia zrozumienie klasy (jak String
np. dla stringów), to nawet wygenerowanie tysiąca unikalnych nazw to dużo pracy.
Dlatego w Javie zwyczajowo grupuje się klasy w pakiety za pomocą słowa kluczowego package.
Klasy Java i ich pakiety są bardzo podobne do plików i folderów na komputerze.
Na przykład, jeśli chcesz przechowywać 10 dokumentów na swoim komputerze, prawdopodobnie po prostu trzymasz je w jednym folderze. Ale co, jeśli masz tysiące dokumentów (na przykład repozytorium wszystkich dokumentów firmy)?
W przypadku tysięcy dokumentów, które mają być przechowywane, jednym z rozwiązań jest utworzenie wielu poziomów folderów o dobrze opisowych nazwach. A następnie w folderze na ostatnim poziomie przechowuj dokumenty, które odnoszą się do tego konkretnego folderu. Dobre opisowe nazwy dokumentów też nie zaszkodzą.
W rzeczywistości robimy to wszystko dla klas w Javie.
Pliki zawierające klasy są przechowywane w różnych katalogach (folderach), a pełna nazwa folderu klasy wraz ze wszystkimi jego podfolderami jest nazwą pakietu. Przykład:
Ścieżka do pliku | Nazwa pakietu | Nazwa klasy |
---|---|---|
|
|
|
|
|
|
|
|
|
W przeciwieństwie do nazw folderów, w nazwach pakietów separatorem jest kropka. Innymi słowy, folder \com\codegym\tasks\
odpowiada pakietowi com.codegym.tasks
.
2. src
folder
W Javie zwyczajowo przechowuje się wszystkie klasy programu w jednym folderze (i podfolderach). Ten folder jest zwykle nazywany src
(skrót od source ).
Ten folder jest nazywany katalogiem głównym projektu (lub katalogiem źródłowym ), a wszystkie ścieżki do pakietów są względem niego względne. Przykłady:
Lornetka składana | Nazwa pakietu |
---|---|
|
|
|
|
W takiej sytuacji programiści mówią coś w stylu „mamy projekt o nazwie my
, który znajduje się w c:\projects\data
folderze” lub „mamy projekt o nazwie project
, który znajduje się w d:\files\git\data
folderze”
Najlepiej jest zawsze umieszczać klasy w pakietach, a nie bezpośrednio w folderze głównym ( src
. Jeśli masz tylko kilka klas, nie stanowi to problemu. Ale gdy jest wiele klas, bardzo łatwo się pogubić. Więc , zawsze twórz swoje zajęcia tylko w pakietach.
W Javie zwyczajem jest nadawanie znaczących nazw klasom i pakietom. Wiele firm wydaje własne biblioteki (zestaw klas) i aby uniknąć nieporozumień, dołącza nazwę firmy/strony internetowej/projektu do nazwy pakietu:
Nazwa pakietu | Nazwa firmy/projektu |
---|---|
|
Projekt Apache'a |
|
Firma Oracle |
|
Firma Oracle, projekt Java |
|
Firma IBM, projekt WebSphere |
|
Projekt JBossa |
3. Zawartość pliku
Zgodnie ze standardem języka Java w pliku z kodem musi być zawarta informacja o nazwie klasy i nazwie jej pakietu. Ogólny formularz przedstawiono poniżej:
package package-name;
public class ClassName
{
}
Nazwa pakietu musi być zgodna z nazwą folderu, a nazwa pliku musi być zgodna z nazwą klasy publicznej.
Jeśli masz plik, powinien on zawierać to:...\src\com\project\Service.java
package com.project;
public class Service
{
}
4. Importowanie klas
Nazwa klasy i nazwa pakietu tworzą tak zwaną w pełni kwalifikowaną nazwę klasy .
Przykłady:
W pełni kwalifikowana nazwa | Nazwa pakietu | Nazwa klasy |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
nic |
|
Dobre wieści:
W pełni kwalifikowana nazwa klasy jest zawsze unikatowa w ramach projektu. W końcu nie można utworzyć dwóch plików o tej samej nazwie w jednym folderze.
Złe wiadomości:
W pełni kwalifikowane nazwy klas są zazwyczaj długie lub bardzo długie. A pisanie długiej nazwy (na przykład java.util.ArrayList) za każdym razem w kodzie jest bardzo niewygodne.
Dlatego Java dodała możliwość importowania klas .
Możesz użyć krótkiej nazwy klasy w swoim kodzie, ale najpierw musisz powiadomić kompilator, która w pełni kwalifikowana nazwa klasy odpowiada krótkiej nazwie . Co jeśli teraz w swoim projekcie masz wiele klas o tej samej nazwie? Lub pierwotnie masz jeden, ale potem dodano 15 kolejnych...
Aby użyć krótkiej nazwy klasy w swoim kodzie, musisz dodać następującą konstrukcję:
import fully-qualified-class-name;
Tę deklarację należy dodać na samym początku zajęć, zaraz po package
deklaracji.
Przykład:
package com.codegym.tasks.task01;
import java.util.Scanner;
import com.test.helper.special.ArrayList;
public class Solution
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
ArrayList list = new ArrayList();
}
}
Zaimportowaliśmy dwie klasy ( ijava.util.Scanner
) com.test.helper.special.ArrayList
, więc możemy używać ich krótkich nazw w naszym kodzie. A kompilator będzie wiedział, których klas użyć.
A oto jak wyglądałby ten sam kod, gdybyśmy nie użyli import
:
package com.codegym.tasks.task01;
public class Solution
{
public static void main(String[] args)
{
java.util.Scanner console = new java.util.Scanner(System.in);
com.test.helper.special.ArrayList list = new com.test.helper.special.ArrayList();
}
}
Nawiasem mówiąc, jeśli twój projekt ma dwie klasy o nazwach Scanner
, nie będziesz mógł zaimportować ich obu do tego samego pliku: będziesz musiał użyć długiej nazwy dla jednej z nich.
Załóżmy, że masz Jen w swoim zespole. Nie ma problemów z komunikacją, ponieważ wszyscy wiedzą, kim ona jest. Ale gdyby było trzech Jenów, to do ich odróżnienia należałoby użyć w pełni kwalifikowanych imion.
Nawiasem mówiąc, jeśli jesteś zbyt leniwy, aby dodać wiele instrukcji importu do swojej klasy, możesz użyć jej leniwej wersji: zamiast konkretnej nazwy klasy umieść gwiazdkę:
import package-name.*;
To pozwoli ci używać krótkich nazw wszystkich klas w pakiecie.
Wszystkie klasy w java.lang
pakiecie są importowane automatycznie, więc nie musisz pisać import
dla nich instrukcji. Na pewno znasz już jedną z tych klas: java.lang.String
. Tak to prawda. Jest to String
klasa, której użyliśmy do pracy z ciągami znaków.
GO TO FULL VERSION