Primitive Datentypen
Primitive Datentypen
Primitive Datentypen
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Primitive</strong> <strong>Datentypen</strong><br />
Dr. Wolfgang Süß
Bezeichner<br />
<br />
<br />
<br />
<br />
<br />
Für Variablen, Methoden, Klassen und Schnittstellen werden<br />
Bezeichner – auch Identifizierer (von eng. identifier) genannt –<br />
vergeben.<br />
Ein Bezeichner ist eine Folge von Zeichen, die fast beliebig lang sein<br />
kann (die Länge ist nur theoretisch festgelegt). Die Zeichen sind<br />
Elemente aus dem gesamten Unicode-Zeichensatz, und jedes Zeichen<br />
ist für die Identifikation wichtig. Das heißt, ein Bezeichner, der 100<br />
Zeichen lang ist, muss auch immer mit allen 100 Zeichen korrekt<br />
angegeben werden.<br />
Jeder Java-Bezeichner muss entweder mit einem Unicode-Buchstaben<br />
oder mit »_« oder »$« beginnen. Ein Unicode-Buchstabe ist zum<br />
Beispiel aus dem Bereich »A« bis »Z« (auch »a« bis »z«).<br />
Nach dem ersten Buchstaben können neben den Buchstaben auch<br />
Ziffern folgen.<br />
Es wird zwischen Groß-/Kleinschreibung unterschieden wird.<br />
Dr. Wolfgang Süß<br />
2<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Beispiele<br />
<br />
<br />
Gültige Bezeichner:<br />
mami<br />
kulliReimtSichAufUlli<br />
IchMussWilliAnrufen<br />
RAPHAEL_IST_LIEB<br />
Ungültige Bezeichner:<br />
2und2macht4<br />
class<br />
hose gewaschen<br />
hurtig!<br />
Dr. Wolfgang Süß<br />
3<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Reservierte Schlüsselwörter<br />
abstract assert boolean break byte byvalue case cast<br />
catch char class const continue default do double else<br />
enum extends final finally float for future generic goto<br />
if implements import instanceof int inner interface long<br />
native new null operator outer package private<br />
protected public rest return short static strictfp super<br />
switch synchronized this throw throws transient try var<br />
void volatile while<br />
Dr. Wolfgang Süß<br />
4<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Quelltext dokumentieren<br />
<br />
<br />
Mit Kommentaren den Überblick bewahren<br />
Kommentare erleichtern es, zu einem späteren Zeitpunkt die<br />
Funktionsweise einzelner Teile nachzuvollziehen.<br />
Kommentare werden direkt in den Queltext aufgenommen.<br />
Da Kommentare vom Compiler überlesen werden sollen,<br />
müssen sie Kommentare als solche kennzeichnen.<br />
In Java gibt es zwei grundlegende Kommentartypen:<br />
Einzeilige Kommentare //<br />
<br />
<br />
Kommentar bis zum Ende der Zeile.<br />
Alle Zeichen hinter // werden vom Compiler überlesen.<br />
Mehrzeilige Kommentare /* */<br />
<br />
<br />
Kommentar über mehrere Zeilen.<br />
Ab der Zeichenkombination /* werden alle Zeichen im<br />
Quelltext vom Compiler überlesen, bis die<br />
Zeichenkombination */ auftritt.<br />
Dr. Wolfgang Süß<br />
5<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Beispiel<br />
class Comment {<br />
// Definition der Klasse<br />
public static void main( String args[] ) {<br />
System.out.println( "Hallo Welt" );<br />
// Mit dem Befehl können<br />
// Sie einen Text ausgeben<br />
/* zu Testzwecken als Kommentar:<br />
System.out.println( "Hallo Europa" );<br />
// diese Ausgabe ist als<br />
// Kommentar gekennzeichnet<br />
// und wird daher nicht<br />
// ausgefuehrt<br />
*/<br />
}<br />
}<br />
Dr. Wolfgang Süß<br />
6<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Anweisungen<br />
<br />
<br />
<br />
Anweisungen (Statements) beschreiben vom Programmierer erstellte<br />
Befehle zur Lösung einer Aufgabe.<br />
Ein Programm besteht aus eine Folge von Anweisungen, die in einer<br />
bestimmten Reihenfolge ausgeführt werden.<br />
Syntax für Anweisungen:<br />
Eine Anweisung besteht aus einer einfachen Anweisung oder aus<br />
einem Anweisungsblock.<br />
Eine einfache Anweisung wird mit einem Semikolon abgeschlossen.<br />
Ein Anweisungsblock fastt mehrere einfache Anweisungen in<br />
geschweiften Klammern { } zusammen.<br />
Die Klammern { } müssen immer paarweise auftreten.<br />
Anweisungsblöcke können geschachtelt werden.<br />
Dr. Wolfgang Süß<br />
7<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Beispiel<br />
statement;<br />
// Einfache Anweisung<br />
// oder<br />
{ // Beginn eines Anweisungsblocks<br />
statement1;<br />
statement2;<br />
….. // weitere Anweisungen<br />
} // Ende des Anweisungsblocks<br />
Dr. Wolfgang Süß<br />
8<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
<strong>Primitive</strong> <strong>Datentypen</strong><br />
<br />
<br />
<br />
In Java gibt es zwei Arten von <strong>Datentypen</strong>:<br />
<strong>Primitive</strong> <strong>Datentypen</strong><br />
Klassen<br />
In den Anweisungen eines Programms wird mit Daten gearbeitet, die<br />
sich in ihrer Art unterscheiden:<br />
Zahlen (numerische Daten)<br />
Zeichen (alphanumerische Daten)<br />
Boolesche (logische Daten)<br />
Java legt mit den primitiven <strong>Datentypen</strong> fest, welche Daten jeweils<br />
zulässig sind. Die Art der Daten unterscheiden sich durch:<br />
ihren zulässigen Wertebereich<br />
in der Größe des dafür benötigten Speicherplatzes<br />
Dr. Wolfgang Süß<br />
9<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
<strong>Primitive</strong> <strong>Datentypen</strong><br />
<br />
<br />
<br />
Numerische <strong>Datentypen</strong><br />
Integer-Datentyp<br />
Für ganze Zahlen (ohne Nachkommastellen) mit Vorzeichen.<br />
Vier verschiedene Varianten: byte, short, int, long<br />
Gleitkomma Datentyp<br />
Für Dezimalzahlen mit Vorzeichen.<br />
Nicht jede Zahl darstellbar Rundungsfehler<br />
Zwei verschiedene Varianten: float und double<br />
Zeichen-Datentyp<br />
Zur Darstellung alphanumerischer Zeichen wird der Datentyp char verwendet.<br />
Er enthält ein beliebiges UniCode-Zeichen.<br />
Boolescher (logischer Datentyp)<br />
Wahrheitswerte werden in Java durch den Datentyp boolean repräsentiert.<br />
Werte true und false (boolesche Literale)<br />
Dr. Wolfgang Süß<br />
10<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Literale für primitive <strong>Datentypen</strong><br />
Im Quelltext verwendete Werte (z.B. Zahlen) werden als Literale bezeichnet.<br />
<br />
<br />
Numerische <strong>Datentypen</strong><br />
Für numerische Werte des Integer-Datentyps können die Vorzeichen +<br />
bzw. – und die Ziffern 0 ..9 verwendet werden. Das Vorzeichen + kann<br />
auch entfallen.<br />
Als Dezimaltrennzeichen bei Gleitkommazahlen wird der Punkt .<br />
verwendet.<br />
Die Exponentialschreibweise für Gleitkommazahlen sieht z.B.<br />
folgendes vor: 4.56e3 4.56E3 -5.677e90 +6.777e-8<br />
Für den Datentyp long wird das Suffix L verwendet, z.B. 126L<br />
Für den Datentyp float wird das Suffix F verwendet, z.B. 100.0F<br />
Boolescher Datentyp<br />
Boolesche Literale sind true und false<br />
Dr. Wolfgang Süß<br />
11<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Literale für primitive <strong>Datentypen</strong><br />
<br />
Alphanumerischer Datentyp char<br />
Einzelne Zeichen werden bei<br />
der Wertzuweisung durch<br />
Apostrophe ' eingeschlossen.<br />
Zeichen können auch als<br />
UniCode-Escape-Sequenzen<br />
dargestellt werden. Die<br />
Escape-Sequenz ist in<br />
Apostrophe ' zu setzen.<br />
Mit der Escape Sequenz \u<br />
kann der Unicode für das<br />
gewünschte Zeichen direkt<br />
angegeben werden.<br />
Escape-<br />
Sequenz<br />
\u...<br />
Bsp:\u0045<br />
\b<br />
\t<br />
\n<br />
\f<br />
\r<br />
\"<br />
\'<br />
\\<br />
Bedeutung<br />
Ein spezielles Zeichen (im Beispiel<br />
das Zeichen E mit dem UniCode<br />
0045<br />
Backspace<br />
Tabulator<br />
line feed<br />
form feed<br />
carriage return<br />
Anführungszeichen<br />
Hochkomma<br />
Backslash<br />
Dr. Wolfgang Süß<br />
12<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Liste der primitiven <strong>Datentypen</strong> in Java<br />
Typ Größe Minimum Maximum Defaultwert Beispiel<br />
boolean 1-bit - - false false<br />
char 16-bit Unicode 0 Unicode 2 16 -1 \u0000 (null) ‘a’<br />
byte 8-bit -128 +127 (byte) 0 34<br />
short 16-bit -2 15 +2 15 -1 (short) 0 21345<br />
int 32-bit -2 31 +2 31 -1 0 42322554<br />
long 64-bit -2 63 +2 63 -1 0L 134567L<br />
float 32-bit 0.0f 3.1415f<br />
double 64-bit 0.0d 325.3245d<br />
void - - -<br />
Dr. Wolfgang Süß<br />
13<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Variablen<br />
<br />
<br />
Was sind Variablen?<br />
Die Anweisungen eines Programms arbeiten mit Daten, die z.B. als<br />
Zwischenergebnisse bei Berechnungen immer wieder verändert und<br />
somit variable Werte darstellen.<br />
Dazu werden sogenannte Variablen verwendet, für die entsprechende<br />
Speicherplatz im Arbeitsspeicher des Computers reserviert wird.<br />
Zugriff auf den Speicherplatz über den Variablennamen.<br />
Definition von Variablen mit einem Namen und einem Datentyp.<br />
Voraussetzung für die Nutzung von Variablen<br />
Eine Variable muss definiert sein, bevor sie Daten aufnehmen kann.<br />
Eine Variable muss einen Wert enthalten, bevor sie verwendet werden<br />
kann.<br />
Dr. Wolfgang Süß<br />
14<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Gültigkeitsbereich lokaler Variablen<br />
<br />
<br />
<br />
<br />
<br />
Java kennt verschiedene Arten von Variablen<br />
Variablen, die innerhalb eines Anweisungsblocks einer Methode<br />
definiert werden, heißen lokale Variablen.<br />
Lokale Variablen sind nur innerhalb des definierenden Blocks gültig<br />
lokaler Gültigkeitsbereich.<br />
Eine lokale Variable verliert mit der schließenden Klammer } des<br />
Blocks ihre Gültigkeit<br />
Ein Bezeichner in Java muss eindeutig sein.<br />
Dr. Wolfgang Süß<br />
15<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Beispiel<br />
Zulässig<br />
Unzulässig<br />
{<br />
}<br />
…..<br />
{<br />
int number;<br />
…<br />
// Die Variable number ist hier<br />
// nicht mehr gültig<br />
{<br />
}<br />
int number;<br />
…<br />
{<br />
int number; // unzulässig<br />
}<br />
…..<br />
int number;<br />
/* jetzt exisitiert wieder eine<br />
lokale Variable mit dem<br />
Namen number */<br />
…<br />
/* Diese Variablendefinition ist nicht<br />
zulässig, da die Variable number aus<br />
dem übergeordneten Block noch gültig<br />
ist. */<br />
}<br />
Dr. Wolfgang Süß<br />
16<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Syntax der Variablendefinition<br />
<br />
<br />
<br />
<br />
<br />
Die Variablendefinition besteht aus einem Datentyp besteht aus<br />
einem Datentyp und dem Namen der Variablen:<br />
type identifier [, identifier1 …];<br />
Die Definition einer Variablen ist eine Anwendung und wird mit einem<br />
Semikolon abgeschlossen.<br />
Die Namen der Variablen werden direkt nach dem Datentyp, getrennt<br />
durch ein oder mehrere Leerzeichen, angegeben.<br />
Mehrere Variablen desselben Typs können in einer Anweisung<br />
definiert werden. Die Variablennamen werden dabei durch Komma<br />
getrennt.<br />
Die Namen der Variablen halten sich dabei an die Vorgaben für<br />
Bezeichner.<br />
Dr. Wolfgang Süß<br />
17<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Benennung und Definition von Variablen<br />
<br />
<br />
<br />
Variablennamen beginnen üblicherweise mit einem Kleinbuchstaben<br />
Soll ein Name aus mehreren Wörtern zusammengesetzt werden, werden die<br />
Wörter direkt hintereinander geschrieben ohne Trennzeichen. Zur<br />
Abgrenzung werden die Wörter mit Großbuchstaben begonnen:<br />
Bsp: time, maxTextLength, timeToEnd.<br />
Beispiele:<br />
double preis;<br />
float umfang, radius;<br />
int anzahl = 2;<br />
char a = ‘c’;<br />
<br />
Ungültige Beispiele:<br />
double &count;<br />
float a b c;<br />
//Bezeichner von Variablen dürfen kein & enthalten<br />
//mehrere Variablen durch Kommata trennen<br />
Dr. Wolfgang Süß<br />
18<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Werte zuweisen<br />
<br />
<br />
Wertzuweisung und Initialisierung von Variablen<br />
Mit der Definition einer Variablen ist durch den Datentyp lediglich<br />
festgelegt, welche Daten in der Variablen gespeichert werden können.<br />
Der Wert ist noch unbestimmt, die Variable ist noch nicht initialisiert.<br />
Bei der Definition einer lokalen Wertzuweisung keine automatische<br />
Wertzuweisung Initialisierung (erste Wertzuweisung)<br />
Wert der Variable kann jederzeit geändert werden<br />
Syntax für Wertzuweisungen an Variablen<br />
identifier = expression;<br />
Nach dem Namen der Variablen folgt der Zuweisungsoperator = und der<br />
Ausdruck.<br />
Der Ausdruck kann ein Literal sein, oder ein komplexer Ausdruck.<br />
Die Wertzuweisung wird als Anweisung mit einem Semikolon<br />
abgeschlossen.<br />
Dr. Wolfgang Süß<br />
19<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Beispiele<br />
int i; // Definitionen<br />
int k;<br />
int c;<br />
double d = 1.7; // zusätzlich zur Definition Initialisierung<br />
(Deklaration)<br />
// richtige Wertzuweisungen<br />
i= 20;<br />
k=i;<br />
c='a';<br />
// fehlerhafte Wertzuweisungen<br />
i= 0.15; // 0.15 ist kein gültiger int-Wert<br />
v=7;<br />
// keine Variable mit Namen v definiert.<br />
c="Test"; // "Test" ist kein char-Wert<br />
Dr. Wolfgang Süß<br />
20<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Typkompatibilität und Typkonversion<br />
<br />
<br />
<br />
Typkompatibilität<br />
Einer Variablen kann nur der Wert des Datentyps zugewiesen werden,<br />
den sie selbst besitzt oder den sie aufgrund ihre Wertebereichs<br />
umfasst.<br />
Beispiel: Der Datentyp int ist kompatibel zum Datentyp double, aber<br />
double ist nicht kompatibel zu int.<br />
Typkonversion<br />
Bei kompatiblen Typen führt Java automatisch eine implizite<br />
Typkonversion durch.<br />
Sind die Typen nicht kompatibel, so kann eine explizite<br />
Typkonversion (cast) durchgeführt werden.<br />
Logische Werte (boolean) können nicht umgewandelt werden.<br />
Syntax für die explizite Typkonversion<br />
(type) expression<br />
Dr. Wolfgang Süß<br />
21<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Beispiele:<br />
int position = 100;<br />
double size = 1.45;<br />
double weight = 80;<br />
int number = 1.23;<br />
int number= (int)1.23;<br />
float laenge=1.45;<br />
float laenge=1.45F;<br />
float laenge=1.45f;<br />
// korrekt<br />
// korrekt<br />
// korrekt<br />
// falsch, Compiler liefert eine Fehlermeldung<br />
// korrekt durch erzwungene<br />
// Datenkonversion. number erhält den Wert 1<br />
// falsch, Literal ist vom Typ double<br />
// Compiler liefert: possible loss of precision<br />
// korrekt<br />
// korrekt<br />
Dr. Wolfgang Süß<br />
22<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Konstanten – unveränderliche Variablen<br />
<br />
<br />
<br />
<br />
<br />
In Java werden Konstanten durch unveränderliche Variablen<br />
dargestellt.<br />
Sobald während der Programmausführung eine Wertzuweisung<br />
erfolgt ist, ist diese endgültig (final). Es kann keine zweite<br />
Wertzuweisung an eine Konstante erfolgen, nachdem sie intialisiert<br />
ist.<br />
Syntax der Konstantendefinition und Initialisierung<br />
final type identifier1 [, identifier2 ....];<br />
identifier1 = expression1;<br />
Beispiel<br />
final double MWST = 0.16;<br />
final double PI = 3.1415;<br />
Üblicherweise werden Konstanten mit Großbuchstaben geschrieben.<br />
Dr. Wolfgang Süß<br />
23<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Vergleichsoperatoren und arithmetische Operatoren<br />
Operator Bedeutung Art Resultat Beispiel<br />
==, != Gleichheit, Ungleichheit binär boolean a == 12<br />
= Vergleich binär boolean a >= 128<br />
+, - Addition, Subtraktion binär numerisch a + 12<br />
*, / Multiplikation, Division binär numerisch a / 2<br />
% Modulo binär numerisch a % 2<br />
++, -- Inkrement, Dekrement unär numerisch i++<br />
+=, -=, *=,<br />
/=, %=<br />
Zuweisungsoperator binär numerisch a *= 2<br />
Dr. Wolfgang Süß<br />
24<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Logische Operatoren<br />
Operator Bedeutung Art Resultat Beispiel<br />
==, != Gleichheit, Ungleichheit binär boolean b1 == b2<br />
! Negation unär boolean ! b2<br />
& Und (vollständig) binär boolean b1 & b2<br />
&& Und (kurzauswertung) binär boolean b1 && b2<br />
| Oder (vollständig) binär boolean b1 | b2<br />
|| Oder (kurzauswertung) binär boolean b1 || b2<br />
Dr. Wolfgang Süß<br />
25<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Priorität von Operatoren<br />
Operator<br />
++, --, !, (Typ), +, - (unäres Plus und Minus)<br />
*,/,%<br />
+, -<br />
, >>><br />
=, instanceof<br />
==, !=<br />
&<br />
^<br />
|<br />
&&<br />
||<br />
?:<br />
=<br />
*=, /=, %=, +=, -=, =, >>>=, &=, ^=,|=<br />
Priorität<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
10<br />
11<br />
12<br />
13<br />
14<br />
Dr. Wolfgang Süß<br />
26<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Ausgabe<br />
<br />
<br />
<br />
<br />
In der Klasse java.lang.System realisiert.<br />
Drei Streams<br />
Standardausgabe:System.out<br />
Standardfehlerausgabe: System.err<br />
Standardeingabe: System.in<br />
Ausgabe auf Konsole (stdout, stderr):<br />
Beispiel:<br />
System.out.println("Ich bin ein<br />
Zeile");<br />
System.out.print("Ich bin");<br />
System.out.println(" eine Zeile");<br />
System.err.println("Aaaargghh ich<br />
steeer....");<br />
Dr. Wolfgang Süß<br />
27<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Daten formatiert ausgeben<br />
<br />
<br />
Seit Java 1.5 gibt es auch die Möglichkeit Daten formatiert auszugeben (ähnlich wie<br />
in C).<br />
Beispiele:<br />
System.out.printf( "Hallo %s. Es gab ein Anruf von %s.", "Ulli", "Tanja" );<br />
int i = 123;<br />
System.out.printf( "|%d| |%d|\n" , i, -i); // |123| |-123|<br />
System.out.printf( "|%5d| |%5d|\n" , i, -i); // | 123| | -123|<br />
System.out.printf( "|%-5d| |%-5d|\n" , i, -i); // |123 | |-123 |<br />
double d = 1234.5678;<br />
System.out.printf( "|%10f| |%10f|\n" , d, -d); // |1234,567800| |-1234,567800|<br />
System.out.printf( "|%10.2f| |%10.2f|%n" , d, -d); // | 1234,57| | –1234,57|<br />
System.out.printf( "|%010.2f| |%010.2f|\n", d, -d); // |0001234,57| |-001234,57|<br />
Dr. Wolfgang Süß<br />
28<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Eingabe<br />
<br />
Einlesen von Konsole: (mit Ausnahmebehandlung)<br />
byte buffer[] = new byte[80];<br />
int num_char;<br />
String input = "";<br />
System.out.print("Bitte gib mal was ein: ");<br />
try {<br />
num_char = System.in.read(buffer, 0, 80);<br />
input = new String(buffer,0, num_char);<br />
} catch (IOException e) {<br />
System.err.println("IO Fehler");<br />
}<br />
System.out.println(">>>>>>" + input);<br />
<br />
Benutzung der Klasse Utils:<br />
Zur Vereinfachung kann die Klasse Utils in das<br />
Programm importiert werden, die das Einlesen<br />
erleichtert.<br />
Utils ist auf der Homepage verfügbar.<br />
Dr. Wolfgang Süß<br />
29<br />
<strong>Primitive</strong> <strong>Datentypen</strong>
Beispiel für die Benutzung von Utils<br />
class InputDemo {<br />
// kleines Demo Programm zur Demonstration<br />
// der Eingabemethoden<br />
// Utils.inputInteger(...)<br />
// Utils.inputString(...)<br />
// Utils.inputFloat(...)<br />
public static void main(String argv[]) {<br />
String str = Utils.inputString(" gib Text ein:");<br />
int z = Utils.inputInteger("und jetzt ne Zahl:");<br />
float f = Utils.inputFloat("und ne Gleitkommazahl:");<br />
}<br />
}<br />
System.out.println(" String: " + str );<br />
System.out.println("Integer: " + z );<br />
System.out.println("Float: " + f);<br />
Dr. Wolfgang Süß<br />
30<br />
<strong>Primitive</strong> <strong>Datentypen</strong>