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 Überblick • Welche Datentypen gibt es in Java? • Wie werden Variablen eines Typs deklariert? • Arrays • Literale #2 Variablen • 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 Adresse Inhalt ... ... 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 ... ... #3 Primitive Datentypen in Java Datentyp Bemerkung byte 8 Bit, 2er-Komplement short 16 Bit, 2er-Komplement int 32 Bit, 2er-Komplement long 64 Bit, 2er-Komplement Min Max -128 +127 -32.768 +32.767 -2.147.483.648 +2.147.483.647 -9.223.372.036.854.775.808 +9.223.372.036.854.775.807 false true '\u0000' (oder 0) '\uffff' (oder 65.535) float 32-bit IEEE 754 floating point double 64-bit IEEE 754 floating point boolean Größe nicht spezifiziert char Ein 16-bit Unicode Zeichen #4 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 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). #7 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 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 #12 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) #13 Beispiele Legale Identifier Ungültige Identifier • • Test – • Besteht nur aus Alphazeichen und ist daher korrekt. __DAS_IST_TOTAL_TOLL________ – Unterstriche sind erlaubt (auch am Anfang) 2good4u – Erstes Zeichen muss ein Buchstabe sein und keine Ziffer • das ist toll – Leerzeichen sind nicht erlaubt • bóolêáñ – • • Dollar-Zeichen ist ein gültiger JavaBuchstabe. • €¥$ – Währungssymbole sind gültige Zeichen Krass! – Ausrufezeichen ist, wie viele Sonderzeichen, ungültig DAGOBERT$$$$ – • Gültige Unicode Zeichen class – Der Name ist schon von Java belegt (Class wäre ok) #14 Datei: Beispiele\08-Java-Grundlagen\3-Identifier\Identifier.java #15 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 #16 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 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 #19 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 #20 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 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? #23 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 #24 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 * 101) – Float erzwingen: 10.0f – Double erzwingen: 10.0d #25 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 F116 (24110): ñ – Details unter: http://docs.oracle.com/javase/tutorial/java/data/characters.html #26 Beispiel Datei: Beispiele\08-Java-Grundlagen\4-Literale\Literale.java #27