Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


7.1

Applikationen


Eine Applikation ist ein Programm, das genau wie ein Programm in einer anderen Programmiersprache (z. B. Pascal, C, C++) auf dem lokalen Rechner gestartet wird. Generell kann man aber nicht sagen, dass Applikationen grundlegend anders aufgebaut sind als Applets. Im Gegenteil: Man kann sogar Programme schreiben, die sowohl als Applet als auch als Applikation gestartet werden können. In Abschnitt 7.4 wird beschrieben, wie dies gemacht wird und was man dabei berücksichtigen muss. Dieser Abschnitt ist jedoch ausschließlich den Besonderheiten von Applikationen gewidmet. Das einfachste Beispiel für eine Java-Applikation ist sicherlich das viel zitierte »Hello World«-Beispiel:
  public class HelloWorld {
  
    public static void main(String args[]) {
      System.out.println("Hello World!");
    }
  
  }
Wird das oben abgedruckte Programm gestartet, so wird lediglich der Text »Hello World!« auf der Standardausgabe angezeigt.

Nach diesem kurzen einführenden Beispiel wird im Folgenden die Struktur einer Anwendung genauer analysiert. Die Hauptklasse einer Applikation muss die Methode
  public static void main(String args[])
implementieren. Startet man das Programm mit
  java <programmname>
wird als Erstes diese Methode aufgerufen (analog zu main() in C). Beim Aufruf von java darf die Endung der Klassendatei .class nicht mit angegeben werden. Weitere Informationen über den Java-Interpreter java können dem Anhang B.4 entnommen werden.

Da main() als static vereinbart ist, kann man aus main() heraus nur auf Datenelemente und Methoden direkt zugreifen, die ebenfalls static sind. Statische Methoden können aufgerufen werden, ohne ein Exemplar der Klasse erzeugen zu müssen, in der sie deklariert sind. Dynamische Methoden und Datenelemente hingegen werden erst zum Zeitpunkt der Erzeugung angelegt.

Um also aus main() heraus auf andere Methoden und Datenelemente zugreifen zu können, muss entweder ein Exemplar der betreffenden Klasse erzeugt oder sie müssen ebenfalls als static deklariert werden.

Die folgende Applikation würde einen Fehler zur Kompilierzeit hervorrufen, da aus einer statischen Methode versucht wird, auf ein nicht-statisches Datenelement zuzugreifen:
  public class BuggyApplication {
    int number;
  
    public static void main(String args[]) {
      number = 5;    // Direkter Zugriff auf eine
    }                // nichtstatische Variable
                     // aus einer statischen Methode
  }
Beim Programmaufruf können Parameter an die Applikation übergeben werden. Über das Array args besitzt man die Möglichkeit, auf sie zuzugreifen.

Folgendes Beispiel nimmt beliebig viele Parameter von der Kommandozeile entgegen und gibt diese in umgekehrter Reihenfolge aus:
  public class SimpleOutputDemo {
  
    public static void main(String args[]) {
      for (int i = args.length-1; i >= 0; i--)
        System.out.println(args[i]);
    }
  
  }
Im Gegensatz zu C bekommt main() in Java nur ein Array mit den Argumenten übergeben und nicht deren Anzahl. In Java ist ein Array ein Objekt, das außer den eigentlichen Elementen zusätzlich das Datenelement length besitzt. In diesem Datenelement ist die Anzahl der Elemente des Arrays vermerkt. Dadurch ist es unnötig, die Anzahl der Parameter explizit zu übergeben, da sie direkt im Array enthalten ist.

Wie obiges Beispiel zeigt, muss die Hauptklasse einer Applikation nicht von einer bestimmten Klasse abgeleitet sein. Bei Applikationen, die eine grafische Oberfläche besitzen, ist es jedoch in vielen Fällen ratsam, die Hauptklasse von Frame abzuleiten. Ein Frame stellt in Java ein einfaches Fenster dar. JFrame wird ausführlich im Kapitel 8.3.1 erklärt.

Das folgende Beispiel erläutert dieses Prinzip:
  import java.awt.Frame;
  
  public class FrameApplication extends Frame {
  
    public static void main(String args[]) {
      FrameApplication fa = new FrameApplication();
      fa.setSize();
      fa.setVisible(true); // Anzeigen des Frames
    }
  
    public void setSize() {
      setSize(200, 200);   // Festlegen der Größe
    }
  
  }
Obige Hauptklasse einer Applikation ist von JFrame abgeleitet. Deshalb wird die Klasse javax.swing.JFrame importiert. Im Paket javax.swing sind alle Klassen enthalten, die zur Erzeugung einer grafischen Oberfläche notwendig sind. Die folgende Zeile dient dazu, ein Exemplar dieser Klasse zu erzeugen:
  FrameApplication fa = new FrameApplication();
Innerhalb der statischen Methode main() wird dynamisch ein Exemplar einer Klasse angelegt, in diesem Fall ein Exemplar der »eigenen« Klasse.

Ist das Exemplar erzeugt, kann über den Verweis auf die Exemplarmethoden dieser Klasse zugegriffen werden.
  fa.setSize();
  fa.setVisible(true); // Anzeigen des Frames
Durch die Methode setSize() wird in diesem Beispiel die Größe des Fensters festgelegt, das anschließend mit setVisible(true) angezeigt wird.

Dadurch, dass die Methode setSize(int, int) von der Klasse Component an FrameApplication vererbt wird, kann man aus FrameApplication darauf zugreifen, genau wie auf main() auch. Der direkte Aufruf von setSize() aus main() würde jedoch zu einem Fehler führen. Man hat nämlich keinen direkten Zugriff auf eine nicht-statische Methode, wenn man nicht vorher ein Exemplar ihrer Klasse angelegt hat.

Die Vorgehensweise dieses Beispiels ist nicht sehr effizient (es wäre effizienter gewesen, die Größe direkt im Konstruktor festzulegen). Sie demonstriert aber, wie man bei Applikationen vorgehen kann, ohne Methoden und Variablen static definieren zu müssen.

Durch Aufruf der Methode System.exit() kann eine Applikation vorzeitig beendet, werden. Eine ausführliche Beschreibung von System.exit() ist im Abschnitt 14.3 zu finden.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.