Jelenlegi hely

17.4. Forrás és osztály fájlok menedzselése

A Java környezet sok megvalósításánál számít a hierarchikus fájlrendszer a forrás és osztály állományok menedzseléséhez, bár maga a Java nem igényli ezt. A stratégia a következő.

A forráskód egy osztályt, interfészt vagy felsorolt típust tartalmaz, amelynek neve a típus egyszerű neve és a kiterjesztése: .java. A forrásfájlt egy könyvtárba tesszük, amelynek a neve kifejezi a csomag nevét, amelyikhez a típus tartozik. Például, a forráskódban lévő Rectangle osztály adja a fájl nevét, Rectangle.java, és a fájl egy graphics nevű könyvtárban lesz. A graphics könyvtár bárhol lehet a fájl rendszeren. A lenti ábra mutatja, hogyan működik.

Könyvtárstruktúra 1. példa

A csomag tag teljes neve és a fájl elérési útja hasonló:

Osztály név graphics.Rectangle
Fájl elérési út graphics\Rectangle.java


Emlékezzünk vissza, hogy a megállapodás értelmében a cégek fordított internet domén nevet használnak a csomagok elnevezésére. A példában a cég domén neve hobnob.com, ezért mindegyik csomagnak a nevét com.hobnob fogja megelőzni. A csomag névnek mindegyik összetevője megegyezik egy-egy alkönyvtárral. Így ha Hobnob-nak van egy graphics csomagja, amely tartalmazza a Rectangle.java forrásfájlt, akkor ezek alkönyvtárak sorozatában tárolódnak:

Könyvtárstruktúra 2. példa

Mikor lefordítjuk a forrásállományt, a fordító létrehoz különböző kimeneti állományt minden egyes definiált osztálynak és interfésznek. A kimeneti állománynak az alap neve az osztály vagy interfész neve és a kiterjesztése: .class, ahogyan a következő ábra is mutatja:

Kimeneti állományok

A .class fájlnak ugyanúgy, mint egy .java fájlnak is kell a csomagokat kifejező könyvtárszerkezet. Azonban nem lehet ugyanabban a könyvtárban, mint a forrás. Külön-külön könyvtárba kell rendezni a forrást és az osztályt:

Könyvtárszerkezet

Ha ez alapján csináljuk, oda tudjuk adni az osztály könyvtárakat más programozóknak anélkül, hogy megmutatnánk a forrásunkat. Ekkor használhatjuk a Java fordítónak a –d opcióját az osztály fájlok megadásához, ehhez hasonlóan:
javac –d classes sources\com\hobnob\graphics\Rectangle.java

A forrás és osztály állományok kezeléséhez erre a módszerre van szükségünk, így a fordító és a Java virtuális gép (JVM) megtalálja az összes típust, amit a programunk használ. Mikor a fordító összeakad egy új osztállyal a program fordításkor, meg fogja találni az osztályt, úgy hogy feloldja a neveket, típusvizsgálatot hajt végre és így tovább. Hasonlóan, amikor a JVM összeakad egy új osztállyal program futáskor, meg fogja találni az osztályhoz tartozó metódusokat. A fordító és a JVM az osztályokat a class path–ban listázott könyvtárakban és JAR fájlokban keresi.

Definíció: A class path, könyvtárak vagy JAR fájlok egy rendezett listája, amelyben class fájlokat kereshetünk. Fizikailag ez egy CLASSPATH nevű környezeti változót jelent.

Mindegyik könyvtár listázva van a class path-ban egy legfelső szinten lévő könyvtárban, amelyben csomag könyvtárak láthatók. A legfelső szintű könyvtártól a fordító és a JVM összeállítja az elérési útnak a maradékát, az alaphoz a csomagot és az osztály névnél az osztályt. A fordító és a JVM is összeállítja az elérési út nevet a .class fájlhoz a csomag teljes nevével.

Alapértelmezésként a fordító és a JVM az aktuális könyvtárban és a JAR fájlban keres, amely magába foglalja a Java környezeti class fájlokat. Más szóval, az aktuális könyvtár és a Java környezeti class fájlok automatikusan benne vannak a class path-ban. Legtöbbször az osztályokat megtalálják ezen a két helyen. Így nem kell aggódnunk az osztályaink elérési útja miatt. Néhány esetben azonban lehet, hogy meg kell adni osztályaink elérési útját.