Če ste spremljali Java 101, veste, da je Jacob Weintraub ustvaril izvrstno serijo člankov, ki naj bi pomagali novincem Java, da postanejo razvijalci Java. Ker pa Jacob ne more več nadaljevati te kolumne, JavaWorld je predal baklo k meni.
Hitro boste odkrili, da moja pot do razvijalca Java sledi drugačni poti. Na primer, raje govorim o programskih vidikih Jave, ki niso objektno usmerjeni (kot so vrste, spremenljivke, operatorji, izrazi in stavki), preden se poglobim v njeno objektno usmerjeno stran. Verjamem, da se bo ta pristop še okrepil Java 101je naravni pretok iz ene teme v drugo - tok, ki se nemoteno premika od začetka do konca. Za lažjo razpravo bom občasno predstavil napreden koncept, preden ga popolnoma pojasnim. Posledično boste med tem in prihodnjimi članki naleteli na kratka pojasnila o naprednejših temah.
Java 101 bo predstavil veliko primerov programov. Vsak program je sestavljen s prevajalnikom Sun's Java 2 Platform, Standard Edition različice 1.4 (znan tudi kot SDK 1.4) in preizkušen na platformi Windows 98 SE. Čeprav se bom trudil, da bi bilo sklicev na Windows čim manj, to ne bo vedno mogoče, zato vas bom opozoril, ko članek zaide v svet sistema Windows.
Ker se z strežnikom z vidika strežnika nisem veliko ukvarjal z Javo, se bo ta stolpec osredotočil na odjemalsko Javo. To ne pomeni, da ne bomo raziskovali tem, kot sta Remote Method Invocation in JDBC, ki povezujejo stranko in strežnik. Vendar ne bom predstavil programčkov, Enterprise JavaBeans, Java Server Pages in drugih tem na strani strežnika. Za boljšo predstavo o temah, ki jih bom obravnaval, glejte stransko vrstico, The Road Ahead, za Java 101 oris tečaja.
V tem mesečnem članku obravnavam strukturo aplikacijskih, apletnih in hibridnih programov. Z vidika aplikacije boste morda našli nekaj prekrivanja iz prejšnjih člankov Jacoba, vendar bom predstavil tudi kar nekaj novih vsebin.
Kategorije programov
Java vam omogoča, da ustvarite štiri vrste programov: aplikacije, programčke, hibride in servlete. V tem članku obravnavam prve tri programe. Če želite izvedeti več o strežniških programčkih, glejte dokumentacijo platforme Java 2, Enterprise Edition.
Aplikacije
An aplikacijo je samostojni program, sestavljen iz vsaj enega razreda z a glavni ()
metoda. Ta metoda ima naslednji podpis:
javna statična void main (String [] args)
The javnosti
ključna beseda pomeni glavni ()
je mogoče poklicati zunaj razreda, v katerem je prijavljen. The statično
ključna beseda pomeni glavni ()
je mogoče poklicati brez reference predmeta. Z drugimi besedami, JVM ni treba ustvariti predmeta iz razreda, ki ga prijavi glavni ()
pred klicem glavni ()
. Končno, praznino
ključna beseda pomeni glavni ()
ne vrne vrednosti.
Kot pri drugih metodah glavni ()
ima seznam parametrov, seznam vrst in imen spremenljivk. V glavni ()
V primeru se prikaže samo en parameter - argume
. Ta parameter je razglašen za sklic na - znan tudi kot naslov - polja Vrvica
predmetov. Vsak objekt vsebuje vsebino argumenta, ki se aplikaciji posreduje z ukazno vrstico programa. Opomba: Ni vam treba uporabljati argume
kot ime tega parametra. Prav tako lahko preprosto določite piščanci
, kot v String [] piščanci
.
Seznam 1 predstavlja izvorno kodo za aplikacijo z imenom App
. Ta aplikacija izpiše seznam argumentov, ki so ji posredovani prek ukazne vrstice.
Seznam 1. App.java
// razred App.java App {public static void main (String [] args) {System.out.println ("Argumenti ukaza \ n"); for (int i = 0; i <args.length; i ++) System.out.println (args [i]); }}
BESEDILO:
TEXTBOX_HEAD: Komentarji
Seznam 1 prikazuje tehniko, ki jo uporabljam za prepoznavanje programov - na vrh izvorne datoteke postavim komentar, ki identificira ime izvorne datoteke. Ta komentar se mi zdi koristen pri sledenju programov. Če koncepta komentarja ne poznate, ni nič drugega kot dokumentacija izvorne kode, ki ima pomen le na izvorni ravni. Ko je izvorna koda sestavljena, je komentar zavržen. Pripombe si bomo ogledali naslednji mesec.
: END_TEXTBOX
Koda znotraj App
je glavni ()
metoda pokliče enega od ven
referenčna spremenljivka predmeta println ()
metode za izpis informacij na standardno izhodno napravo. Običajno je ta naprava ukazno okno, kot je okno Microsoft Windows DOS, čeprav jo je mogoče preusmeriti v datoteko. (To preusmeritev bom prikazal v naslednjem članku.) Znak za piko ločuje println ()
klic metode iz ven
referenčna spremenljivka predmeta. Po drugi strani pa ven
je razglašen v razredu z imenom Sistem
in ločena od Sistem
s piko. Referenčna spremenljivka predmeta je zelo podobna kazalcu C ali C ++: To je spremenljivka, ki vsebuje naslov druge spremenljivke. V prihodnjih člankih boste deležni precej izpostavljenosti referenčnim spremenljivkam predmetov.
Če ste delali s C ali C ++, verjetno poznate strukturo stavka zanke for (ki se v izvorni kodi prikaže prek ključne besede za
). Stavek zanke for ponavljajoče izvaja enega ali več stavkov bodisi določeno število krat ali za nedoločen čas. (V prihodnjih člankih bom podrobno preučil izjavo for in druge izjave.) App
primer, za
izvrši a System.out.println
klic metode za vsak argument, ki je bil v ukazni vrstici poslan temu programu. Opaziti args.length
. V Javi dolžina
je lastnost matrike in vrne število elementov matrike.
V ukazno vrstico vnesite javac App.java
sestaviti App
. Če ste vnesli vse, kot je prikazano, se vam na koncu prikaže datoteka predavanja Aplikacijski razred
ki vsebuje App
navodila za bajtno kodo. Torej, kako teči App
? Oglejte si sliko 1. Ta slika prikazuje App
zagon iz ukazne vrstice s tremi argumenti: eno
, dva
, in tri
.
Opomba: Slika 1 prikazuje App
teče pod Windows 98 SE. Unix in Linux delujeta App
podobno. Ko pa tečete pod Macom, boste verjetno morali opraviti še nekaj dela. Rad bi vam pokazal, kako to narediti, toda Jave nisem nikoli uporabljal na Macu.
The java
program zažene aplikacijo. V sistemu Windows je ta program shranjen v izvršljivi datoteki, imenovani java.exe
. Kot z javac
, java
je določeno v ukazni vrstici. Ime datoteke razreda, ki vsebuje glavni ()
potem sledi metoda java
.
The java
program išče glavni ()
v datoteki razreda. Če ne najde glavni ()
, prikaže sporočilo o napaki. (Kot lahko vidite s slike 1, vi NE določite .razred
končnico datoteke.)
Argumenti lahko sledijo imenu razreda, vendar niso obvezni. Na sliki 1 so ti argumenti eno
, dva
, in tri
. java
ustvari a Vrvica
array (prek Java Native Interface - JNI) in zapolni vsak element s sklicem na Vrvica
objekt, ki vsebuje znake, ki sestavljajo argument. Ko je končan, glavni ()
metoda se pokliče (prek JNI) in posreduje sklic na Vrvica
matriko.
Recimo, da bi morali tipkati java app *
v ukazni vrstici. Kaj mislite, da bi se prikazalo ukazno okno? Če menite, da je odgovor zvezdica, si oglejte sliko 2.
Slika 2 prikazuje App
prikaz imen datotek v istem imeniku kot Aplikacijski razred
. Izkazalo se je, da zvezdica predstavlja nadomestni znak. Z drugimi besedami, predstavlja vsa imena datotek v trenutnem imeniku. Kdaj java
gradi Vrvica
array pridobi seznam vseh imen datotek trenutnega imenika in vsako ime datoteke postavi v ločeno Vrvica
objekt, ki se nato shrani kot element v matriki.
Poskusite teči java app * *
. Ugani, kaj bo prikazano. Ker vsaka zvezdica povzroča java
če želite dobiti seznam vseh imen datotek, boste v trenutnem imeniku videli dve kopiji vseh imen datotek.
Recimo, da napišete a Kalkulator
aplikacija, ki pomnoži dve številki z zvezdico, kot v java kalkulator 4 * 3
. Glede na prejšnjo razpravo se 4 in 3 ne bosta pomnožila. Če želite, da bi zvezdico razlagali kot samo sebe - in ne nadomestnega znaka - jo morate obkrožiti s parom dvojnih narekovajev. Na primer, bi vtipkali java kalkulator 4 "*" 3
. Če vaš argument vsebuje vdelane presledke in jih želite vključiti kot del argumenta, morate uporabiti dvojne narekovaje. Na primer, vnesite java app "moj sestavljeni argument"
v ukazni vrstici, da določite moj sestavljeni argument
kot App
en sam argument.
Naša prva aplikacija Java je bila sestavljena iz enega razreda. Lahko pa ustvarite tudi aplikacije, ki so sestavljene iz več razredov. Poleg tega ima lahko vsak razred svojega glavni ()
metoda. Če želite videti, kako je ta situacija, si oglejte seznam 2.
Seznam 2. Fred.java
// Fred.java razred A {javni statični void main (String [] psi) {System.out.println ("metoda razreda A (main ()"); }} razred B {javna statična void main (String [] piščanci) {System.out.println ("metoda razreda B main ()"); System.out.println ("Število argumentov:" + piščanci.dolžina); }}
Seznam 2 predstavlja izvorno kodo, shranjeno v datoteki z imenom Fred.java
. Ta izvorna koda je sestavljena iz dveh razredov: A
in B
. Ko je sestavljen (kot v javac Fred.java
), na koncu dobite dve datoteki razreda: Razred
in B.razred
. Če bi tipkali java A
, bi videli Glavna metoda razreda A
v ukaznem oknu. Če pa bi morali tipkati java B
, bi se prikazalo ukazno okno Glavna metoda razreda B
, čemur sledi vrstica, ki se začne z Število argumentov:
in določa število argumentov, posredovanih v ukazni vrstici.
Je Fred
ena ali dve aplikaciji? Odgovor je odvisen od vaše perspektive. Običajno je aplikacija sestavljena iz enega razreda z glavni ()
metoda. Kot ste videli, zaženete aplikacijo z navedbo java
in ime razreda, ki vsebuje glavni ()
. Lahko pa se znajdete, da postavite glavni ()
metoda v drugih razredih (za odpravljanje napak). Če želite preprečiti zmedo za uporabnike vašega programa, odstranite vse glavni ()
metode, razen glavni ()
metoda, ki zažene aplikacijo, ali identificirajte datoteko razreda, ki vsebuje uradnika glavni ()
pred uvedbo aplikacije.
Poleg java
, Java 2 SDK vključuje javaw
program, ki ga lahko uporabite za zagon aplikacij. Ta program je skoraj enak java
, razen tega javaw
med izvajanjem aplikacije ne prikaže ukaznega okna (razen če ga zaženete prek paketne datoteke sistema Windows, ki samodejno odpre ukazno okno). Recimo na primer, da je poklicana vaša datoteka predavanja GUIDemo
je shranjena v c: \ jdk1.4 \ projekti
imenik (ob predpostavki Windows). Odločite se, da ustvarite bližnjico Windows za zagon tega programa in izberete naslednjo ukazno vrstico: java -cp c: \ jdk1.4 \ projects GUIDemo
. (The -cp
možnost pove java
kje najti datoteko razreda, imenovano GUIDemo.class
.) Ko izberete bližnjico, se prikaže tudi ukazno okno GUIDemo
je okno GUI. Če pa se spremenite java
do javaw
, ne boste videli ukaznega okna.
Zdaj, ko ste se imeli priložnost igrati z aplikacijami, si oglejmo še drugo kategorijo programov Java - apleti.
Apleti
An aplet je aplikacija, ki deluje v okviru spletnega brskalnika, ki nadzoruje programček. Ker pravokotno območje spletne strani prikazuje izhodni programček, so apleti opisani kot vdelani v spletne strani. Poleg tega brskalnik s klicem nekaterih metod - ki jih bomo kmalu raziskali - upravlja življenjski cikel programčka.
Datoteke razreda programčka se samodejno prenesejo v uporabnikov računalnik, ko uporabnik brska po spletni strani, ki vsebuje programček. Po prenosu navidezni stroj brskalnika ali programska oprema Java Plug-in izvrši te datoteke razredov. (Glejte članek o člankih, ki raziskujejo vtičnik Java.)
Predstavljajte si zlonamerno osebo, ki ustvari programček, ki izbriše datoteke, zapravlja gomile papirja za tiskalnik, krade gesla ali druge občutljive podatke itd. Applet z neomejenim dostopom do uporabnikovega računalnika lahko izvede vse te napake. Iz tega razloga lahko apleti izvajajo le omejene funkcije. Applet na primer ne more izvajati nobenih dejavnosti, povezanih z datotekami.
Sun je vzpostavil poseben (in vključen) postopek za spreminjanje omejenih apletov v neomejene aplete. Neomejeni programčki pa se lahko izvajajo le z dovoljenjem uporabnika. (To temo bomo raziskali v prihodnjem članku.) Če želite biti programček, mora biti en - in samo en - razred programov v skladu z naslednjim vzorcem:
javni razred ime_razreda razširi java.applet.Applet {}
Zahtevano javnosti
ključna beseda omogoča spletnemu brskalniku dostop do programčka. The podaljša
Ključna beseda označuje objektno usmerjen programski koncept dedovanja in predlaga, da ime_razreda
class podeduje zmožnosti programčka od razreda z imenom Applet
(ki se nahaja v java.applet
paket - organizacijski mehanizem za razrede in datoteke razredov - ki ga bomo raziskali v prihodnjem članku).
Vsak programček ima življenjski cikel. Applet se inicializira (enkrat in samo enkrat), zažene in ustavi (enkrat ali večkrat v življenju) in uniči (enkrat in samo enkrat). Brskalnik na pomembnih točkah v tem življenjskem ciklu pokliče enega od štirih načinov, ki kaže, da je programček prešel v drugo fazo obstoja. Te metode so v()
, začetek ()
, stop ()
, in uničiti ()
.