Elementare Datentypen - FB3 - Uni Bremen

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