Universität Bremen Elementare Datentypen Datentyp Default Speicherplatz Wertebereich byte 0 1 Byte (8 Bits) -128 bis 127 short 0 2 Bytes (16 Bits) -32768 bis 32767 int 0 4 Bytes (32 Bits) -2147483648 bis 2147483647 long 0 8 Bytes (64 Bits) -9223372036854775808 bis 9223372036854775807 float 0.0 4 Bytes (32 Bits) ±1.40239846E-45 bis ±3.40282347E+38 double 0.0 8 Bytes (64 Bits) ±4.94065645841246544E-324 bis ±1.79769313486231570E+308 boolean false ? (min. 1 Bit) false, true char 2 Bytes (16 Bits) '\u0000' bis '\uFFFF' '\u0000' Einführung in die Programmierung mit Java 37 Universität Bremen Ganzzahlige Datentypen Zahlensysteme 44 22 = 4*10+2 4*10+2 11 00 = 32+8+2 32+8+2 Oktal, nur die Ziffern 0 bis 7 55 22 Hexadezimal, die Ziffern 0 bis 9 und A bis F 22 AA = 2*16+10 2*16+10 Dezimal, es gibt die Ziffern 0 bis 9 Binär, nur die Ziffern 0 und 1 11 00 11 00 = 5*8+2 5*8+2 Literale Dezimal: 42, +42, -42, 42L, 42l Oktal: 052, +052, -052, 052L, 052l Hexadezimal: 0x2A, +0x2a, -0x2A, 0x2aL, 0x2Al Einführung in die Programmierung mit Java Ein EinLLam amEnde Ende bedeutet bedeutetlong long 38 Universität Bremen Fließkommazahlen Format -- 44 22 .. 11 44 11 55 EE Mantisse Exponent Wert = Mantisse × 10Exponent Literale Float: 0.0f, .382f, 3.1415F, -3.1415f, 17E7f, 17e-7f, 17E+7F Double: 0.0, .0392039029303, -3.141592653589d, 1E+100 Ein EinFFam amEnde Endebedeutet bedeutetfloat, float, ein einDDdouble. double.Wird Wirdnichts nichtsanangegeben, ist der Typ double gegeben, ist der Typ double Einführung in die Programmierung mit Java 39 ++ 11 77 Universität Bremen Zeichen Literale 'a', 'b', 'c' '\r' '\n' '\f' '\t' '\b' '\'' '\\' '\u12ab' \ \==Escape-Zeichen Escape-Zeichen f\u006fr(int f\u006fr(inti i==0;0;i i<<10; 10;++i) ++i) = Normal: Wagenrücklauf: Zeilenvorschub: Seitenvorschub: Tabulatorsprung: Backspace: Hochkomma: Backslash: Unicode Zeichen: for(int for(inti i==0;0;i i<<10; 10;++i) ++i) Java-Quelltexte Java-Quelltextewerden werdenim imUnicode Unicodeverarbeitet. verarbeitet. An Anjeder jederStelle Stellekann kann\uXXXX \uXXXXstehen. stehen. Einführung in die Programmierung mit Java 40 Universität Bremen Zeichenketten String ist eine Klasse, kein Basistyp Literale Daher kann man Ausdrücke schreiben, wie z.B. s.equals("Hallo") "Hallo", "wie geht's?" "Ich sage \"mir geht's gut\"" → Ich sage "Mir geht's gut" Beispiele System.out.println("\"DM\"\t\"Euro\"\n1\t0,51"); "DM" "Euro" 1 0,51 In InString-Literalen String-Literalenkönnen könnenalle alleEscape-Sequenzen Escape-Sequenzen aus auschar-Literalen char-Literalenverwendet verwendetwerden werden Einführung in die Programmierung mit Java 41 Universität Bremen Typkonvertierung Automatisch Manuell byte → short → int → long → float → double char byte b; short s; int i; long l; float f = 1.5; double d = -1.5; char c; b = (byte) f; (b == 1) f = (float) 178.2 Bei Beider derTypumwandlung Typumwandlungvon vondouble/float double/floatinin l = (int) d; (l == -2) einen einenGanzzahltyp Ganzzahltypwird wirdimmer immerabgerundet abgerundet c = (char) 32 Durch Funktionen String s = Integer.toString(i); i = Integer.parseInt(s); d = Double.parseDouble(s); Einführung in die Programmierung mit Java 42 Universität Bremen Wrapper-Klassen Datentyp Datentyp Wrapper Wrapper byte byte short short int int long long float float double double boolean boolean char char Byte Byte Short Short Integer Integer Long Long Float Float Double Double Boolean Boolean Character Character Generell Generell Wrapper.MAX_VALUE Wrapper.MAX_VALUE Wrapper.MIN_VALUE Wrapper.MIN_VALUE Wrapper.parseWrap(String Wrapper.parseWrap(Strings) s) z.B. z.B.Integer.toString(1234); Integer.toString(1234); Float Floatund undDouble Double Wrapper.NEGATIVE_INFINITY Wrapper.NEGATIVE_INFINITY Einführung in die Programmierung mit Java z.B. z.B.Integer.parseInt("1234"); Integer.parseInt("1234"); Wrapper.toString(type Wrapper.toString(typet)t) z.B. z.B.Byte.MAX_VALUE Byte.MAX_VALUE z.B. z.B.Double.NEGATIVE_INFINITY Double.NEGATIVE_INFINITY Wrapper.POSITIVE_INFINITY Wrapper.POSITIVE_INFINITY Wrapper.NaN Wrapper.NaN 43 Universität Bremen Nachschlagen in der Dokumentation Einführung in die Programmierung mit Java 44 Universität Bremen Variablen int boolean i 7 true s "Hallo" Richtig b String int i = 7; boolean b = true; String s = "Hallo"; Falsch boolean b = 7; boolean b = "Hallo"; Einführung in die Programmierung mit Java 45 Universität Bremen Konstanten Allgemein Konstanten sind benannte Literale, können also überall verwendet werden, wo auch Literale zulässig sind (z.B. hinter case in der switch-Anweisung) Im Gegensatz zu Variablen kann sich der Wert einer Konstanten niemals ändern Beispiel: final int IS_NUMBER = 1, IS_KEYWORD = 2; : switch(type) { case IS_NUMBER: : case IS_KEYWORD: : } Einführung in die Programmierung mit Java 46 Universität Bremen Bezeichner für Variablen/Konstanten Erstes Zeichen muss ein Buchstabe, '_' oder '$' sein Alle weiteren Zeichen können Buchstaben, Ziffern, '_' oder '$' sein Für Variablen keine Bezeichner von Schlüsselwörtern verwenden abstract boolean break byte case catch char class const continue default do double else extends final finally float for goto if implements import instanceof int interface long native new package private throw protected throws public transient return try short void static volatile super while switch synchronized this Groß- und Kleinschreibung wird unterschieden Einführung in die Programmierung mit Java 47 Universität Bremen Konventionen für Bezeichner Variablen i, j args stream thisIsAVeryLongName Konstanten Für Laufvariablen in Schleifen: Für die Argumente von main: Variablen beginnen mit Kleinbuchstaben: Mehrere Worte werden durch Großbuchstaben aneinander gefügt: '_' und '$' werden nicht verwendet Nur Großbuchstaben, Ziffern und '_' MAX_WORDS, Math.PI Klassen Genau wie Variablen, beginnen aber mit einem Großbuchstaben Einführung in die Programmierung mit Java System, Greetings 48 Universität Bremen Lebenszeit/Sichtbarkeit Lebenszeit In Funktionen bis Ende des aktuellen Blocks {...} Ausnahme: Funktionsparameter Ausnahme: Definitionen in for for(int i = 0; i < 10; ++i) {...} ist eigentlich { for(int i = 0; i < 10; ++i) {...} } Sichtbarkeit, Suchen nach Bezeichner void f(int a) {...} ist eigentlich void f { (int a) {...} } In Funktion rückwärts, aber nicht in Blöcke hinein In Funktionsparametern In Klasse (auch hinter der aktuellen Funktion) class classHideAndSeek HideAndSeek {{ static staticint inttarget; target; static staticvoid voidmain(String[] main(String[]args) args) {{ System.out.println(target); System.out.println(target); {{ int inttarget target==17; 17; System.out.println(target); System.out.println(target); }} System.out.println(target); System.out.println(target); }} }} Mehrfachdefinitionen nicht in Funktionen, d.h. void f(int a) {int a; {int a;}} nicht erlaubt Einführung in die Programmierung mit Java 49 Universität Bremen Arrays Definition Eine Reihung fester Länge von Variablen gleichen Typs, auf die mit einem Index zugegriffen werden kann. Arrays sind Objekte Beispiel String[.] a = { "Herbert Pappelbusch", "Irene Schmidt", "Claudia Miesmuffel", : "Tobias Kleinemann", "Mareike Bumtrupp" }; Einführung in die Programmierung mit Java 50 Universität Bremen Eindimensionale Arrays Beispiel String[.] a = new String[50]; a[0] = "Herbert Pappelbusch"; a[1] = "Irene Schmidt"; a[2] = "Claudia Miesmuffel"; : a[48] = "Tobias Kleinemann"; a[49] = "Mareike Bumtrupp"; String s = "Tobias Kleinemann"; for(int i = 0; i < a.length; ++i) if(a[i].equals(s)) System.out.println("Gefunden!"); Einführung in die Programmierung mit Java 51 Universität Bremen Zweidimensionale Arrays Beispiel String[.][.] a = { {"Herbert","Pappelbusch","Herr"}, {"Irene","Schmidt","Frau"}, : }; for(int i = 0; i < a.length; ++i) System.out.println(a[i][2] + " " + a[i][0] + " " + a[i][1]); Einführung in die Programmierung mit Java 52 Universität Bremen Mehrdimensionale Arrays Dimensionen Eine beliebige Anzahl von Dimensionen ist möglich Speicherplatzverbrauch bedenken! Ein zweidimensionales Array ist ein Array von Arrays Daher können die Arrays in weiteren Dimensionen selbst auch wieder unterschiedliche Größen haben Beispiel int[.][.] a = new int[5][.]; a[0] = new int[3]; a[1] = new int[2]; a[2] = new int[4]; Einführung in die Programmierung mit Java 53 Universität Bremen Operatoren Stelligkeiten Arten Unäre Operatoren, z.B die Vorzeichen '+' oder '-' Binäre Operatoren, z.B. die Rechenoperationen '+' oder '-' Trinärer Operator '? :' Vergleichsoperatoren, z.B. '>' oder '<' Logische Operatoren, z.B. '&&' oder '||' Arithmetische Operatoren, z.B. '+' oder '-' Bit-Operatoren, z.B. '>>' oder '&' Zuweisungsoperatoren Operatoren können abhängig vom Typ der Operanden unterschiedliche Auswirkungen haben z.B. ist 1+1 == 2, aber "1"+"1" ergibt "11" Einführung in die Programmierung mit Java 54 Universität Bremen Vergleichsoperatoren Allgemein Numerische Operatoren Vergleichsoperatoren liefern immer einen Wahrheitswert (boolean) zurück Beide Operanden müssen einen kompatiblen Typ haben Gleichheit: Ungleichheit: Größer: Größer oder gleich: Kleiner: Kleiner oder gleich: age == 18 age != 18 age > 18 age >= 18 age < 18 age <= 18 Für Objekte (z.B. Strings) Identität: Gleichheit s1 == s2 (Ist s1 dieselbe Zeichenkette wie s2?) s1.equals(s2) (ist kein Operator sondern eine Funktion) Einführung in die Programmierung mit Java 55 Universität Bremen Logische Operatoren Allgemein Operatoren Logische Operatoren verrechnen ein oder zwei Wahrheitswerte zu einem neuen Wahrheitswert Logisches Nicht: Logisches Und: Logisches Oder: !(age > 18) == (age <= 18) age > 18 && age < 65 age <= 18 || age >= 65 Unvollständige Auswertung if(age > 18 && age < 65) ... entspricht if(age > 18) if(age < 65) ... if(age <= 18 || age >= 65) ... entspricht if(age > 18) ... else if(age < 65) ... Nützlich z.B. für if(d != 0 && 100 / d > 1) oder if(d == 0 || 100 / d > 1) Einführung in die Programmierung mit Java 56 Universität Bremen Arithmetische Operatoren Allgemein Arithmetische Operatoren verrechnen ein oder zwei Werte zu einem neuen Wert Bei zwei Operanden müssen beide einen kompatiblen Typ haben Der Ergebnistyp ist identisch mit dem „größeren“ Typ der beiden Operanden Operatoren Addition: Subtraktion: Multiplikation: Division: Modulo (Divisionsrest): a + b, 17 + 4, 17 + 4.0 "a" + "b" ("ab"), 17 + "4" ("174"), "17" + 4. ("174.0") a - b, 17 - 4, 17 - 4.0 a * b, 17 * 4, 17 * 4.0 a / b, 17 / 4 (== 4), 17 / 4.0 (== 4.25) a % b, 17 % 4 (== 1), 17.5 % 4.5 (== 4.0) Einführung in die Programmierung mit Java 57 Universität Bremen Arithmetische Operatoren Ganzzahlarithmetik Überlauf ist kein Fehler Das Ergebnis wird auf die entsprechende Bit-Anzahl gekappt Division durch 0 ist nicht erlaubt (erzeugt ArithmeticException: / by zero) Fließkommaarithmetik Division durch 0 ist kein Fehler! +x / 0.0 == Double.POSITIVE_INFINITY -x / 0.0 == Double.NEGATIVE_INFINITY 0.0 / 0.0 == Double.NaN Bei einem Überlauf wird Double.POSITIVE_INFINITY oder Double.NEGATIVE_INFINITY Einführung in die Programmierung mit Java 58 Universität Bremen Bit-Operatoren Allgemein Verknüpfungen Bit-Verknüpfungen können auf Ganzzahltypen und boolean angewendet werden Und Oder Exklusiv-Oder Nicht 0xea & 0x4c 0xea | 0x4c 0xea ^ 0x4c ~0xea Links Rechts Vorzeichenlos rechts 11 00 11 00 11 00 11 11 00 00 11 00 00 00 & 00 11 00 00 == Verschiebungen 11 11 0xea << 3 0xea >> 3 0xea >>> 3 Einführung in die Programmierung mit Java 00 11 00 00 59 Universität Bremen Zuweisungsoperatoren Zuweisung: Rechnen und Zuweisung: i = 7, s = "Hallo", a[a[i]][2][17] = 42 + i x = y = z = 0, a[x = 7] = 1 i += 17, a[a[1]] <<= 4, x *= x Variable op= ausdruck entspricht Variable = Variable op ausdruck, aber die Variable wird nur einmal ausgewertet Pre-Inkrement/Dekrement: ++i, ++a[5], a[--i] = a[i] Post-Inkrement/Dekrement: i++, a[5]++, a[i--] = a[i] Ein Post-Inkrement/Dekrement verändert den Wert der Variablen, liefert aber den alten Wert als Ergebnis zurück int i = 0; int j = 0; a[i++] = 17; b[++j] = 42; a[i++] = 18; b[++j] = 43; a[0] == 17, a[1] == 18 b[1] == 42, b[2] == 43 Einführung in die Programmierung mit Java 60 Universität Bremen Sonstige Operatoren If-Else new bedingung ? ausdruck : ausdruck z.B. a = b == 0 ? 0 : 100 / b; r = r >= Math.PI ? r - 2 * Math.PI : r < -Math.PI ? r + 2 * PI : r; new erzeugt neue Objekte oder Arrays z.B. int[] a = new int[10]; FileInputStream stream = new FileInputStream("aFile"); Typumwandlung int a = (int) 3.1415 Einführung in die Programmierung mit Java 61 Universität Bremen Vorrang von Operatoren Bindungsstärke Assoziativität Was wird zuerst ausgewertet, wenn verschiedene Operatoren in einem Ausdruck verwendet werden? z.B. Punkt- vor Strichrechnung: 1 + 2 * 3 = 1 + (2 * 3) = 7 Was wird zuerst ausgewertet, wenn Operatoren gleicher Bindungsstärke in einem Ausdruck verwendet werden? z.B. links bei Minus: 3 - 2 - 1 = (3 - 2) - 1 = 0 Beispiel a = a >> 4 & 0x0f | a << 4 & 0xf0 a = (((a >> 4) & 0x0f) | ((a << 4) & 0xf0)) Einführung in die Programmierung mit Java 11 11 11 00 11 62 00 11 00 Universität Bremen Vorrang von Operatoren Operator Bindungsstärke .,(),[] -,+,!,~,++,-new,(typ) *,/,% +,<<,>>,>>> <,<=,>,>= ==,!= & ^ | && || ?: =,+=,-=,*=,/=,%=,^= &=,|=,<<=,>>=,>>>= Asso. Beschreibung links rechts rechts links links links links links links links links links links rechts rechts Funktionsaufruf und Array-Index Vorzeichen, logisches Nicht, arithm. Nicht, In-, Dekrement Objekterzeugung und Typumwandlung Multiplikation, Division, Modulo Addition und Subtraktion Links- und Rechtsverschiebung Kleiner, Kleiner-Gleich, Größer, Größer-Gleich Gleichheit und Ungleichheit arithmetisches Und arithmetisches Exklusiv Oder arithmetisches Oder logisches Und logisches Oder arithmetisches If-Else Zuweisung und Rechenzuweisung Rechenzuweisung Einführung in die Programmierung mit Java 63 Universität Bremen Ein UPN-Rechner Umgekehrte Polnische Notation Die Operanden kommen zuerst, dann kommt der Operator, z.B. 1 2 + Arbeitet als Stack-Maschine: Jeder Operator holt sich seine Operanden von der Spitze des Stapels und legt das Ergebnis wieder dort ab Beispiel Für 1 + 2 * 3 schreibt man: 1 2 3 * + 33 22 1 11 2 3 11 Einführung in die Programmierung mit Java 22 11 * 66 11 + 77 64 Universität Bremen Ein UPN-Rechner Einführung in die Programmierung mit Java 65 Universität Bremen Ein UPN-Rechner Einführung in die Programmierung mit Java 66