Programmēšana

Java 101: paketes organizē klases un saskarnes

Kāpēc vajadzētu izgudrot riteni no jauna? Šī klišeja attiecas uz programmatūras izstrādi, kur daži izstrādātāji bieži pārraksta vienu un to pašu kodu dažādām programmām. Divi šīs pieejas trūkumi ir:

  1. Tas tērē laiku
  2. Tas ievieš kļūdu iespējamību atkļūdotajā kodā

Kā alternatīva tā paša koda pārrakstīšanai daudzās programmatūras izstrādes vidēs tiek nodrošināts bibliotēkas rīks, kas organizē bieži izmantoto kodu. Kad izstrādātāji pabeidz atkļūdot kādu atkārtoti lietojamu kodu, viņi izmanto rīku, lai šo kodu saglabātu bibliotēka- viens vai vairāki faili, kuros ir bieži izmantots kods, lai tos varētu izmantot dažādās programmās. Programmas veidošanas laikā kompilators vai bibliotēkas rīks piekļūst bibliotēkai, lai savienotu programmas bibliotēkas kodu ar programmu.

Bibliotēkas ir Java pamatā. Tie daļēji ļauj JVM klases ielādētājam atrast klases failus. (Nākamajā rakstā es izpētīšu klasesbraucējus.) Šī iemesla dēļ Java bibliotēkas ir plaši pazīstamas kā klašu bibliotēkas. Tomēr Java atsaucas uz klases bibliotēkām kā iepakojumiem.

Šis raksts pēta paketes; Es jums parādīšu, kā izveidot klašu un saskarņu paketes, kā importēt (tas ir, ievest programmā) iepakotas klases un saskarnes, kā pārvietot paketes uz cietā diska un kā izmantot jar failus paku iekapsulēšanai.

Piezīme
Šī raksta vienas paketes eksperiments ir paredzēts Microsoft Windows. Jums vajadzētu būt iespējai šo eksperimentu viegli ekstrapolēt platformām, kas nav Windows operētājsistēmas.

Kas ir paketes?

A iepakojums ir klašu un saskarņu kolekcija. Katrai pakotnei ir savs nosaukums, un tā organizē savas augstākā līmeņa (tas ir, nesaistītas) klases un saskarnes atsevišķā nosaukumvieta, vai vārdu kolekcija. Kaut arī viena nosaukuma klases un saskarnes nevar parādīties vienā paketē, tās var parādīties dažādos paketēs, jo katrai pakotnei tiek piešķirta atsevišķa nosaukumvieta.

No ieviešanas viedokļa paketes pielīdzināšana direktorijai ir noderīga, tāpat kā paketes klašu un saskarņu pielīdzināšana direktorija klases failiem. Paturiet prātā citas pieejas - piemēram, datu bāzu izmantošanu - pakotņu ieviešanai, tāpēc nepieradiniet paketes vienmēr pielīdzināt direktorijiem. Bet, tā kā daudzi JVM pakotņu ieviešanai izmanto direktorijus, šajā rakstā paketes tiek pielīdzinātas direktorijiem. Java 2 SDK organizē savu plašo klašu un saskarņu kolekciju kokveidīgā pakotņu paku hierarhijā, kas ir līdzvērtīga direktorijiem direktorijos. Šī hierarhija ļauj Sun Microsystems viegli izplatīt (un ar jums viegli strādāt) šīs klases un saskarnes. Java pakotņu piemēri:

  • java.lang: Ar valodu saistītu nodarbību kolekcija, piemēram Objekts un Stīga, kas organizēta java paketes lang pakete
  • java.lang.ref: Ar atsaucēm saistītu valodu nodarbību kolekcija, piemēram SoftReference un ReferenceQueue, kas organizēta atsauce apakšpakete java paketes lang pakete
  • javax.swing: Ar Swing saistīto komponentu klašu kolekcija, piemēram, JPogaun saskarnes, piemēram, PogaModelis, kas organizēta javax paketes šūpoles pakete

Perioda rakstzīmes atdala pakotņu nosaukumus. Piemēram, javax.swing, perioda rakstzīme atdala pakotnes nosaukumu javax no pakas nosaukuma šūpoles. Perioda raksturs ir no platformas neatkarīgs slīpsvītras rakstzīmju ekvivalents (/), slīpsvītras rakstzīmes (\), vai citas rakstzīmes, lai atdalītu direktoriju nosaukumus direktoriju pakotnes ieviešanā, datu bāzes filiāles hierarhiskā datubāzē balstītu pakotņu ieviešanā utt.

Padoms
Tāpat kā vienā direktorijā nevar glabāt gan failu, gan direktoriju ar identiskiem nosaukumiem, vienā paketē nevar glabāt klasi vai saskarni un paketi ar identiskiem nosaukumiem. Piemēram, ņemot vērā paketi ar nosaukumu kontiem, jūs nevarat uzglabāt gan paketi, gan klasi ar nosaukumu maksājams iekšā kontiem. Lai izvairītos no konfliktējošiem nosaukumiem, lielajiem burtiem piešķiriet klases un saskarnes nosaukumu pirmo burtu, bet pakotņu nosaukumiem - pirmo burtu. Izmantojot iepriekšējo piemēru, veikala klase Maksājams iepakojumā kontiemkonti. Maksājams un iesaiņojums maksājams iepakojumā kontiemkonti.maksājams. Uzziniet vairāk par šo un citiem nosaukuma veidošanas veidiem no Sun's Kodu konvencijas Java programmēšanas valodai.

Izveidojiet klašu un saskarņu paketi

Katra avota faila klases un saskarnes tiek sakārtotas paketē. Iekš iepakojums direktīvas neesamības gadījumā šīs klases un saskarnes pieder nenosauktajai paketei (direktorijam, kuru JVM uzskata par pašreizējo direktoriju - direktoriju, kurā Java programma sāk izpildīt, izmantojot Windows java.exevai OS ekvivalenta programma - un tajā nav apakšpaku). Bet, ja iepakojums direktīva parādās avota failā, šī direktīva nosauc paketi šīm klasēm un saskarnēm. Izmantojiet šo sintaksi, lai norādītu a iepakojums direktīva pirmkodā:

'pakete' packageName [ '.' subpackageName ... ] ';' 

A iepakojums direktīva sākas ar iepakojums atslēgvārds. Identifikators, kas nosauc paketi, packageName, tūlīt seko. Ja klasēm un saskarnēm jāparādās apakšpaketē (kādā līmenī) packageName, viens vai vairāki periodiski atdalīti subpackageName identifikatori parādās pēc packageName. Šis koda fragments parāda pāris iepakojums direktīvas:

kompleksa spēle; pakešu spēle.ierīces; 

Pirmais iepakojums direktīva identificē paketi ar nosaukumu spēle. Visas klases un saskarnes, kas parādās šīs direktīvas avota failā, tiek sakārtotas spēle iepakojums. Otrais iepakojums direktīva identificē apakškopu ar nosaukumu ierīces, kas atrodas iepakojumā ar nosaukumu spēle. Visas klases un saskarnes, kas parādās šīs direktīvas avota failā, tiek sakārtotas spēle paketes ierīces pakete. Ja JVM ieviešana pakotņu nosaukumus kartē direktoriju nosaukumos, spēle. ierīces kartes uz a spēle \ ierīces direktoriju hierarhija zem Windows un a spēle / ierīces direktoriju hierarhija zem Linux vai Solaris.

Uzmanību
Tikai viens iepakojums direktīva var parādīties avota failā. Turklāt iepakojums direktīvai jābūt pirmajam kodam (izņemot komentārus) šajā failā. Pārkāpjot jebkuru kārtulu, Java kompilators ziņo par kļūdu.

Lai palīdzētu jums ērtāk izmantot pakas, esmu sagatavojis piemēru, kas aptver visas šī raksta tēmas. Šajā sadaļā jūs uzzināsiet, kā izveidot piemēra pakotni. Nākamajās sadaļās jūs uzzināsiet, kā importēt klasi un saskarni no šīs pakotnes, kā pārvietot šo pakotni uz citu vietu jūsu cietajā diskā un joprojām piekļūt pakotnei no programmas, kā arī glabāt paketi burka failā. . 1. saraksts parāda pakotnes pirmkodu:

Uzskaitīšana 1. A.java

// A.java pakete testpkg; sabiedrības klase A {int x = 1; publiskais int y = 2; aizsargāta int z = 3; int returnx () {atgriezties x; } public int returny () {atgriezties y; } aizsargāts int returnz () {return z; } publiskā saskarne StartStop {void start (); void stop (); }} B klase {public static void hello () {System.out.println ("labdien"); }} 

1. saraksts ievada avota kodu jūsu pirmajai nosauktajai pakotnei. The pakete testpkg; direktīva nosauc šo paketi testpkg. Iekšpusē testpkg ir klases A un B. Iekšpusē A ir trīs lauka deklarācijas, trīs metožu deklarācijas un iekšējās saskarnes deklarācija. Iekšpusē B ir vienas metodes deklarācija. Viss avota kods tiek glabāts A.java jo A ir publiska klase. Mūsu uzdevums: Pārvērtiet šo pirmkodu paketē, kas sastāv no divām klasēm un iekšējā interfeisa (vai direktorijā, kurā ir trīs klases faili). Šo uzdevumu izpilda šādas Windows specifiskas darbības:

  1. Atveriet Windows komandu logu un pārliecinieties, vai atrodaties c: diska saknes direktoriju (galveno direktoriju - attēlo sākotnējā slīpsvītra (\) raksturs). Lai to izdarītu, ierakstiet c: komandu, kam seko CD \ komandu. (Ja izmantojat citu disku, nomainiet c: ar izvēlēto disku. Pēc komandas ierakstīšanas neaizmirstiet nospiest taustiņu Enter.)
  2. Izveidojiet a testpkg direktoriju, ierakstot md testpkg. Piezīme: Veicot šī raksta darbības, pēc komandām nerakstiet punktus.
  3. Veidot testpkg pašreizējo direktoriju, ierakstot cd testpkg.
  4. Izmantojiet redaktoru, lai ievadītu 1. saraksta avota kodu un saglabātu šo kodu A.java failu testpkg.
  5. Sastādīt A.java ierakstot javac A.java. Jums vajadzētu redzēt klases failus $ StartStop.class, Klase, un B.klase parādās testpkg direktorijā.

1. attēlā parādīti 3. līdz 5. solis.

Apsveicam! Jūs tikko izveidojāt savu pirmo paketi. Padomājiet, ka šī pakete satur divas klases (A un B) un Avienotā iekšējā saskarne (StartStop). Jūs varat arī domāt par šo paketi kā direktoriju, kurā ir trīs klases faili: $ StartStop.class, Klase, un B.klase.

Piezīme
Lai mazinātu pakotņu nosaukumu konfliktus (īpaši starp komerciālajām paketēm), Sun ir izveidojis konvenciju, kurā uzņēmuma interneta domēna nosaukums maina un prefiksē pakotnes nosaukumu. Piemēram, uzņēmums ar x.com kā interneta domēna nosaukumu un a.b kā paketes nosaukumu (a), kam seko apakšpakas nosaukums (b) prefiksi com.x uz a.b, kā rezultātā com.x.a.b. Mans raksts neatbilst šai konvencijai, jo testpkg pakete ir izmetama, kas paredzēta tikai mācību vajadzībām.

Importējiet paketes klases un saskarnes

Kad jums ir pakete, jūs vēlaties importēt klases un / vai saskarnes - faktiski klases un / vai saskarnes nosaukumus - no šīs paketes uz savu programmu, lai tā varētu izmantot šīs klases un / vai saskarnes. Viens no veidiem, kā izpildīt šo uzdevumu, ir piegādāt pilnīgi kvalificētu pakotnes nosaukumu (paketes nosaukumu un visus apakšpaku nosaukumus) katrā vietā, kur parādās atsauces tipa nosaukums (klases vai saskarnes nosaukums), kā parāda 2. saraksts:

Uzskaitīšana 2. Usetestpkg1.java

// Usetestpkg1.java klase Usetestpkg1 ievieš 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 = jauns Usetestpkg1 (); utp.start (); utp.stop (); } public void start () {System.out.println ("Sākt"); } public void stop () {System.out.println ("Stop"); }} 

Ar prefiksu testpkg. uz A, Izmantotpkg1 piekļuves testpkgklases A divās vietās un Aiekšējā saskarne StartStop vienā vietā. Veiciet šīs darbības, lai apkopotu un palaistu Izmantotpkg1:

  1. Atveriet Windows komandu logu un pārliecinieties, vai atrodaties c: diska saknes direktorijā.
  2. Nodrošiniet klases ceļš vides mainīgais nepastāv, izpildot iestatīt klases ceļu =. (Es apspriežos klases ceļš vēlāk šajā rakstā.)
  3. Izmantojiet redaktoru, lai ievadītu 2. saraksta avota kodu un saglabātu šo kodu a Izmantotpkg1.java failu saknes direktorijā.
  4. Sastādīt Izmantotpkg1.java ierakstot javac Usetestpkg1.java. Jums vajadzētu redzēt klases failu Izmantojietpkg1.class parādās saknes direktorijā.
  5. Tips java Usetestpkg1 lai palaistu šo programmu.

2. attēlā parādīti 3. līdz 5. solis un parādīti programmas rezultāti.

Pēc Izmantotpkg1produkcija, galvenais () metodes pavediens veiksmīgi piekļūst testpkg.A's y laukā un izsauc returny () metodi. Turklāt rezultāts parāda veiksmīgu programmas ieviešanu testpkg.A.StartStop iekšējā saskarne.

Priekš Izmantotpkg1, prefiksu testpkg. uz A trīs vietās nešķiet liels darījums. Bet kurš vēlas simt vietās norādīt pilnībā kvalificētu pakotnes nosaukuma prefiksu? Par laimi Java piegādā importēt direktīva pakotnes publiskā (-o) atsauces tipa nosaukuma (-u) importēšanai, tāpēc jums nav jāievada pilnībā kvalificēti pakotnes nosaukuma prefiksi. Izteikt an importēt direktīva pirmkodā, izmantojot šādu sintaksi:

"imports" packageName [ '.' subpackageName ... ] '.' ( referencetypeName | '*' ) ';' 

An importēt Direktīva sastāv no importēt atslēgvārds, kam seko identifikators, kas nosauc paketi, packageName. Neobligāts saraksts ar subpackageName seko identifikatori, lai identificētu atbilstošo apakšpaketi (ja nepieciešams). Direktīvu noslēdz vai nu ar a referencetypeName identifikators, kas identificē konkrētu klasi vai saskarni no pakotnes, vai zvaigznīte (*) raksturs. Ja referencetypeName parādās, direktīva ir a viena veida importēt direktīvu. Ja parādās zvaigznīte, direktīva ir a tips pēc pieprasījuma importēt direktīvu.

Uzmanību
Tāpat kā ar iepakojums direktīva, importēt direktīvām jāparādās pirms jebkura cita kodeksa, izņemot trīs izņēmumus: a iepakojums direktīva, cita importēt direktīvām vai komentāriem.

Viena veida importēt direktīva no pakotnes importē viena publiska atsauces veida nosaukumu, kā parāda šāds koda fragments:

importēt java.util.Date; 

Iepriekšējais viena veida importēt direktīva importē klases nosaukumu Datums kodā. Rezultātā jūs norādāt Datums tā vietā java.util.Datums katrā vietā šīs klases nosaukums parādās avota kodā. Piemēram, veidojot Datums objektu, norādiet Datums d = jauns datums (); tā vietā java.util.Date d = jauns java.util.Date ();.

Veiciet piesardzību ar viena veida importēt direktīvām. Ja kompilators konstatē viena tipa importēt direktīva, kurā norādīts atsauces tipa nosaukums, kas deklarēts arī avota failā, sastādītājs ziņo par kļūdu, kā parāda šāds koda fragments:

importēt java.util.Date; klases datums {} 

Sastādītājs uzskata koda fragmentu kā mēģinājumu ieviest divus atsauces tipus ar vienādu Datums nosaukums:

$config[zx-auto] not found$config[zx-overlay] not found