Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Java 7 Grundkurs

Wrapperklassen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Erfahren Sie mehr über Wrapperklassen und wie diese die Funktionalität mit vielen tollen Methoden ergänzen, die man bei primitiven Datentypen wie "int" vermisst.
07:47

Transkript

In Java gibt es zwei Arten von Datentypen. Wir haben auf der einen Seite die primitiven Datentypen und auf der anderen Seite die Objekte. Objekte haben Attribute und Methoden, primitive Datentypen haben einfach nur ihren Wert. Beispielsweise ein einfaches "int i" "int" ist ein einfacher Datentyp, und ein solches "i" kann einfach nur eine Zahl enthalten. Insbesondere hat das "i" keinerlei Methoden, die ich aufrufen könnte. Methoden, um z.B. einen String in eine "int"-Zahl zu konvertieren, oder um diese Zahl z.B. in hexadezimaler Form darzustellen. Also alles Methoden, die man eigentlich von einem "int"-Objekt erwarten könnte. Um diese Lücke zu schließen, um also einen Platz zu schaffen für die Methoden, die eigentlich zu den primitiven Datentypen dazugehören würden, wurden die Wrapper-Klassen gebaut. Zu jedem primitiven Datentyp, gibt es die passende Wrapper-Klasse. Für "int" wäre das dann die Klasse "Integer". Da es ein Klassenname ist, fängt es natürlich mit einem großen "I" an. Und wie das bei Klassen so üblich ist, deklariere ich mir eine Referenzvariable und ich kann mir eine Instanz dieser Klasse erzeugen, indem ich "New" aufrufe und den Konstruktor dahintersetze, der dann, Sie sehen das schon, entweder einen String oder eine Zahl übernehmen kann. Übergebe ich einen String, dann wird versucht, diesen String in eine ganze Zahl zu konvertieren und übergebe ich eine Zahl, dann wird einfach diese Zahl verwendet. So oder so habe ich danach ein Objekt, das genau eine ganze Zahl enthält. Ich mach das mal, z.B. so. Jetzt habe ich also mein Zahl-Objekt, und das enthält eine 5. Oder, alternativ, könnte ich hier natürlich auch einen String übergeben und dieser String wird dann umgewandelt in eine Zahl. Ein solches Integer-Objekt hat, wie alle Wrapper-Objekte, eine wesentliche Eigenschaft: Es ist unveränderlich. Das heißt, wenn die 5 einmal da drin ist, dann kann ich Sie zwar wieder rausholen, aber ich kann sie in diesem Objekt nicht verändern. Brauche ich also beispielsweise eine 6, dann kann ich nicht "Zahl" einfach hochzählen, sondern ich müsste mir quasi diese 5 rausholen, die 5 hochzählen und mir dann mit der 6 ein neues Integer-Objekt bauen. Das würde dann ungefähr so aussehen: Ich will das Ganze wieder in "Zahl" haben, also schreibe ich "Zahl=" und jetzt kommt "Zahl.intvalue", damit hole ich die 5 raus, dann rechne ich 1 dazu, und jetzt nehme ich das Ganze und packe das in einen Konstruktor und erzeuge auf diese Weise also ein neues Objekt mit der neuen Zahl. Meine Variable "Zahl" verweist dann auf dieses neue Objekt, nicht mehr auf das alte, das alte verschwindet also. Dieselbe Operation, also um 1 hochzählen, sieht bei einem primitiven Datentyp doch um einiges einfacher aus. Wenn ich hier sage, "i" ist 5 und möchte es um 1 hochziehen, schreibe ich einfach "i++" und gut ist. Glücklicherweise gibt es ein Feature, das es uns ermöglicht, mit Integer-Objekten genauso umzugehen, wie mit normalen "int"-Zahlen. Und zwar nennt sich das Autoboxing. Ich zeige zuerst mal, wie das aussieht. Und zwar kann ich statt in dieser Zeile hier, nehme ich mal raus, kann ich auch schreiben "Zahl++". Wir sehen, kein Compiler-Fehler, muss also gehen. Es sieht so aus, als könnten wir diesen Operator "++" auf diese Referenzvariable Zahl anwenden. Es ist aber nicht das, was passiert. Was eigentlich passiert ist, dass der Compiler aus diesem kurzen Stückchen Code diese Zeile hier macht. Das heißt, der Compiler übernimmt für uns das Rausholen der Zahl und das Einpacken der neuen Zahl in ein neues Objekt. Deswegen heißt das ganze auch Autoboxing, also Verpacken in die Kiste, Boxing, und das Ganze automatisch. Wir scheinen also mit diesen Objekten rechnen zu können, aber hinter den Kulissen passiert eine ganze Menge mehr. Es wird eine Methode aufgerufen, es wird ein neues Objekt erzeugt, es wird ein altes Objekt verworfen, und all das nur, um dieses Ding hier um 1 hochzuzählen. Wenn Sie also mit diesen Wrapper-Objekten rechnen, dann denken Sie daran, dass hinter den Kulissen doch noch viel mehr Aufwand getrieben wird; sowohl was Speicherverbrauch angeht, als auch Rechenleistung. Bei einer primitiven Zahl muss wirklich einfach nur die Zahl hochgezählt werden. Warum sollte ich denn dann nicht eigentlich immer mit "int" rechnen, sondern irgendwie "Integer" benutzen, wenn es doch so viel schlechter ist? Es gibt eine Sache, die funktioniert mit dem "int", mit dem primitiven "int", nicht. Und zwar, da das hier eine Referenzvariable ist, kann ich die auch auf diesen speziellen Wert "null" setzen, das heißt ich sage einfach damit, ich habe gar keinen Wert für diese Variable ein Wert wurde nicht vergeben, er ist nicht vorhanden. Diese Möglichkeit habe ich mit einem primitiven "int" nicht. Klar, ich könnte es auf 0 setzen, aber das ist ja nicht dasselbe. 0 ist einfach einer von vielen Werten, "null" hingegen bedeutet, es ist kein Wert. Benötige ich also diese spezielle Ausdrucksmöglichkeit, dann liegt die Wrapper-Klasse vorn. Neben der Möglichkeit, Instanzen anzulegen, habe ich ja vorhin auch von Methoden gesprochen, die diese Wrapper-Klassen bieten sollen. Die meisten Methoden in den Wrapper- Klassen sind als "static" deklariert, das heißt, ich kann auf sie direkt über den Namen der Klasse zugreifen. Und es sind durchaus einige nützliche dabei. Um beispielsweise einen String in eine Zahl umzuwandeln, muss ich nicht extra ein Integer-Objekt erzeugen, sondern ich kann das auch mit einem Methoden-Aufruf machen. Das sieht dann ungefähr so aus: Ich baue hier mal ein Demo-String zusammen, so. Da ist jetzt also als Text eine "123" enthalten. Die kommt z.B. aus einem Eingabeformular oder aus einer Datenbank oder aus einer Textdatei. Jetzt möchte ich das gerne in meine primitive Variable hinein haben; z.B. ist das das Alter von irgendwas. Und dafür gibt es in der Klasse "integer" die Methode "parseInt". Wir sehen das, die gibt es in zwei Möglichkeiten: Erstmal nur einfach mit einem String als Parameter, dann wird dieser String genommen, umgewandelt in eine Zahl und die Zahl wird zurückgegeben. Und die zweite Variante, hier, ich übergebe einen String und als zweites übergebe ich die Zahlenbasis. Standardmäßig ist die 10 in unserem System, aber wir können dort auch irgendeine andere Zahlenbasis angeben und so also den String beispielsweise als Hexadezimal-String behandeln. Ich nehme jetzt mal nur die erste Variante, wir übergeben hier den Text, einfach mit "Enter" bestätigen, ein Semikolon hinten dran und die Konvertierung ist fertig. Auch für die Gegenrichtung gibt es passende Methoden. Also, aus einer Zahl einen String machen. Das könnte dann z.B. so aussehen: Ich gehe wieder zur Klasse Integer und rufe die Methode, Sie sehen das da oben, wir haben "to binary string", "to hex string", "to octa string". Das sind so die Standardmethoden, die wir aufrufen können. Ich nehme mal "to hex string", ich übergebe hier die Variable, die ich gerne konvertieren möchte. Und dann geben wir das mal aus, damit wir auch sehen, was dabei rauskommt. "Ausführen", und es erscheint "7B". Also "123" dezimal ist "7B" hexadezimal. Wrapper-Klassen bieten uns also zweierlei. Wir können Instanzen davon erzeugen, und wir können von den Klassen, diverse Hilfsmethoden aufrufen, um Operationen mit dem jeweiligen Datentyp ausführen zu können. Wrapper-Klassen gibt es für alle primitiven Datentypen und Sie heißen, bis auf zwei kleine Ausnahmen, immer genauso, wie der jeweilige primitive Datentyp. Also bei "byte" heißt die Klasse "Byte", mit einem großen "B" natürlich, "short" "Short" mit einem großen "S". Hier ist die erste Ausnahme: Der primitive Typ heißt "int", die Klasse heißt "Integer". Jetzt geht es wieder normal weiter, "long", "float", "double"; und hier kommt die zweite Ausnahme: "char" als primitiver Typ und "Character" als Klassenname. Schließlich, den Abschluss macht "boolean". Von all diesen Klassen können Sie Instanzen erzeugen und alle Klassen bieten viele tolle Methoden, um Operationen mit dem jeweiligen primitiven Datentyp ausführen zu können.

Java 7 Grundkurs

Machen Sie sich mit den Grundlagen der Java-Programmierung vertraut und lernen Sie die Syntax der Sprache sowie das Konzept der objektorientierten Softwareentwicklung kennen.

8 Std. 32 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!