17.01.2014 Aufrufe

Primitive Datentypen

Primitive Datentypen

Primitive Datentypen

MEHR ANZEIGEN
WENIGER ANZEIGEN

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>

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!