Zakaj na novo izumiti kolo? Ta kliše velja za razvoj programske opreme, kjer nekateri razvijalci pogosto prepišejo isto kodo za različne programe. Dve slabosti tega pristopa sta:
- Zapravlja čas
- Predstavlja potencialne napake v odpravljeni kodi
Številna okolja za razvoj programske opreme namesto ponovnega pisanja iste kode ponujajo knjižnična orodja, ki organizirajo pogosto uporabljeno kodo. Ko razvijalci zaključijo z odpravljanjem napak nekaterih kod za večkratno uporabo, to orodje shranijo v knjižnica— Ena ali več datotek, ki vsebujejo pogosto uporabljeno kodo za uporabo v različnih programih. Med ustvarjanjem programov prevajalnik ali orodje knjižnice dostopa do knjižnice, da na program poveže programsko kodo, na katero se sklicuje knjižnica programa.
Knjižnice so bistvenega pomena za Javo. Delno omogočajo nalagalniku razredov JVM, da poišče datoteke učil. (Naložnike razredov bom raziskal v prihodnjem članku.) Iz tega razloga so Javine knjižnice splošno znane kot razredne knjižnice. Vendar pa Java knjižnice razredov označuje kot paketov.
Ta članek raziskuje pakete; Pokazal vam bom, kako ustvariti pakete razredov in vmesnikov, kako uvoziti (torej vnesti v program) zapakirane razrede in vmesnike, kako premikati pakete na trdem disku in kako uporabljati datoteke jar za zapiranje paketov.
Opomba |
---|
Poskus z enim paketom v tem članku je specifičen za Microsoft Windows. Ta poskus bi lahko enostavno ekstrapolirali na platforme, ki niso Windows. |
Kaj so paketi?
A paket je zbirka razredov in vmesnikov. Vsak paket ima svoje ime in razvrsti svoje razrede in vmesnike na najvišji ravni (torej nesnestirane) v ločeno imenski prostor, ali zbirka imen. Čeprav se istoimenski razredi in vmesniki ne morejo pojaviti v istem paketu, se lahko pojavijo v različnih paketih, ker vsakemu paketu dodeli ločen imenski prostor.
Z vidika izvedbe se izenačenje paketa z imenikom izkaže za koristno, enako kot enačenje razredov in vmesnikov paketa z učnimi datotekami imenika. Upoštevajte druge pristope - na primer uporabo baz podatkov - pri izvajanju paketov, zato ne bodite v navadi, da pakete vedno enačite z imeniki. Ker pa številni JVM uporabljajo imenike za izvajanje paketov, ta članek enači pakete z imeniki. Java 2 SDK svojo obsežno zbirko razredov in vmesnikov organizira v drevesno hierarhijo paketov znotraj paketov, kar je enakovredno imenikom v imenikih. Ta hierarhija podjetju Sun Microsystems omogoča enostavno distribucijo (in z vami lahko enostavno delo) teh razredov in vmesnikov. Primeri paketov Java vključujejo:
java.lang:
Zbirka pouka, povezanega z jezikom, kot nprPredmet
inVrvica
, organizirano vjava
paketovlang
podpaketajava.lang.ref:
Zbirka jezikovnih tečajev, povezanih z referencami, kot soSoftReference
inReferenčna vrsta
, organizirano vref
podpaketjava
paketovlang
podpaketajavax.swing:
Zbirka razredov komponent, povezanih z Swingom, kot jeJButton
in vmesniki, kot soButtonModel
, organizirano vjavax
paketovgugalnica
podpaketa
Znaki obdobja ločujejo imena paketov. Na primer, v javax.swing
, znak točke ločuje ime paketa javax
iz imena podpaketa gugalnica
. Znak pike je od platforme neodvisen ekvivalent poševnice naprej (/
), znaki poševnice nazaj (\
) ali druge znake za ločevanje imen imenikov v izvedbi paketa, ki temelji na imeniku, vej baze podatkov v izvedbi paketa, ki temeljijo na hierarhični zbirki podatkov itd.
Nasvet |
---|
Tako kot datoteke in imenika z enakimi imeni ne morete shraniti v isti imenik, v isti paket ne morete shraniti razreda ali vmesnika in paketa z enakimi imeni. Na primer, podan paket z imenom računov , ne morete shraniti tako paketa kot razreda z imenom plačljivo v računov . Da bi se izognili nasprotujočim si imen, najprej črko imena razredov in vmesnikov vpišite z malimi črkami, prvo črko imen paketov pa z malimi črkami. V prejšnjem primeru shranite razred Plačljivo v paketu računov kot računi.Plačilno in paket plačljivo v paketu računov kot računi.plačljivo . Preberite več o tej in drugih konvencijah o poimenovanju pri Sun's Konvencije kode za programski jezik Java. |
Ustvarite paket razredov in vmesnikov
Razredi in vmesniki vsake izvorne datoteke se organizirajo v paket. V paket
odsotnosti direktive, ti razredi in vmesniki pripadajo neimenovanemu paketu (imenik, ki ga JVM obravnava kot trenutni imenik - imenik, kjer program Java začne izvajati prek sistema Windows java.exe
ali program, enakovreden OS - in ne vsebuje podpaketa). Če pa paket
direktiva se pojavi v izvorni datoteki, ki imenuje paket za te razrede in vmesnike. Za določitev a uporabite naslednjo sintakso paket
direktiva v izvorni kodi:
'paket' packageName [ '.' subpackageName ... ] ';'
A paket
direktiva se začne z paket
ključna beseda. Identifikator, ki poimenuje paket, packageName
, takoj sledi. Če naj se razredi in vmesniki pojavijo v podpaketu (na neki ravni) znotraj packageName
, eno ali več ločenih z obdobjem subpackageName
identifikatorji se pojavijo po packageName
. Naslednji fragment kode predstavlja par paket
direktive:
paketna igra; paketna igra.naprave;
Prvi paket
direktiva identificira paket z imenom igra
. Vsi razredi in vmesniki, ki se pojavljajo v izvorni datoteki te direktive, se organizirajo v igra
paket. Drugi paket
direktiva identificira podpaket z imenom naprav
, ki je v paketu z imenom igra
. Vsi razredi in vmesniki, ki se pojavljajo v izvorni datoteki te direktive, se organizirajo v igra
paketov naprav
podpaketa. Če izvedba JVM preslika imena imen v imena imenikov, game.devices
zemljevidi v a igre \ naprave
hierarhija imenikov v sistemih Windows in a igra / naprave
hierarhija imenikov pod Linuxom ali Solarisom.
Previdno |
---|
Samo en paket direktiva se lahko pojavi v izvorni datoteki. Poleg tega paket mora biti prva koda (razen komentarjev) v tej datoteki. Če kršite katero koli pravilo, prevajalnik Java prijavi napako. |
Za lažje razumevanje paketov sem pripravil primer, ki zajema vse teme v tem članku. V tem razdelku se naučite, kako ustvariti paket primera. V kasnejših razdelkih boste izvedeli, kako uvoziti razred in vmesnik iz tega paketa, kako ga premakniti na drugo mesto na trdem disku in še vedno dostopati do paketa iz programa ter kako shraniti paket v datoteko jar . Seznam 1 predstavlja izvorno kodo paketa:
Seznam 1. A.java
// paket A.java testpkg; javni razred A {int x = 1; javni int y = 2; zaščiten int z = 3; int returnx () {vrnitev x; } public int returny () {return y; } zaščiten int returnz () {return z; } javni vmesnik StartStop {void start (); void stop (); }} razred B {javna statična void hello () {System.out.println ("hello"); }}
Seznam 1 uvaja izvorno kodo v vaš prvi imenovani paket. The paket testpkg;
direktiva poimenuje ta paket testpkg
. Znotraj testpkg
so razredi A
in B
. Znotraj A
so tri deklaracije polj, tri deklaracije metode in deklaracija notranjega vmesnika. Znotraj B
je deklaracija z eno samo metodo. Celotna izvorna koda se shrani v A.java
Ker A
je javni razred. Naša naloga: To izvorno kodo spremenite v paket, ki je sestavljen iz dveh razredov in notranjega vmesnika (ali imenika, ki vsebuje tri datoteke razredov). Naslednji koraki, specifični za Windows, so izpolnjeni:
- Odprite ukazno okno sistema Windows in se prepričajte, da ste v
c:
korenski imenik pogona (glavni imenik - predstavljen z začetno poševnico nazaj (\
) znak). Če želite to narediti, vnesitec:
ukaz, ki mu sledicd \
ukaz. (Če uporabljate drug pogon, ga zamenjajtec:
z izbranim pogonom. Po vnosu ukaza ne pozabite pritisniti tipke Enter.) - Ustvariti
testpkg
imenik s tipkanjemmd testpkg
. Opomba: Ko sledite korakom tega članka, ne pišite pik za ukazi. - Znamka
testpkg
trenutni imenik s tipkanjemcd testpkg
. - Z urejevalnikom vnesite izvorno kodo na seznamu 1 in jo shranite v
A.java
vloži vtestpkg
. - Sestavi
A.java
s tipkanjemjavac A.java
. Morali bi videti datoteke učil$ StartStop.class
,Razred
, inB.razred
se pojavijo vtestpkg
imenik.
Slika 1 prikazuje korake od 3 do 5.
Čestitamo! Pravkar ste ustvarili svoj prvi paket. Mislite, da ta paket vsebuje dva razreda (A
in B
) in A
en sam notranji vmesnik (StartStop
). Ta paket si lahko predstavljate tudi kot imenik, ki vsebuje tri datoteke datotek: $ StartStop.class
, Razred
, in B.razred
.
Opomba |
---|
Da bi zmanjšali navzkrižja z imeni paketov (zlasti med komercialnimi paketi), je Sun vzpostavil konvencijo, v kateri internetno ime domene podjetja spremeni in predponi ime paketa. Na primer podjetje z x.com kot njegovo internetno domensko ime in a.b kot ime paketa (a ), ki mu sledi ime podpaketa (b ) predpone com.x do a.b , kaže v com.x.a.b . Moj članek ne sledi tej konvenciji, ker testpkg paket je metalec, namenjen samo poučevanju. |
Uvozite razrede in vmesnike paketa
Ko dobite paket, boste želeli iz tega paketa v svoj program uvoziti razrede in / ali vmesnike - pravzaprav imena razredov in / ali vmesnikov, da bo lahko uporabil te razrede in / ali vmesnike. Eden od načinov za izpolnitev te naloge je, da vnesete popolnoma kvalificirano ime paketa (ime paketa in vsa imena podpaketa) na vsakem mestu, kjer se pojavi ime referenčnega tipa (ime razreda ali vmesnika), kot prikazuje seznam 2:
Seznam 2. Usetestpkg1.java
// Razred Usetestpkg1.java Usetestpkg1 izvaja testpkg.A.StartStop {public static void main (String [] args) {testpkg.A a = new testpkg.A (); System.out.println (a.y); System.out.println (a.returny ()); Usetestpkg1 utp = novo Usetestpkg1 (); utp.start (); utp.stop (); } javni void start () {System.out.println ("Start"); } javni void stop () {System.out.println ("Stop"); }}
S predpono testpkg.
do A
, Usetestpkg1
dostopov testpkg
je razred A
na dveh mestih in A
notranji vmesnik StartStop
na enem mestu. Dokončajte naslednje korake za prevajanje in zagon Usetestpkg1
:
- Odprite ukazno okno sistema Windows in se prepričajte, da ste v
c:
korenski imenik pogona. - Zagotovite
učilnica
spremenljivka okolja z izvajanjem ne obstajanastavite classpath =
. (Razpravljamučilnica
kasneje v tem članku.) - Z urejevalnikom vnesite izvorno kodo na seznamu 2 in jo shranite v
Usetestpkg1.java
datoteko v korenskem imeniku. - Sestavi
Usetestpkg1.java
s tipkanjemjavac Usetestpkg1.java
. Videli bi datoteko predavanjUsetestpkg1.class
se prikažejo v korenskem imeniku. - Tip
java Usetestpkg1
za zagon tega programa.
Slika 2 prikazuje korake od 3 do 5 in prikazuje rezultate programa.
Po navedbah Usetestpkg1
je rezultat, glavni ()
nit metode uspešno dostopa testpkg.A
je y
polje in pokliče povratno ()
metoda. Poleg tega rezultati kažejo na uspešno izvajanje programa testpkg.A.StartStop
notranji vmesnik.
Za Usetestpkg1
, predpona testpkg.
do A
na treh mestih se ne zdi veliko. Kdo pa želi na sto mestih določiti predpono popolnega imena paketa? Na srečo Java dobavlja uvoz
direktivo za uvoz imen javnega referenčnega tipa paketa, zato vam ni treba vnašati popolnoma kvalificiranih predpon imen paketa. Izrazite uvoz
v izvorni kodi z naslednjo sintakso:
'uvoz' packageName [ '.' subpackageName ... ] '.' ( referencetypeName | '*' ) ';'
An uvoz
direktiva je sestavljena iz uvoz
ključni besedi, ki ji takoj sledi identifikator, ki poimenuje paket, packageName
. Neobvezen seznam subpackageName
identifikatorji sledijo za identifikacijo ustreznega podpaketa (če je potrebno). Direktiva se zaključi z a referencetypeName
identifikator, ki identificira določen razred ali vmesnik iz paketa ali zvezdico (*
) znak. Če referencetypeName
se zdi, da je direktiva a enojni tip uvoz
direktive. Če se pojavi znak z zvezdico, je direktiva a vrsta na zahtevo uvoz
direktive.
Previdno |
---|
Tako kot pri paket direktiva, uvoz direktive se morajo pojaviti pred katero koli drugo kodo, s tremi izjemami: a paket direktiva, drugo uvoz direktiv ali komentarjev. |
Enotni tip uvoz
direktiva uvozi ime enega samega javnega referenčnega tipa iz paketa, kot kaže naslednji fragment kode:
uvoz java.util.Date;
Prejšnji enojni tip uvoz
direktiva uvozi ime razreda Datum
v izvorno kodo. Kot rezultat določite Datum
namesto java.util.Date
na vsakem mestu se ime razreda prikaže v izvorni kodi. Na primer pri ustvarjanju datoteke Datum
predmet, navedite Datum d = nov datum ();
namesto java.util.Date d = novo java.util.Date ();
.
Vadite z enojnim tipom uvoz
direktiv. Če prevajalnik zazna enojni tip uvoz
Direktiva, ki določa ime referenčnega tipa, ki je prav tako navedeno v izvorni datoteki, prevajalnik sporoči napako, kot kaže naslednji fragment kode:
uvoz java.util.Date; datum predavanja {}
Prevajalnik obravnava fragment kode kot poskus uvedbe dveh referenčnih vrst z istim Datum
ime: