Lernpfad:Objektorientierte Programmierung mit Java/Datentypen und Variablen: Unterschied zwischen den Versionen

keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Markierungen: Mobile Bearbeitung Mobile Web-Bearbeitung
Keine Bearbeitungszusammenfassung
 
(49 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Navigation}}
{{Kurzlink|java-datentypen}}{{Navigation}}


== Primitive Datentypen ==
== Primitive Datentypen ==
Primitive Datentypen sind eine Gruppe von Typen, mit denen man Variablen erstellen kann, die Zahlen, einzelne Zeichen oder logische Werte aufnehmen.
Primitive Datentypen sind fest in der Programmiersprache verankerte, elementare Datentypen, die Zahlen, einzelne Zeichen und logische Werte repräsentieren.
{{Zitat|In dem Ausdruck primitiver Datentyp bedeutet das Wort '''primitiv''' "eine elementare Komponente, die verwendet wird, um andere, größere Teile" zu erstellen.|http://www.gailer-net.de/tutorials/java/Notes/chap08/ch08_4.html}}


Die primitiven Datentypen, ihr Speicherbedarf und ihr typischer Wertebereich sind in der folgenden Tabelle aufgeführt.
Die primitiven Datentypen, ihr Speicherbedarf und ihr typischer Wertebereich findest du in der folgenden Tabelle.


{| class="wikitable"
{| {{prettytable}}
! Typname
! Typname
! Größe<ref>Mindestgröße, soweit bekannt</ref>
! Größe<ref>Mindestgröße, soweit bekannt</ref>
! Wertebereich
! Wertebereich
! Beschreibung
! Beschreibung
! Beispiel
|-----
|-----
|<code>boolean</code> || undefiniert<ref>https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html</ref>
|<code>boolean</code> || undefiniert<ref>https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html</ref>
| true / false
| true / false
| Wahrheitswert, Boolescher Typ
| Wahrheitswert, Boolescher Typ
| <code>true</code>
|-
|-
|<code>char</code> || 16 bit
|<code>char</code> || 16 bit
| 0 ... 65.535 (z. B. 'A')
| 0 ... 65.535 (z. B. 'A')
| [[wikipedia:Unicode|Unicode]]-Zeichen (UTF-16)
| [[Unicode]]-Zeichen (UTF-16)
| <code>'x'</code>
|-
|-
|<code>byte</code> || 8 bit || -128 ... 127
|<code>byte</code> || 8 bit || -128 ... 127
| [[Zweierkomplement]]-Wert
| [[Zweierkomplement]]-Wert
| <code>4</code>
|-
|-
|<code>short</code> || 16 bit
|<code>short</code> || 16 bit
| -32.768 ... 32.767 || [[Zweierkomplement]]-Wert
| -32.768 ... 32.767 || [[Zweierkomplement]]-Wert
|<code>128</code>
|-
|-
| int || 32 bit
|<code>int</code> || 32 bit
| -2.147.483.648 ... 2.147.483.647 || [[Zweierkomplement]]-Wert
| -2.147.483.648 ... 2.147.483.647 || [[Zweierkomplement]]-Wert
|<code>256</code>
|-
|-
|<code>long</code> || 64 bit
|<code>long</code> || 64 bit
| -2<sup>63</sup> bis 2<sup>63</sup>-1, ab Java 8 auch 0 bis 2<sup>64</sup> -1<ref>https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html</ref>
| -2<sup>63</sup> bis 2<sup>63</sup>-1, ab Java 8 auch 0 bis 2<sup>64</sup> -1<ref>https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html</ref>
| [[Zweierkomplement]]-Wert
| [[Zweierkomplement]]-Wert
| <code>512L</code>
|-
|-
|<code>float</code> || 32 bit
|<code>float</code> || 32 bit
| +/-1,4E-45 ... +/-3,4E+38 || 32-bit [[wikipedia:IEEE 754|IEEE 754]], es wird empfohlen, diesen Wert nicht für Programme zu verwenden, die sehr genau rechnen müssen.
| +/-1,4E-45 ... +/-3,4E+38 || 32-bit [[wikipedia:IEEE 754|IEEE 754]], es wird empfohlen, diesen Wert nicht für Programme zu verwenden, die sehr genau rechnen müssen.
| <code>1.34f</code>
|-
|-
|<code>double</code> || 64 bit
|<code>double</code> || 64 bit
| +/-4,9E-324 ... +/-1,7E+308 || 64-bit [[wikipedia:IEEE 754|IEEE 754]], doppelte Genauigkeit
| +/-4,9E-324 ... +/-1,7E+308 || 64-bit [[wikipedia:IEEE 754|IEEE 754]], doppelte Genauigkeit
| <code>1.35</code>
|}
|}
<references/>
<references/>
{{Rahmen|<small>Die Tabelle ist eine angepasste Version der Tabelle von https://de.wikibooks.org/wiki/Java_Standard:_Primitive_Datentypen, welche unter der Lizenz [https://creativecommons.org/licenses/by-sa/3.0/deed.de Creative Commons Namensnennung – Weitergabe unter gleichen Bedingungen] bereitgestellt wird.</small>|Dicke=1}}


Die Verwendung der einzelnen Datentypen wird im [https://de.wikibooks.org/wiki/Java_Standard:_Primitive_Datentypen#Zeichen Wikibook ''Java Standard''] vorgestellt.
Die Verwendung der einzelnen Datentypen inklusive Beispielen wird im [https://de.wikibooks.org/wiki/Java_Standard:_Primitive_Datentypen#Zeichen Wikibook ''Java Standard''] vorgestellt.


== Nichtprimitive Datentypen ==
{{Aufgabe:Start}}
Neben den primitiven Datentypen gibt es in Java noch andere Datentypen, die nicht fest in der Programmiersprache integriert sind - also nicht primitiv sind. Jede {{Pfad|Klassen und Objekte|Klasse}} ist ein solcher Datentyp. Beim erstellen von Variablen werden sie genauso verwendet wie die primitiven Typen. Allerdings haben sie einige Besonderheiten, die in den Schritten {{Pfad|Objekte erstellen}} und {{Pfad|Referenzen}} genauer vorgestellt werden.  
# Ordne die Werte den passenden Datentypen zu.
<zuordnung>
::int::42::13::198::45
::double::4.3::5.1::7.9::901.2
::float::4.3f::13.2f
::long::30049L::42L::1703948L
::boolean::true::false
</zuordnung>


Der am meisten verwendete nichtprimitive Datentyp ist <code>String</code>, also Texte beziehungsweise Zeichenketten.
{{Aufgabe:End}}
 
== Nicht primitive Datentypen ==
Neben den primitiven Datentypen gibt es in Java noch andere Datentypen, die nicht fest in der Programmiersprache integriert sind - also ''nicht primitiv'' sind. Jede {{Pfad|Klassen und Objekte|Klasse}} ist ein solcher Datentyp. Beim Erstellen von Variablen werden sie genauso verwendet wie die primitiven Typen. Allerdings haben sie einige Besonderheiten, die in den Schritten {{Pfad|Objekte erstellen}} und {{Pfad|Referenzen}} genauer vorgestellt werden.
 
Der am meisten verwendete nicht primitive Datentyp ist <code>[[#Der Datentyp String|String]]</code>, also Texte beziehungsweise Zeichenketten.


== Variablen ==
== Variablen ==
Variablen sind temporäre Speicher für Informationen eines Datentyps.  
Variablen sind temporäre Speicher für Informationen eines Datentyps. In einem Algorithmus können Variablen benutzt werden, um Daten zur weiteren Verarbeitung vorzuhalten. Nachdem ein Datum einer Variablen '''zugewiesen''' wurde, kann in einem späteren Schritt des Algorithmus wieder darauf '''zugegriffen''' werden.
 
=== Deklarieren und initialisieren ===
Möchte man in Java eine Variable benutzen, muss diese zunächst ''deklariert'' werden. ''Deklarieren'' bedeutet dem Computer zu sagen, dass er im verfügbaren Speicher einen Bereich reservieren soll, der ausreichend Platz für Daten des deklarierten Typs bietet. Der benötigte Speicherplatz jedes primitiven Typs ist in der Tabelle oben aufgeführt.
 
Bei der Deklaration kann der Variablen auch direkt ein Wert zugewiesen werden. Die Variable wird also mit einem Wert ''initialisiert''. Wird kein Initialwert explizit angegeben, dann reserviert Java auch keinen Speicherbereich für die Variable und die Variable hat keinen Wert (auch nicht <code>null</code>). Außer in Spezialfällen sollte daher bei der Deklaration auch direkt ein Initialwert mit angegeben werden.
<!-- weist Java der Variablen implizit einen Wert zu. Für Zahlen ist das <code>0</code> bzw. <code>0.0</code> und für Wahrheitswerte <code>false</code>. -->
 
Die Syntax zur Deklaration von Variablen in Java ist einfach:


{| {{prettytable}}
{| {{prettytable}}
|-
|-
| rowspan=5 | <code>{{Farbig|Datentyp|red}} {{Farbig|Bezeichner|green}};</code>
! Java-Syntax !! Beispiele
| <code>{{Farbig|int|red}} {{Farbig|zahlVariable|green}};</code>
|-
|-
| <code>{{Farbig|boolean|red}} {{Farbig|wahrheit|green}};</code>
| rowspan=5 | <code>{{Farbig|Datentyp|red}} {{Farbig|Bezeichner|blue}};</code>
| <code>{{Farbig|int|red}} {{Farbig|zahlVariable|blue}};</code>
|-
|-
| <code>{{Farbig|double|red}} {{Farbig|x|green}};</code>
| <code>{{Farbig|boolean|red}} {{Farbig|wahrheit|blue}};</code>
|-
|-
| <code>{{Farbig|String|red}} {{Farbig|einText|green}};</code>
| <code>{{Farbig|double|red}} {{Farbig|x|blue}};</code>
|-
|-
| <code>{{Farbig|MyClass|red}} {{Farbig|referenz|green}};</code>
| <code>{{Farbig|String|red}} {{Farbig|einText|blue}};</code>
|-
|-
| rowspan=5 | <code>{{Farbig|Datentyp|red}} {{Farbig|Bezeichner|green}} = {{Farbig|Initialwert|blue}};</code>
| <code>{{Farbig|MyClass|red}} {{Farbig|referenz|blue}};</code>
| <code>{{Farbig|int|red}} {{Farbig|zahl|green}} = {{Farbig|5|blue}};</code>
|-
| rowspan=3 | <code>{{Farbig|Datentyp|red}} {{Farbig|Bezeichner|blue}} = {{Farbig|Initialwert|orange}};</code>
| <code>{{Farbig|int|red}} {{Farbig|zahl| blue}} = {{Farbig|5|orange}};</code>
|-
| <code>{{Farbig|boolean|red}} {{Farbig|wahrheit|blue}} = {{Farbig|true|orange}};</code>
|-
| <code>{{Farbig|String|red}} {{Farbig|einText|blue}} = {{Farbig|"Hallo, Welt!"|orange}};</code>
|}
|}


== Der Datentypen String ==
{{Aufgabe:Start}}
# Wähle alle korrekten Variablen-Deklarationen aus.
<multiplechoice>
(!int zahl = "45";) (int i = 0;) (int ichBinNull;) (!zahl = 5;)
</multiplechoice>
<multiplechoice>
(boolean wahrheit = true;) (!wahrheit = boolean;) (!boolean = false;) (boolean ichBinFalsch;)
</multiplechoice>
<multiplechoice>
(!name String = "Linus";) (!String = "Linus";) (String name;) (String name = "Linus";)
</multiplechoice>
 
{{Aufgabe:End}}
 
=== Gültigkeitsbereiche ===
Variablen in Java haben immer einen ''Gültigkeitsbereich'', indem sie benutzt werden dürfen. Außerhalb dieses Bereichs produziert der {{Pfad|Compiler und Interpreter|Compiler}} einen Fehler, wenn die Variable benutzt wird. Der ''Gültigkeitsbereich'' reicht in der Regel ab der Deklaration der Variablen bis zum Ende des aktuellen ''Blocks''. Blöcke in Java sind durch geschweifte Klammern gekennzeichnet (<code>{}</code>).
<syntaxhighlight lang="java">
int i = 0; // Deklaration von i, Beginn des Gültigkeitsbereichs
if( i == 0 ) {
  boolean b = false; // Deklaration von b, Beginn des Gültigkeitsbereichs
  i = i + 1; // i ist auch im Inneren des if-Blocks gültig
} // Ende des Gültigkeitsbereichs von b
i = 100; // i ist überall gültig
b = true; // Fehler! Gültigkeitsbereich von b verletzt
</syntaxhighlight>
 
== Casting von Datentypen ==
'''Casting''' ist die Überführung eines Datentyps in einen anderen (z.B. <code>byte</code> zu <code>int</code>). Dies kann ''implizit'' oder ''explizit'' geschehen. Implizit bedeutet, dass Java automatisch eine Überführung vornimmt. Explizit bedeutet, dass du die Überführung im Programmtext ''explizit'' einprogrammiert.
 
Bei einigen Datentypen ist das ''Casten'' einfach, zum Beispiel von <code>short</code> zu <code>int</code>, da beide Typen ganze Zahlen darstellen und alle Zahlen, die <code>short</code> speichern kann, auch in <code>int</code> enthalten sind. Bei anderen Typen ist die Überführung nicht so klar, wie zum Beispiel bei <code>boolean</code> zu <code>char</code>. Für jeden dieser Fälle ist in Java klar vorgesehen, wie die Überführung stattfindet.
 
Um ''explizit'' ein Casting durchzuführen, schreibst du den Zieldatentyp (in den überführt wird) in runden Klammern vor den Ausgangswert:
<syntaxhighlight lang="java">
byte b = 42;
// implizites casting von byte nach int
int zahl = b;
// explizites casting von int nach short
short grosseZahl = (short) zahl;
// explizites casting von boolean nach byte
byte wahr = (byte) true;
</syntaxhighlight>
 
== Der Datentyp String ==
Zeichenketten haben in Java eine Sonderstellung. Texte werden durch doppelte Anführungszeichen gekennzeichnet:
Zeichenketten haben in Java eine Sonderstellung. Texte werden durch doppelte Anführungszeichen gekennzeichnet:
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
Zeile 74: Zeile 153:
</syntaxhighlight>
</syntaxhighlight>


Diese Art einen Text zu erzeugen ist allerdings nur eine Kurzform für das Erstellen einer neuen Objektinstanz der Klasse <code>String</code>. Obiger Quelltext ist dann gleichbedeutend mit
Diese Art einen Text zu erzeugen ist allerdings nur eine Kurzform für das {{Pfad|Objekte erstellen|Erstellen einer neuen Objektinstanz}} der Klasse <code>String</code>. Obiger Quelltext ist dann gleichbedeutend mit
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
String text = new String("Hallo, Welt!");
String text = new String("Hallo, Welt!");
</syntaxhighlight>
</syntaxhighlight>


Da eine Zeichenkette also ein Objekt ist, besitzt jedes Textobjekt auch Methoden, die auf ihm aufgerufen werden können. Folgende Zeilen sind zum Beispiel korrekter Jacacode:
Da eine Zeichenkette also ein {{Pfad|Klassen und Objekte|Objekt}} ist, besitzt jedes Textobjekt auch Methoden, die auf ihm aufgerufen werden können. Folgende Zeilen sind unter anderem korrekter Javacode:
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
String text = new String("Hallo, Welt!");
String text = new String("Hallo, Welt!");
Zeile 86: Zeile 165:
</syntaxhighlight>
</syntaxhighlight>


Die komplette Übersicht der Methoden der Klasse <code>String</code> kann in der Java API Dokumentation nachgelesen werden:
Die komplette Übersicht der Methoden der Klasse <code>String</code> kannst du in der Java API Dokumentation<ref>https://docs.oracle.com/javase/8/docs/api/java/lang/String.html</ref> nachlesen.
* https://docs.oracle.com/javase/8/docs/api/java/lang/String.html
 
{{Inhalt/Übersicht}}
8.581

Bearbeitungen