Rheinwerk Computing < openbook >


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


Download:

- Listings, ca. 2,7 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 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 das Attribut 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.3    Methode mit variabler Argumentanzahl (Varargs) Zur vorigen ÜberschriftZur nächsten Überschrift

Bei vielen Methoden ist klar, wie viele Argumente exakt übergeben werden müssen; einer Methode Math.random() darf nichts übergeben werden, und bei Math.sin(double) ist genau ein Argument gültig.

 

Zum Seitenanfang

4.3.1    System.out.printf(…) nimmt eine beliebige Anzahl von Argumenten an Zur vorigen ÜberschriftZur nächsten Überschrift

Es gibt auch Methoden, bei denen die Anzahl gültiger Argumente prinzipiell unbeschränkt ist. Ein Beispiel ist printf(String, …), das verpflichtend einen String als Erstes erwartet, dann aber frei darin ist, was sonst übergeben wird. Gültig sind zum Beispiel:

Aufruf

Variable Argumentliste

System.out.printf("%n")

Ist leer.

System.out.printf("%s", "Eins")

Besteht aus nur einem Element: "Eins".

System.out.printf("%s,%s,%s", "1", "2", "3")

Besteht aus drei Elementen: "1", "2", "3".

Tabelle 4.1    Gültige Aufrufe von »printf(…)«

Um die Anzahl der Parameter beliebig zu gestalten, sieht Java Methoden mit variabler Argumentanzahl vor, Varargs genannt – in anderen Programmiersprachen heißen sie variadische Funktion. Die Methode printf(formatierungsstring, arg1, args2, arg3, …) ist so eine Varargs-Methode.

class java.io.PrintStream extends FilterOutputStream

implements Appendable, Closeable
  • PrintStream printf(String format, Object… args)

    Nimmt eine beliebige Liste von Argumenten an und formatiert sie nach dem gegebenen Formatierungs-String format. Der Formatierungs-String bestimmt, wie viele Argumente nötig sind. Der Compiler wertet den String aber nicht aus, kann also die Korrektheit – dass die Anzahl stimmt – auch zur Compilezeit nicht prüfen.

Eine Methode mit variabler Argumentanzahl nutzt die Ellipse (...) zur Verdeutlichung, dass eine beliebige Anzahl Argumente angegeben werden darf. Dazu zählt auch die Angabe keines Elements. Der Typ fällt dabei aber nicht unter den Tisch; er wird ebenfalls angegeben.

 

Zum Seitenanfang

4.3.2    Durchschnitt finden von variablen Argumenten Zur vorigen ÜberschriftZur nächsten Überschrift

Wir haben vorher eine Methode avg(double[] array) geschrieben, die den arithmetischen Mittelwert von Werten berechnet. Den Parametertyp können wir nun ändern in avg(double array), sodass die Methode einfach mit variablen Argumenten gefüllt werden kann.

Ausprogrammiert sieht das wie folgt aus; es gibt nur eine kleine Änderung von [] in , sonst ändert sich an der Implementierung nichts:

Listing 4.7    src/main/java/com/tutego/insel/array/AvgVarArgs.java, Ausschnitt

public class AvgVarArgs {



static double avg( double... array ) { /* Implementierung wie vorher */ }



public static void main( String[] args ) {

System.out.println( avg(1, 2, 9, 3) ); // 3.75

}

}
[»]  Hinweis

Werden variable Argumentlisten in der Signatur definiert, so dürfen sie nur den letzten Parameter bilden; andernfalls könnte der Compiler bei den Parametern nicht unbedingt zuordnen, was nun ein Vararg und was schon der nächste gefüllte Parameter ist. Das bedingt automatisch, dass es nur maximal ein Vararg in der Parameterliste geben kann.

Der Zusammenhang zwischen Vararg und Array

Eine Methode mit Vararg ist im Kern eine Methode mit einem Array als Parametertyp. Im Bytecode steht nicht wirklich avg(double… array), sondern avg(double[] array) mit der Zusatzinfo, dass array ein Vararg ist, damit der Compiler beliebig viele Argumente und nicht ausschließlich ein double[]-Array als Argument erlaubt.

Der Nutzer kann eine Varargs-Methode aufrufen, ohne ein Array für die Argumente explizit zu definieren. Er bekommt auch gar nicht mit, dass der Compiler im Hintergrund ein Array mit vier Elementen angelegt hat. So generiert der Compiler aus

System.out.println( avg(1, 2, 9, 3) );

Folgendes:

System.out.println( avg( new double[] { 1, 2, 9, 3 } ) );

An der Schreibweise lässt sich gut ablesen, dass wir ein Array auch von Hand übergeben können:

double[] values = { 1, 2, 9, 3 };

System.out.println( avg( values ) );
[»]  Hinweis

Da Varargs als Arrays umgesetzt werden, sind überladene Varianten wie avg(int… array) und avg(int[] array), also einmal mit einem Vararg und einmal mit einem Array, nicht möglich. Besser ist es hier, immer eine Variante mit Varargs zu nehmen, da sie mächtiger ist. Einige Autoren schreiben auch die Einstiegsmethode main(String[] args) mit variablen Argumenten, also main(String… args). Das ist gültig, denn im Bytecode steht ja ein Array.

 

Zum Seitenanfang

4.3.3    Varargs-Designtipps * Zur vorigen ÜberschriftZur nächsten Überschrift

  • Hat eine Methode nur einen Array-Parameter und steht er noch am Ende, so kann er relativ einfach durch ein Vararg ersetzt werden. Das gibt dem Aufrufer die komfortable Möglichkeit, eine kompaktere Syntax zu nutzen. Unsere main(String[] args)-Methode kann auch als main(String... args) deklariert werden, sodass der main(…)-Methode bei Tests einfach variable Argumente übergeben werden können.

  • Muss eine Mindestanzahl von Argumenten garantiert werden – bei max() sollten das mindestens zwei sein –, ist es besser, eine Deklaration wie folgt zu nutzen: max(int first, int second, int... remaining).

  • Aus Performance-Gründen ist es empfehlenswert, Methoden mit häufigen Parameterlistengrößen als feste Methoden anzubieten, etwa max(double, double), max(double, double, double) und dann max(double...). Der Compiler wählt automatisch immer die passende Methode aus, für zwei oder drei Parameter sind keine temporären Array-Objekte nötig, und die automatische Speicherbereinigung muss nichts wegräumen.

 


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: Java SE 9 Standard-Bibliothek

Java SE 9 Standard-Bibliothek




Zum Rheinwerk-Shop: Algorithmen in Java

Algorithmen in Java




Zum Rheinwerk-Shop: Objektorientierte Programmierung

Objektorientierte Programmierung




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

InfoInfo



 

 


Copyright © Rheinwerk Verlag GmbH 2021

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