Programmering

Applikationer, applets og hybrider

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 Appsagen, 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 Apps 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, toog 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, toog 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 () metodeefterfulgt 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 GUIDemoGUI-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().