Rheinwerk Computing < openbook >


 
Inhaltsverzeichnis
Materialien zum Buch
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Arrays und ihre Anwendungen
5 Der Umgang mit Zeichen und Zeichenketten
6 Eigene Klassen schreiben
7 Objektorientierte Beziehungsfragen
8 Schnittstellen, Aufzählungen, versiegelte Klassen, Records
9 Ausnahmen müssen sein
10 Geschachtelte Typen
11 Besondere Typen der Java SE
12 Generics<T>
13 Lambda-Ausdrücke und funktionale Programmierung
14 Architektur, Design und angewandte Objektorientierung
15 Java Platform Module System
16 Die Klassenbibliothek
17 Einführung in die nebenläufige Programmierung
18 Einführung in Datenstrukturen und Algorithmen
19 Einführung in grafische Oberflächen
20 Einführung in Dateien und Datenströme
21 Einführung ins Datenbankmanagement mit JDBC
22 Bits und Bytes, Mathematisches und Geld
23 Testen mit JUnit
24 Die Werkzeuge des JDK
A Java SE-Module und Paketübersicht
Stichwortverzeichnis


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 4 Arrays und ihre Anwendungen
Pfeil 4.1 Einfache Feldarbeit
Pfeil 4.1.1 Grundbestandteile
Pfeil 4.1.2 Deklaration von Array-Variablen
Pfeil 4.1.3 Array-Objekte mit new erzeugen
Pfeil 4.1.4 Arrays mit { Inhalt }
Pfeil 4.1.5 Die Länge eines Arrays über die Objektvariable length auslesen
Pfeil 4.1.6 Zugriff auf die Elemente über den Index
Pfeil 4.1.7 Typische Array-Fehler
Pfeil 4.1.8 Arrays an Methoden übergeben
Pfeil 4.1.9 Mehrere Rückgabewerte *
Pfeil 4.1.10 Vorinitialisierte Arrays
Pfeil 4.2 Die erweiterte for-Schleife
Pfeil 4.3 Methode mit variabler Argumentanzahl (Varargs)
Pfeil 4.3.1 System.out.printf(…) nimmt eine beliebige Anzahl von Argumenten an
Pfeil 4.3.2 Durchschnitt finden von variablen Argumenten
Pfeil 4.3.3 Varargs-Designtipps *
Pfeil 4.4 Mehrdimensionale Arrays *
Pfeil 4.4.1 Nichtrechteckige Arrays *
Pfeil 4.5 Bibliotheksunterstützung von Arrays
Pfeil 4.5.1 Klonen kann sich lohnen – Arrays vermehren
Pfeil 4.5.2 Warum »können« Arrays so wenig?
Pfeil 4.5.3 Array-Inhalte kopieren
Pfeil 4.6 Die Klasse Arrays zum Vergleichen, Füllen, Suchen und Sortieren nutzen
Pfeil 4.6.1 Eine lange Schlange
Pfeil 4.7 Der Einstiegspunkt für das Laufzeitsystem: main(…)
Pfeil 4.7.1 Korrekte Deklaration der Startmethode
Pfeil 4.7.2 Kommandozeilenargumente verarbeiten
Pfeil 4.7.3 Der Rückgabetyp von main(…) und System.exit(int) *
Pfeil 4.8 Zum Weiterlesen
 

Zum Seitenanfang

4.7    Der 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

4.7.1    Korrekte 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 – nicht Main oder MAIN. Die Sichtbarkeit ist auf public gesetzt, und die Methode muss statisch sein, da die JVM die Methode auch ohne ein 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 )

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 syntaktisch gültig, aber eben keiner, den die 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 dem Index 0 nicht der Programmname, also der Name der Hauptklasse, sondern bereits der erste Programmparameter der Kommandozeile.

 

Zum Seitenanfang

4.7.2    Kommandozeilenargumente 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 4.15     src/main/java/com/tutego/insel/array/LovesGoldenHamster.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.printf( "%s ", s );



System.out.println();

}

}

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

$ java com.tutego.insel.array.LovesGoldenHamster Raphael Perly Mirjam Paul
[»]  Bibliothek

Zum Parsen der Kommandozeilenargumente bieten sich die Bibliotheken Commons CLI (https://commons.apache.org/proper/commons-cli) oder picocli (https://picocli.info) an.

inline image  Unter Run AsRun Configuration…Argument List lassen sich die Argumente über die Entwicklungsumgebung setzen.

 

Zum Seitenanfang

4.7.3    Der 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 Java-Programmen auf Smartphones.

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 (auch Exit-Code genannt – engl. exit status bzw. exit code) 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 4.16     src/main/java/com/tutego/insel/array/SystemExitDemo.java

package com.tutego.insel.array;



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 4.17     showreturn.bat

@echo off

cd target\classes

java com.tutego.insel.array.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 des kleinen Skripts:

>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, dann ist es sinnvoll, den Inhalt von %ERRORLEVEL% zwischenzuspeichern, etwa so:

Listing 4.18     showreturn2.bat

@echo off

cd target\classes

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 es dem aufrufenden Code nicht erlaubt ist, die JVM zu beenden. Das gilt insbesondere bei Programmen in einem Container, wie einem Webserver.

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java ist auch eine Insel Java ist auch eine Insel

Jetzt Buch bestellen


 Buchempfehlungen
Zum Rheinwerk-Shop: Captain CiaoCiao erobert Java

Captain CiaoCiao erobert Java




Zum Rheinwerk-Shop: Algorithmen in Java

Algorithmen in Java




Zum Rheinwerk-Shop: Spring Boot 3 und Spring Framework 6

Spring Boot 3 und Spring Framework 6




Zum Rheinwerk-Shop: Java SE 9 Standard-Bibliothek

Java SE 9 Standard-Bibliothek




 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz

InfoInfo



 

 


Copyright © Rheinwerk Verlag GmbH 2024

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



Cookie-Einstellungen ändern