Hvis du har fulgt med Java 101, du ved, at Jacob Weintraub har oprettet en fremragende serie af artikler designet til at hjælpe Java nybegyndere med at blive Java-udviklere. Da Jacob ikke længere kan fortsætte denne kolonne, JavaWorld har sendt fakkelen til mig.
Du vil hurtigt opdage, at min rute til at blive Java-udvikler følger en anden vej. For eksempel foretrækker jeg at tale om programmeringsaspekterne af Java, der ikke er objektorienterede (såsom typer, variabler, operatorer, udtryk og udsagn), før jeg går ned i dens objektorienterede side. Jeg tror, at denne tilgang vil blive bedre Java 101's naturlige strøm fra et emne til et andet - en strøm, der problemfrit bevæger sig fra start til slut. For at lette diskussionen vil jeg lejlighedsvis præsentere et avanceret koncept, før jeg fuldt ud forklarer det. Som et resultat vil du støde på korte forklaringer om mere avancerede emner, når du arbejder dig igennem denne og fremtidige artikler.
Java 101 vil introducere mange eksempler på programmer. Hvert program er kompileret med Suns Java 2 Platform, Standard Edition version 1.4 (også kendt som SDK 1.4) kompilator og testet på Windows 98 SE-platformen. Selvom jeg forsøger at holde Windows-referencer til et minimum, er det ikke altid muligt, så jeg advarer dig, når en artikel kommer ind i Windows-verdenen.
Fordi jeg ikke har brugt meget tid på at beskæftige mig med Java fra serverperspektivet, vil denne kolonne fokusere på Java på klientsiden. Det betyder ikke, at vi ikke vil udforske emner som Remote Method Invocation og JDBC, der bygger bro mellem klienten og serveren. Jeg vil dog ikke præsentere servlets, Enterprise JavaBeans, Java Server Pages og andre emner på serversiden. For at få en bedre idé om de emner, jeg vil dække, se sidebjælken, Vejen fremad, for Java 101 kursusoversigt.
I denne måneds artikel diskuterer jeg strukturen i applikation, applet og hybridprogrammer. Fra et applikationsperspektiv finder du muligvis en vis overlapning fra Jacobs tidligere artikler, men jeg vil også introducere en hel del nyt indhold.
Programkategorier
Java giver dig mulighed for at oprette fire slags programmer: applikationer, applets, hybrider og servlets. Jeg diskuterer de første tre programmer i denne artikel. For at lære mere om servlets, bedes du se dokumentationen til Java 2 Platform, Enterprise Edition.
Ansøgninger
En Ansøgning er et selvstændigt program bestående af mindst en klasse med en hoved ()
metode. Denne metode indeholder følgende signatur:
offentlig statisk ugyldig hoved (String [] args)
Det offentlig
nøgleord betyder hoved ()
kan kaldes uden for den klasse, hvori det er erklæret. Det statisk
nøgleord betyder hoved ()
kan kaldes uden en objektreference. Med andre ord behøver JVM ikke at oprette et objekt fra den klasse, der erklærer hoved ()
inden du ringer hoved ()
. Endelig blev ugyldig
nøgleord betyder hoved ()
returnerer ikke en værdi.
Som med andre metoder, hoved ()
har en parameterliste, en liste over typer og variabelnavne. I hoved ()
i tilfælde, vises kun en parameter - argumenterer
. Denne parameter erklæres en henvisning til - også kendt som adresse på - en matrix af Snor
genstande. Hvert objekt indeholder indholdet af et argument, der sendes til applikationen ved hjælp af programmets kommandolinje. Bemærk: Du behøver ikke bruge argumenterer
som parameterens navn. Du kan lige så nemt angive kyllinger
, som i String [] kyllinger
.
Fortegnelse 1 viser kildekoden til et kaldet program App
. Denne applikation udskriver en liste med argumenter, der sendes til sig selv ved hjælp af kommandolinjen.
Notering 1. App.java
// App.java klasse App {public static void main (String [] args) {System.out.println ("Kommando argumenter \ n"); for (int i = 0; i <args.length; i ++) System.out.println (args [i]); }}
TEKSTBOKS:
TEXTBOX_HEAD: Kommentarer
Liste 1 illustrerer en teknik, som jeg bruger til at identificere programmer - øverst i en kildefil placerer jeg en kommentar, der identificerer kildefilens navn. Jeg finder den kommentar nyttig til at holde styr på programmer. Hvis du ikke er bekendt med begrebet kommentar, er det intet andet end kildekodedokumentation, der kun har betydning på kildeniveau. Når kildekoden er kompileret, smides kommentaren væk. Vi ser på kommentarer igen næste måned.
: END_TEXTBOX
Kode indenfor App
's hoved ()
metode kalder en af ud
objektreferencevariabler println ()
metoder til at sende information til standardoutputenheden. Enheden er typisk et kommandovindue såsom Microsoft Windows DOS-vindue, selvom enheden kan omdirigeres til en fil. (Jeg vil demonstrere, at omdirigering i en efterfølgende artikel.) Perioden karakter adskiller println ()
metodeopkald fra ud
objektreferencevariabel. På tur, ud
erklæres i en klasse kaldet System
og adskilt fra System
af en periode karakter. En objektreferencevariabel ligner meget en C- eller C ++ -peger: Det er en variabel, der indeholder adressen på en anden variabel. Du får en hel del eksponering for objektreferencevariabler i kommende artikler.
Hvis du har arbejdet med C eller C ++, er du sandsynligvis bekendt med strukturen i for loop-sætningen (der vises i kildekoden via nøgleord til
). For-loop-sætningen udfører gentagne gange et eller flere udsagn enten et bestemt antal gange eller på ubestemt tid. (I fremtidige artikler vil jeg undersøge for-loop-erklæringen og andre udsagn i detaljer.) I App
sagen, til
udfører en System.out.println
metode kald for hvert argument, der blev sendt til det pågældende program på kommandolinjen. Varsel args.længde
. I Java, længde
er en egenskab for en matrix, og den returnerer et antal matrixelementer.
Skriv på kommandolinjen javac App.java
at kompilere App
. Hvis du har indtastet alt som vist, skal du ende med en klassefil kaldet App. Klasse
der indeholder App
s byte kode instruktioner. Så hvordan løber du App
? Se på figur 1. Denne figur viser App
kører fra kommandolinjen med tre argumenter: en
, to
og tre
.
Bemærk: Figur 1 viser App
kører under Windows 98 SE. Unix og Linux kører App
på samme måde. Men når du kører under Mac, bliver du sandsynligvis nødt til at udføre lidt mere arbejde. Jeg vil meget gerne vise dig, hvordan du gør det, men jeg har aldrig brugt Java på en Mac.
Det java
programmet udfører en applikation. Under Windows er dette program gemt i en eksekverbar fil, der hedder java.exe
. Som med javac
, java
er angivet på kommandolinjen. Navnet på klassefilen, der indeholder hoved ()
metoden følger derefter java
.
Det java
programmet kigger efter hoved ()
metode i klassefilen. Hvis den ikke finder hoved ()
, udsender den en fejlmeddelelse. (Som du kan se fra figur 1, kan du IKKE angive .klasse
filtypenavn.)
Argumenter kan følge klassens navn, men de er valgfri. I figur 1 er disse argumenter en
, to
og tre
. java
skaber en Snor
array (ved hjælp af Java Native Interface - JNI) og udfylder hvert element med en henvisning til a Snor
objekt, der indeholder de tegn, der udgør et argument. Når den er færdig, hoved ()
metoden kaldes (ved hjælp af JNI) og sendte en henvisning til Snor
array.
Antag at du skulle skrive java-app *
på kommandolinjen. Hvad tror du kommandovinduet vil vise? Hvis du mener, at svaret er en stjerne, skal du tjekke figur 2.
Figur 2 viser App
viser navnene på filer, der er placeret i samme bibliotek som App. Klasse
. Det viser sig, at stjernetegnet repræsenterer et jokertegn. Med andre ord repræsenterer det alle filnavne i det aktuelle bibliotek. Hvornår java
bygger den Snor
array, den får en liste over alle det aktuelle biblioteks filnavne og placerer hvert filnavn i et separat Snor
objekt, som derefter gemmes som et element i arrayet.
Prøv at løbe java-app * *
. Gæt hvad der vises. Fordi hver stjerne forårsager java
for at få en liste over alle filnavne, ser du to kopier af alle filnavne i det aktuelle bibliotek.
Antag at du skriver en Lommeregner
applikation, der multiplicerer to tal med stjernen, som i java lommeregner 4 * 3
. Baseret på den foregående diskussion vil 4 og 3 ikke formere sig. Hvis du vil have, at stjernen skal fortolkes som sig selv - og ikke som et jokertegn - skal du omslutte den med et par dobbelt citattegn. For eksempel ville du skrive java lommeregner 4 "*" 3
. Desuden, hvis dit argument indeholder indlejrede mellemrumstegn, og du vil medtage disse mellemrumstegn som en del af argumentet, skal du bruge dobbelt anførselstegn. Skriv f.eks java App "mit sammensatte argument"
på kommandolinjen for at specificere mit sammensatte argument
som App
's eneste argument.
Vores første Java-applikation bestod af en enkelt klasse. Du kan dog også oprette applikationer, der består af flere klasser. Desuden kan hver klasse have sin egen hoved ()
metode. For at se, hvordan situationen ser ud, skal du tjekke Listing 2.
Notering 2. Fred.java
// Fred.java klasse A {public static void main (String [] dogs) {System.out.println ("Class A main () method"); }} klasse B {offentlig statisk ugyldig hoved (String [] kyllinger) {System.out.println ("Klasse B main () metode"); System.out.println ("Num args:" + kyllinger.længde); }}
Liste 2 viser kildekoden, der er gemt i en fil, der kaldes Fred.java
. Denne kildekode består af to klasser: EN
og B
. Når kompileret (som i javac Fred.java
), ender du med to klassefiler: En klasse
og B. klasse
. Hvis du skulle skrive java A
, ville du se Klasse A hoved () metode
i kommandovinduet. Men hvis du skulle skrive java B
, vises kommandovinduet Klasse B hoved () metode
efterfulgt af en linje, der begynder med Num argumenterer:
og identificerer antallet af argumenter, der er sendt på kommandolinjen.
Er Fred
en applikation eller to applikationer? Svaret afhænger af dit perspektiv. Normalt består en ansøgning af en enkelt klasse med en hoved ()
metode. Som du har set, kører du applikationen ved at angive java
og navnet på den klasse, der indeholder hoved ()
. Du kan dog finde ud af, at du placerer en hoved ()
metode i andre klasser (til fejlfindingsformål). Fjern alt for at forhindre forvirring for alle, der bruger dit program hoved ()
metoder undtagen hoved ()
metode, der starter applikationen, eller identificer klassefilen, der indeholder embedsmanden hoved ()
metode inden implementering af applikationen.
I tillæg til java
, inkluderer Java 2 SDK en javaw
program, som du kan bruge til at køre applikationer. Dette program er næsten identisk med java
, bortset fra det javaw
viser ikke et kommandovindue, når du kører et program (medmindre du kører programmet gennem en Windows-batchfil, som automatisk åbner et kommandovindue). Antag for eksempel, at din klassefil kaldes GUIDemo
er gemt i c: \ jdk1.4 \ projekter
bibliotek (forudsat Windows). Du beslutter dig for at oprette en Windows-genvej til at køre programmet og vælge følgende kommandolinje: java -cp c: \ jdk1.4 \ projekter GUIDemo
. (Det -cp
indstilling fortæller java
hvor man finder en klassefil kaldet GUIDemo.class
.) Når du vælger genvejen, vises et kommandovindue sammen med GUIDemo
GUI-vindue. Men hvis du skifter java
til javaw
, ser du ikke kommandovinduet.
Nu hvor du har haft en chance for at lege med applikationer, lad os se på den anden kategori af Java-programmer - applets.
Applets
En applet er et program, der kører i sammenhæng med en webbrowser, der styrer appleten. Da et rektangulært område på websiden viser en applets output, beskrives applets som indlejret i websider. Desuden styrer browseren ved at kalde bestemte metoder - som vi snart vil undersøge - en applets livscyklus.
En applets klassefiler downloades automatisk til en brugers maskine, når brugeren surfer til en webside, der indeholder appleten. Når den er downloadet, udfører browserens virtuelle maskine eller Java Plug-in-softwaren disse klassefiler. (Se ressourcer for en artikel, der udforsker Java Plug-in.)
Forestil dig en ondsindet person, der opretter en applet, der sletter filer, spilder reammer af printerpapir, stjæler adgangskoder eller andre følsomme oplysninger osv. En applet med ubegrænset adgang til en brugers maskine kunne udføre alle disse vildfarelser. Af den grund kan applets kun udføre begrænsede funktioner. For eksempel kan en applet ikke udføre nogen filrelaterede aktiviteter.
Sun har etableret en specifik (og involveret) procedure til at omdanne begrænsede applets til ubegrænsede applets. Ubegrænsede applets kan dog kun køre under brugerens tilladelse. (Vi vil undersøge dette emne i en fremtidig artikel.) For at være en applet skal en - og kun en - af applets klasser være i overensstemmelse med følgende mønster:
offentlig klasse klassenavn udvider java.applet.Applet {}
Det krævede offentlig
nøgleord giver webbrowseren adgang til appleten. Det strækker sig
nøgleord angiver det objektorienterede programmeringskoncept for arv og antyder, at klassenavn
klasse arver appletfunktioner fra en klasse kaldet Applet
(placeret i java.applet
pakke - en organisationsmekanisme for klasser og klassefiler - der skal udforskes i en fremtidig artikel).
Hver applet har en livscyklus. En applet initialiseres (en gang og kun en gang), startes og stoppes (en eller flere gange i løbet af dens levetid) og destrueres (en og kun en gang). Browseren kalder en af fire metoder på betydelige punkter i løbet af den livscyklus for at indikere, at appleten er kommet ind i en anden eksistensfase. Disse metoder er i det()
, Start()
, hold op()
og ødelægge()
.