Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger. 
Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Eigene Klassen schreiben
6 Objektorientierte Beziehungsfragen
7 Ausnahmen müssen sein
8 Äußere.innere Klassen
9 Besondere Typen der Java SE
10 Generics<T>
11 Lambda-Ausdrücke und funktionale Programmierung
12 Architektur, Design und angewandte Objektorientierung
13 Komponenten, JavaBeans und Module
14 Die Klassenbibliothek
15 Einführung in die nebenläufige Programmierung
16 Einführung in Datenstrukturen und Algorithmen
17 Einführung in grafische Oberflächen
18 Einführung in Dateien und Datenströme
19 Einführung ins Datenbankmanagement mit JDBC
20 Einführung in <XML>
21 Testen mit JUnit
22 Bits und Bytes und Mathematisches
23 Die Werkzeuge des JDK
A Java SE-Paketübersicht
Stichwortverzeichnis


Download:

- Beispielprogramme, ca. 35,4 MB


Buch bestellen
Ihre Meinung?



Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenboom

Einführung, Ausbildung, Praxis
Buch: Java ist auch eine Insel


Java ist auch eine Insel

Pfeil 3 Klassen und Objekte
Pfeil 3.1 Objektorientierte Programmierung (OOP)
Pfeil 3.1.1 Warum überhaupt OOP?
Pfeil 3.1.2 Denk ich an Java, denk ich an Wiederverwendbarkeit
Pfeil 3.2 Eigenschaften einer Klasse
Pfeil 3.2.1 Klassenarbeit mit Point
Pfeil 3.3 Natürlich modellieren mit der UML (Unified Modeling Language) *
Pfeil 3.3.1 Hintergrund und Geschichte der UML
Pfeil 3.3.2 Wichtige Diagrammtypen der UML
Pfeil 3.3.3 UML-Werkzeuge
Pfeil 3.4 Neue Objekte erzeugen
Pfeil 3.4.1 Ein Exemplar einer Klasse mit dem Schlüsselwort new anlegen
Pfeil 3.4.2 Der Zusammenhang von new, Heap und Garbage-Collector
Pfeil 3.4.3 Deklarieren von Referenzvariablen
Pfeil 3.4.4 Jetzt mach mal ’nen Punkt: Zugriff auf Objektattribute und -methoden
Pfeil 3.4.5 Überblick über Point-Methoden
Pfeil 3.4.6 Konstruktoren nutzen
Pfeil 3.5 ZZZZZnake
Pfeil 3.6 Pakete schnüren, Imports und Kompilationseinheiten
Pfeil 3.6.1 Java-Pakete
Pfeil 3.6.2 Pakete der Standardbibliothek
Pfeil 3.6.3 Volle Qualifizierung und import-Deklaration
Pfeil 3.6.4 Mit import p1.p2.* alle Typen eines Pakets erreichen
Pfeil 3.6.5 Hierarchische Strukturen über Pakete
Pfeil 3.6.6 Die package-Deklaration
Pfeil 3.6.7 Unbenanntes Paket (default package)
Pfeil 3.6.8 Klassen mit gleichen Namen in unterschiedlichen Paketen *
Pfeil 3.6.9 Kompilationseinheit (Compilation Unit)
Pfeil 3.6.10 Statischer Import *
Pfeil 3.7 Mit Referenzen arbeiten, Identität und Gleichheit (Gleichwertigkeit)
Pfeil 3.7.1 null-Referenz und die Frage der Philosophie
Pfeil 3.7.2 Alles auf null? Referenzen testen
Pfeil 3.7.3 Zuweisungen bei Referenzen
Pfeil 3.7.4 Methoden mit Referenztypen als Parametern
Pfeil 3.7.5 Identität von Objekten
Pfeil 3.7.6 Gleichheit (Gleichwertigkeit) und die Methode equals(…)
Pfeil 3.8 Arrays
Pfeil 3.8.1 Grundbestandteile
Pfeil 3.8.2 Deklaration von Arrays
Pfeil 3.8.3 Arrays mit Inhalt
Pfeil 3.8.4 Die Länge eines Arrays über das Attribut length auslesen
Pfeil 3.8.5 Zugriff auf die Elemente über den Index
Pfeil 3.8.6 Array-Objekte mit new erzeugen
Pfeil 3.8.7 Typische Array-Fehler
Pfeil 3.8.8 Arrays als Methodenparameter
Pfeil 3.8.9 Vorinitialisierte Arrays
Pfeil 3.8.10 Die erweiterte for-Schleife
Pfeil 3.8.11 Arrays mit nichtprimitiven Elementen
Pfeil 3.8.12 Methode mit variabler Argumentanzahl (Vararg)
Pfeil 3.8.13 Mehrdimensionale Arrays *
Pfeil 3.8.14 Nichtrechteckige Arrays *
Pfeil 3.8.15 Die Wahrheit über die Array-Initialisierung *
Pfeil 3.8.16 Mehrere Rückgabewerte *
Pfeil 3.8.17 Klonen kann sich lohnen – Arrays vermehren *
Pfeil 3.8.18 Array-Inhalte kopieren *
Pfeil 3.8.19 Die Klasse Arrays zum Vergleichen, Füllen, Suchen, Sortieren nutzen
Pfeil 3.8.20 Eine lange Schlange
Pfeil 3.9 Der Einstiegspunkt für das Laufzeitsystem: main(…)
Pfeil 3.9.1 Korrekte Deklaration der Startmethode
Pfeil 3.9.2 Kommandozeilenargumente verarbeiten
Pfeil 3.9.3 Der Rückgabetyp von main(…) und System.exit(int) *
Pfeil 3.10 Grundlagen von Annotationen und Generics
Pfeil 3.10.1 Generics
Pfeil 3.10.2 Annotationen
Pfeil 3.10.3 Annotationstypen aus java.lang
Pfeil 3.10.4 @Deprecated
Pfeil 3.10.5 @SuppressWarnings
Pfeil 3.11 Zum Weiterlesen
 

Zum Seitenanfang

3.9Der Einstiegspunkt für das Laufzeitsystem: main(…) Zur vorigen ÜberschriftZur nächsten Überschrift

In Java-Klassen gibt es eine besondere statische Methode main(…), die das Laufzeitsystem in der angegebenen Hauptklasse (oder Startklasse) des Programms aufruft.

 

Zum Seitenanfang

3.9.1Korrekte Deklaration der Startmethode Zur vorigen ÜberschriftZur nächsten Überschrift

Damit die JVM ein Java-Programm starten kann, muss es eine besondere Methode main(…) geben. Da die Groß-/Kleinschreibung in Java relevant ist, muss diese Methode main lauten, und nicht Main oder MAIN. Die Sichtbarkeit ist auf public gesetzt, und die Methode muss statisch sein, da die JVM die Methode auch ohne Exemplar der Klasse aufrufen möchte. Als Parameter wird ein Array von String-Objekten angenommen. Darin sind die auf der Kommandozeile übergebenen Parameter abgelegt.

Zwei Varianten gibt es zur Deklaration:

  • public static void main( String[] args )

  • public static void main( String... args )

Die zweite nutzt so genannte variable Argumentlisten, ist aber mit der ersten Version gleich.

Falsche Deklarationen

Nur eine Methode mit dem Kopf public static void main(String[] args) wird als Startmethode akzeptiert. Ein Methodenkopf wie public static void Main(String[] args) ist durchaus gültig, aber eben keiner, der den JVM zum Start ansteuern würde. Findet die JVM die Startmethode nicht, gibt sie eine Fehlermeldung aus:

Fehler: Hauptmethode in Klasse ABC nicht gefunden. Definieren Sie die Hauptmethode als:

public static void main(String[] args)

[»]Hinweis

Im Gegensatz zu C(++) steht im ersten Element des Argument-Arrays mit Index 0 nicht der Programmname, also der Name der Hauptklasse, sondern bereits der erste Programmparameter der Kommandozeile.

 

Zum Seitenanfang

3.9.2Kommandozeilenargumente verarbeiten Zur vorigen ÜberschriftZur nächsten Überschrift

Eine besondere Variable für die Anzahl der übergebenen Argumente der Kommandozeile ist nicht erforderlich, weil das String-Array-Objekt uns diese Information über length mitteilt. Um etwa alle übergebenen Argumente über die erweiterte for-Schleife auszugeben, schreiben wir:

Listing 3.31LovesGoldenHamster.java, main()

public static void main( String[] args ) {

if ( args.length == 0 )

System.out.println( "Was!! Keiner liebt kleine Hamster?" );

else {

System.out.print( "Liebt kleine Hamster: " );



for ( String s : args )

System.out.format( "%s ", s );



System.out.println();

}

}

Das Programm lässt sich auf der Kommandozeile wie folgt aufrufen:

$ java LovesGoldenHamster Raphael Perly Mirjam Paul

Bibliothek

Zum Parsen der Kommandozeilenargumente bietet sich zum Beispiel die Bibliothek Commons CLI (http://commons.apache.org/proper/commons-cli) an.

 

Zum Seitenanfang

3.9.3Der Rückgabetyp von main(…) und System.exit(int) * Zur vorigen ÜberschriftZur nächsten Überschrift

Der Rückgabetyp void der Startmethode main(…) ist sicherlich diskussionswürdig, da diejenigen, die die Sprache entworfen haben, auch hätten fordern können, dass ein Programm immer einen Statuscode an das aufrufende Programm zurückgibt. Für diese Lösung haben sie sich aber nicht entschieden, da Java-Programme in der Regel nur minimal mit dem umgebenden Betriebssystem interagieren sollen und echte Plattformunabhängigkeit gefordert ist, etwa bei Java in Handys.

Für die Fälle, in denen ein Statuscode zurückgeliefert werden soll, steht die statische Methode System.exit(status) zur Verfügung; sie beendet eine Applikation. Das an exit(int) übergebene Argument nennt sich Statuswert (engl. exit status) und wird an die Kommandozeile zurückgegeben. Der Wert ist für Skriptprogramme wichtig, da sie über diesen Rückgabewert auf das Gelingen oder Misslingen des Java-Programms reagieren können. Ein Wert von 0 zeigt per Definition das Gelingen an, ein Wert ungleich 0 einen Fehler. Der Wertebereich sollte sich zwischen 0 und 255 bewegen. Auf der Unix-Kommandozeile ist der Rückgabewert eines Programms unter $? verfügbar und in der cmd.exe von Windows unter %ERRORLEVEL%, einer Art dynamischer Umgebungsvariablen.

Dazu ein Beispiel; ein Java-Programm liefert den Statuswert 42:

Listing 3.32SystemExitDemo.java

public class SystemExitDemo {

public static void main( String[] args ) {

System.exit( 42 );

}

}

Das folgende Shell-Programm gibt den Statuswert zunächst aus und zeigt zudem, welche Fallunterscheidung die Shell für Statuswerte bietet:

Listing 3.33showreturn.bat

@echo off

java SystemExitDemo

echo %ERRORLEVEL%

if errorlevel 10 (

echo Exit-Code ist über 10, genau %ERRORLEVEL%

)

Die JVM startet das Java-Programm und beendet es mit System.exit(int), was zu einer Belegung der Variablen %ERRORLEVEL% mit 42 führt. Das Skript gibt zunächst die Belegung der Variablen aus. Die Windows-Shell besitzt mit if errorlevel Wert eine spezielle Variante für Fallunterscheidungen mit Exit-Codes, die genau dann greift, wenn der aktuelle Exit-Code größer oder gleich dem angegebenen Wert ist. Das heißt in unserem Beispiel: Es gibt eine Ausgabe, wenn der Exit-Code größer 10 ist, und mit 42 ist er das. Daher folgt die Ausgabe vom kleinen Skript:

>showreturn.bat

42

Error-Level ist über 10, genau 42

Es ist wichtig zu bedenken, dass %ERRORLEVEL% natürlich überschrieben wird, wenn Befehle folgen. So gibt Folgendes nur 0 aus, da dir erfolgreich abgeschlossen werden kann und dir nach der Durchführung den Exit-Code auf 0 setzt:

java SystemExitDemo

dir

echo %ERRORLEVEL%

Liegen zwischen dem Aufruf der JVM und der Auswertung der Variablen Aufrufe, die den Exit-Code verändern, ist es sinnvoll, den Inhalt von %ERRORLEVEL% zwischenzuspeichern, etwa so:

Listing 3.34showreturn2.bat

@echo off

java SystemExitDemo

SET EXITCODE=%ERRORLEVEL%

dir > NUL:

echo %ERRORLEVEL%

echo %EXITCODE%

Die Ausgabe ist dann:

0

42
final class java.lang.System
  • static void exit(int status)

    Beendet die aktuelle JVM und gibt das Argument der Methode als Statuswert zurück. Ein Wert ungleich 0 zeigt einen Fehler an. Also ist der Rückgabewert beim normalen fehlerfreien Verlassen 0. Eine SecurityException wird ausgelöst, falls der aktuelle SecurityManager dem aufrufenden Code nicht erlaubt, die JVM zu beenden. Das gilt insbesondere bei Applets in einem Webbrowser.

 


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück

 

 


Copyright © Rheinwerk Verlag GmbH 2017

Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 

[Rheinwerk Computing]



Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de