Einführung in Wrapper-Klassen in Java

In diesem Beitrag werden wir Wrapper-Klassen behandeln und eine kleine Einführung in dieses spannende Thema geben.

Wir stellen die Wrapper-Klassen am Beispiel der vordefinierten Klassen für das leere Objekt void und die 8 primitiven Datentypen in Java vor:

Datentyp Größe [Bit] Standardwert Wertebereich Wrapper-Klasse
boolean 1 false true, false java.lang.Boolean
byte 8 0 -128 … +127 java.lang.Byte
short 16 0 -215 … 215-1 java.lang.Short
int 32 0 -231 … 231-1 java.lang.Integer
long 64 0 -263 … 263-1 java.lang.Long
float 32 0.0 ±1.2×10−38 … ±3.4×1038 java.lang.Float
double 64 0.0 ±2,2×10−308 … ±1.8×10308 java.lang.Double
char 16 \u0000 ‚\u0000‘ … ‚\uFFFF‘ java.lang.Character
void java.lang.Void

Eine Wrapper-Klasse kapselt die jeweilige primitive Variable in einem sehr einfachen Objekt. Dabei stellt die Wrapper-Klasse einige Methoden für den Zugriff auf die primitive Variable und nützliche Funktionen zur Verfügung.

Wo werden Wrapper-Klassen in Java eingesetzt?

  1. In Datenbanken – Wenn der primitive Datentyp den Wert null zugewiesen bekommen soll, wird das Wrapper-Objekt auf null gesetzt.
  2. In Verbundklassen – Wenn beliebige Objekttypen abgelegt werden sollen, müssen anstelle der primitiven Datentypen ihre Wrapper-Klassen verwendet werden.
  3. In der Reflection-API – Für den Zugriff auf primitive Membervariablen und Methodenargumente verwendet die Reflection-API von Java die korrespondierenden Wrapper-Klassen.

Wie werden Wrapper-Klassen in Java instanziert?

In Java können Wrapper-Objekte auf drei verschiedene Arten instanziert werden. Wir stellen die unterschiedlichen Instanzierungsarten kurz vor und geben in dem unteren Quellcode einige Beispiele vor.

plhq_teaser_hbox_gelb_fotolia_RA Studio_46292813

Unser großes
Android Online-Kurs
Gesamtpaket



Weitere Infos

Wrapper-Objekte können folgendermaßen instanziert werden:

  • Übergabe des Werts als primitiver Datentyp – Dem Konstruktor wird der primitive Wert übergeben. Der Konstruktor erzeugt dann ein Objekt des korrespondierenden Datentyps.
  • Übergabe des Werts als String – Dem Konstruktor wird der Wert als String übergeben. Anschließend wird der übergebene String konvertiert und ein Objekt des korrespondierenden Datentyps erzeugt.
  • Nutzen der valueOf-Fabrikmethode – Mit Hilfe der valueOf-Fabrikmethode wird ein Objekt des korrespondierenden Datentyps erzeugt. Die valueOf-Fabrikmethode ist so implementiert, dass zu gleichen primitiven Werten identische Instanzen ausgegeben werden. Somit werden überflüssige Objekte vermieden.

In der folgenden Java-Anwendung werden Instanzen der Integer-Klasse erzeugt. Um die Benutzung dieser Integer-Objekte zu veranschaulichen, werden verschiedene Berechnungen damit durchgeführt:

Beispielanwendung: Erzeugen von Wrapper-Objekten

/*
 * In der WrapperTest Klasse werden Instanzen der Integer-Klasse erzeugt
 */

public class WrapperTest
{

  public static void main (String[] args)
  {
    int zahl = 500;
    String zahlString = "501";

    Integer zahlInteger = new Integer(zahl);
    System.out.println("\n" + zahlInteger);
    System.out.println(zahlInteger.intValue());

    Integer zahlInteger2 = new Integer(zahlString);
    System.out.println("\n" + zahlInteger2.intValue());

    int neueZahl = zahlInteger2.intValue() + 99;
    System.out.println("\n" + neueZahl);

    String neuerString = zahlString + " und " + zahlInteger.toString();
    System.out.println("\n" + neuerString);
    
    Integer zahlInteger3 = Integer.valueOf(zahl);
    System.out.println("\n" + zahlInteger3.intValue());
  } 
}

In Zeile 13 wird das Integer-Wrapper Objekt zahlInteger , durch Übergabe eines int-Werts an den Konstruktor der Integer-Klasse, erzeugt. Anschließend wird das Objekt ausgegeben, sowie der innere Wert des Objekts mit der Methode intValue() abgefragt und ausgegeben.

In Zeile 17 wird das Integer-Wrapper Objekt zahlInteger2 , durch Übergabe eines String-Werts an den Konstruktor der Integer-Klasse, erzeugt. Anschließend wird der innere Wert des Objekts mit der Methode intValue() abgefragt und auf der Konsole ausgegeben.

In Zeile 20 werden der innere Wert des Objekts zahlInteger2 und die Zahl 99 addiert und das Ergebnis in der int-Variable neueZahl gespeichert. Anschließend wird der Inhalt der int-Variable neueZahl ausgegeben.

In Zeile 23 wird der innere Wert von zahlInteger in einen String umgewandelt. Dieser String wird dann mit dem String zahlString verkettet. Der verkettete String wird in der String-Variable neuerString gespeichert und anschließend auf der Konsole ausgegeben.

In Zeile 26 wird das Integer-Wrapper Objekt zahlInteger3 , durch Übergabe eines int-Werts an die statische Methode valueOf(int i), erzeugt. Anschließend wird der innere Wert des Objekts mit der Methode intValue() abgefragt und auf der Konsole ausgegeben.

Rückgabe des inneren Werts von Wrapper-Objekten

Wie bereits in den Erklärungen unter dem Quellcode zu lesen ist, kann der innere Wert von Wrapper-Objekten mit Hilfe der beiden Methoden toString() und intValue() (bei byte ist es byteValue() usw.) abgefragt werden.

Starten wir nun die Beispielanwendung. In der unteren Abbildung ist die Kommandozeilenausgabe des Programms dargestellt:

Java WrapperKlassen

Wrapper-Klassen in Java – Ausgabe der Beispielanwendung

Mit Hilfe von Wrapper-Klassen Strings parsen

Wrapper-Klassen können aus Strings primitive Datentypen wie byte, short, int, long, double, float und boolean erzeugen. Dies geschieht mit Hilfe der statischen Methoden parseByte auf die über den jeweiligen Klassennamen zugegriffen wird, in diesem Fall wäre es bspw. Byte.parseByte("52").

In dem weiter unten stehenden Quellcode haben wir einige Beispiele angegeben, um zu zeigen wie mit Hilfe von Wrapper-Klassen Strings geparst werden.

Konstanten von Wrapper-Klassen in Java nutzen

In den sechs numerischen Wrapper-Klassen sind einige sehr nützliche Konstanten definiert. In jeder dieser sechs Wrapper-Klassen kann das kleinste bzw. größte Element des Wertebereichs mit den Konstanten MIN_VALUE und MAX_VALUE abgefragt werden.

Für die Wrapper-Klassen Float und Double sind zusätzlich die Werte:

  • Minus Unendlich mit NEGATIVE_INFINITY
  • Plus Unendlich mit POSITIVE_INFINITY
  • und Undefiniert mit NEGATIVE_INFINITY definiert.

In der folgenden Java-Anwendung werden zuerst einige String-Objekte mit Hilfe der Wrapper-Klassen geparst. Anschließend werden die oben beschriebenen Konstanten der numerischen Wrapper-Klassen ausgegeben:

Beispielanwendung: Strings parsen mit Hilfe von Wrapper-Klassen

/*
 * Strings parsen mit Hilfe von Wrapper-Klassen und Konstanten der Wrapper-Klassen
 */

public class WrapperParser
{

  public static void main (String[] args)
  {
    String intString = "501";
    String byteString = "127";
    String booleanString = "false";
    String doubleString = "2014.2013";

    int zahlInt = Integer.parseInt(intString);
    System.out.println("\n" + zahlInt);

    byte zahlByte = Byte.parseByte(byteString);
    System.out.println(zahlByte);

    // führt zur Laufzeit zu NumberFormatException "Value out of range." 
    // byte zahlByte = Byte.parseByte(intString);


    boolean wertBoolean = Boolean.parseBoolean(booleanString);
    System.out.println(wertBoolean);

    double zahlDouble = Double.parseDouble(doubleString);
    System.out.println(zahlDouble + "\n");

    
    // Konstanten in den Wrapper-Klassen
    System.out.println("Kleinste short Zahl: " + Short.MIN_VALUE);
    System.out.println("Groesste short Zahl: " + Short.MAX_VALUE + "\n");

    System.out.println("Kleinste float Zahl: " + Float.MIN_VALUE);
    System.out.println("Groesste float Zahl: " + Float.MAX_VALUE);
    System.out.println("Undefiniert        : " + Float.NaN);
    System.out.println("Minus unendlich    : " + Float.NEGATIVE_INFINITY);
    System.out.println("Plus unendlich     : " + Float.POSITIVE_INFINITY);
  } 
}

Der Quellcode dürfte ziemlich selbsterklärend sein.

Die Zeile 22 ist auskommentiert, da sie einen Laufzeitfehler auslösen würde. Tritt ein Fehler beim Parsen eines String-Objekts auf, wird eine NumberFormatException geworfen. In diesem Fall wäre die Ursache das Überschreiten des zulässigen Wertebereichs des byte-Datentyps („Value out of range.“).

Starten wir nun die Beispielanwendung. In der unteren Abbildung ist die Kommandozeilenausgabe des Programms dargestellt:

Java Wrapper Klassen Parsen

Strings parsen mit Hilfe von Wrapper-Klassen in Java – Ausgabe der Beispielanwendung

Der folgende Link führt zurück zu Variablen, Datentypen und Typumwandlung (type casting) in Java.

Zurück zum Java-Kurs geht es hier.


Comments 4

  1. Pingback: Einführung in Java Design Patterns (Software Entwurfsmuster)

  2. Pingback: Autoboxing und Autounboxing (automatische Ein- und Auspacken) in Java

  3. Pingback: Klassen in Java: Die Grundlagen der objektorientierten Programmierung

  4. Pingback: Variablen, Datentypen und Typumwandlung (type casting) in Java

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.