Programmierkurs Java Variablen und Datentypen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer
#2 Überblick Welche Datentypen gibt es in Java? Wie werden Variablen eines Typs deklariert? Arrays Literale
#3 Variablen Adresse Inhalt Eine Variable ist ein Speicherplatz Eine (Start-)Adresse im Arbeitsspeicher Programme verwenden Namen statt Adressen (z.b. jahr, i, hallo) Compiler bzw. Betriebssystem kümmert sich um konkrete Zuordnung...... 1001 12 1002 123 1003 7 1004 7 1007 9 1008 11 Größe des belegten Speichers bestimmt durch Datentyp 32-Bit Ganzzahl 8-Bit vorzeichenbehaftete Ganzzahl...... 800023 800024 4 800025......
#4 Primitive Datentypen in Java Datentyp Bemerkung Min Max byte 8 Bit, 2er-Komplement -128 +127 short 16 Bit, 2er-Komplement -32.768 +32.767 int 32 Bit, 2er-Komplement -2.147.483.648 +2.147.483.647 long 64 Bit, 2er-Komplement -9.223.372.036.854.775.808 +9.223.372.036.854.775.807 float double 32-bit IEEE 754 floating point 64-bit IEEE 754 floating point boolean Größe nicht spezifiziert false true char Ein 16-bit Unicode Zeichen '\u0000' (oder 0) '\uffff' (oder 65.535)
Primitive Datentypen in Java byte: The byte data type is an 8-bit signed two's complement integer. It has a minimum value of -128 and a maximum value of 127 (inclusive). The byte data type can be useful for saving memory in large arrays, where the memory savings actually matters. short: The short data type is a 16-bit signed two's complement integer. It has a minimum value of -32,768 and a maximum value of 32,767 (inclusive). int: The int data type is a 32-bit signed two's complement integer. It has a minimum value of -2,147,483,648 and a maximum value of 2,147,483,647 (inclusive). For integral values, this data type is generally the default choice unless there is a reason (like the above) to choose something else. long: The long data type is a 64-bit signed two's complement integer. It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of 9,223,372,036,854,775,807 (inclusive). Use this data type when you need a range of values wider than those provided by int. Quelle: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html #5
Primitive Datentypen in Java float: The float data type is a single-precision 32-bit IEEE 754 floating point. This data type should never be used for precise values, such as currency. For that, you will need to use the java.math.bigdecimal class instead. Numbers and Strings covers BigDecimal and other useful classes provided by the Java platform. double: The double data type is a double-precision 64-bit IEEE 754 floating point. For decimal values, this data type is generally the default choice. As mentioned above, this data type should never be used for precise values, such as currency. Quelle: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html #6
#7 Primitive Datentypen in Java boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined. char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\u0000' (or 0) and a maximum value of '\uffff' (or 65,535 inclusive).
Variablen und Variablendeklaration
Deklaration von Variablen Eine Variable ist ein Speicherplatz Repräsentiert einen Wert aus einem bestimmten Wertebereich Wertebereich durch verwendeten Datentyp festgelegt Speicherbereich wird über einen Namen referenziert Eine Variable wird deklariert (d.h. erzeugt) Syntax: <Typ> <Name>; Dadurch wird Speicher reserviert Beispiele int myint; char c1; boolean flag; short myshort, myshort2; mehrere Variablen gleichen Typs #9
Beispiel Was tut dieses Programm? Datei: Beispiele\08-Java-Grundlagen\2-Variablen\Variablen.java #10
Was tut dieses Programm? Auf den ersten Blick: Nichts Zumindest erwartet es keine Eingabe Und es macht keine Ausgaben Es berechnet offensichtlich nichts Aber: es reserviert Speicher für Variablen Und gibt ihn sofort wieder frei Mit diesen Variablen könnten wir jetzt aber arbeiten Zwischenergebnisse und Ergebnisse von Berechnungen ablegen Diese Ergebnisse über den Namen der Variablen ansprechen #11
#12 Deklaration von Variablen: Identifier Wiederholung Deklaration: <Typ> <Name>; Der <Name> einer Variable ist ein Identifier Über diesen Identifier wird eine Variable eindeutig bezeichnet Es können nicht zwei Variablen den gleichen Identifier haben Zumindest nicht im gleichen Kontext (später) Identifier dürfen nur aus gewissen Zeichen bestehen Regeln für Identifier: nächste Folie
#13 Legale Identifier Bestehen aus Unicode Zeichen Nummern Währungssymbole Verbindungszeichen (Bsp.: Unterstrich _ ) Dürfen theoretisch beliebig lang sein Einschränkungen Muss mit Zeichen, Währungssymbol oder Verbindungszeichen starten Also auf keinen Fall mit einer Nummer Kein reserviertes Schlüsselwort(class, public, etc.). Details unter http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html Keine Leerzeichen Identifier sind case-sensitive (Unterscheidung von Groß- und Kleinschreibung)
#14 Beispiele Legale Identifier Test Besteht nur aus Alphazeichen und ist daher korrekt. DAS_IST_TOTAL_TOLL Unterstriche sind erlaubt (auch am Anfang) bóolêáñ Gültige Unicode Zeichen DAGOBERT$$$$ Dollar-Zeichen ist ein gültiger Java- Buchstabe. $ Währungssymbole sind gültige Zeichen Ungültige Identifier 2good4u Erstes Zeichen muss ein Buchstabe sein und keine Ziffer das ist toll Leerzeichen sind nicht erlaubt Krass! Ausrufezeichen ist, wie viele Sonderzeichen, ungültig class Der Name ist schon von Java belegt (Class wäre ok)
Datei: Beispiele\08-Java-Grundlagen\3-Identifier\Identifier.java #15
#16 Konventionen Normalerweise hält man sich auch an gewisse Konventionen Zum Beispiel an den sog. Java Code Style Java Code Style für Identifier (Kurzfassung) Klein beginnen und im Camel Case weiterschreiben Beispiel: einevariablemiteinemlangennamen Für internationale Zusammenarbeit Am besten auf ASCII beschränken (kein ä, ü, ß,...) Details unter http://www.oracle.com/technetwork/java/javase/documentation/codecon ventions-135099.html#367
Typsicherheit Alle Daten, die wir verarbeiten, sind immer von einem bestimmten Typ Typ der Werte, die wir einer Variablen zuweisen, muss dem Typ der Variablen entsprechen Alternativ müssen wir konvertieren (später) Kann man einen Wahrheitswert (boolean) eine int-zahl zuweisen (z.b. 123)? Nein, das dient der Sicherheit von Programmen Sog. statische Typsicherheit Diese wird vom Compiler überprüft #17
Spezialfall von Deklarationen: Arrays #18
#19 Spezialfall: Arrays Beispiel: Wir benötigen zehn Integer-Variablen int i0, i1, i2, i3, i4, i5, i6, i7, i8 i9; Einfacher: Verwendung sog. Arrays int[] i = new int[10]; Zugriff über Indizes i[0], i[1],, i[9] Erster Index (0) Achtes Element an Index 7 0 1 2 3 4 5 6 7 8 9 5 66 777 338 1-56 4 0 1 4 Länge des Arrays: 10
#20 Arrays: Beispiel der Deklaration Deklaration im Prinzip wie eine normale Variable gleichen Type Wo das [] steht (davor, danach) ist egal new int[10] reserviert Speicher für 10 int Variablen Bedeutung von new: später
Größe / Länge eines Arrays In Java ist die Länge von Arrays abfragbar Komfortfeature von Java (nicht in allen Sprachen) arrayname.length (Variable vom Typ int) Beispiel: int[] i = new int[10]; int t[] = new int[20]; i.length ergibt 10 t.length ergibt 20 #21
Literale
#23 Typsicherheit und Literale Daten sind immer von einem bestimmten Typ Das gilt auch für Literale Literale: Konstante Werte im Quelltext Manchmal auch Konstanten genannt Beispiele 10 01364545 0xA 9.81 true z Welchen Datentyp haben diese Literale?
#24 Datentypen von Literalen (Ganzzahlen) Ganzzahlige Typen (standardmäßig vom Typ int) 10 (Dezimal) 012 (Oktal, Basis 8, wegen führender Null) 0xA (Hexadezimal, Basis 16 wegen führendem 0x, Groß-/Kleinschreibung egal) 0b1010 (Binär, Basis 2, wegen führendem 0b) Suffix l oder L Datentyp long statt int Beispiel: 12273; 12733L; int i = 10; long l = 10L; Java7 erlaubt Underscores zur besseren Übersichtlichkeit Beispiele: 1012_1234_1_4, 0xFFFF_ABCD, 0b1111 0101
#25 Datentypen von Literalen (Floating Point) Floating Point Werte sind standardmäßig vom Typ double Durch Anhängen von f wird ein Literal vom Typ float Optional kann ein d angehängt werden, um double explizit zu fordern Schreibweise von Floating Point Literalen Normale Schreibweise: 10.0 (alternativ: 10.) Normale Schreibweise: 0.1 (alternativ :.1) Eng. Schreibweise: 1E1 (entspricht 1 * 10 1 ) Float erzwingen: 10.0f Double erzwingen: 10.0d
#26 Datentypen von Literalen (Zeichen) Datentyp von Zeichen in Java: char In einfachen Anführungszeichen eingeschlossen (') Repräsentieren immer genau ein Zeichen Mehr als ein Zeichen nicht möglich (dafür spezieller Typ: String später) Beispiele: 'a' (das Zeichen a), 'ü' (das Zeichen ü) Manche Zeichen werden mit Backslash (\) escaped '\n' Zeilenumbruch '\'' Das Zeichen ' '\\' Das Zeichen \ selbst '\u00f1 Das Unicode-Zeichen mit der Nummer F1 16 (241 10 ): ñ Details unter: http://docs.oracle.com/javase/tutorial/java/data/characters.html
Beispiel Datei: Beispiele\08-Java-Grundlagen\4-Literale\Literale.java #27