Programmierkurs Java - Universität zu Lübeck

Werbung
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
Herunterladen