variablen

Werbung
Learning By Doing
Variablenkonzept
Klassisch, in Java Basistyp
• Variablendeklaration reserviert Speicherplatz im Hauptspeicher
• Speicherplatz wird zu Compilationszeit reserviert
• Initialisierung setzt einen Wert
• Variable besteht aus Name und Wert
Nach Deklaration/Initialisierung:
int x = 5;
int y = 2;
int z = 7;
Adresse
x
y
z
Inhalt
5
2
7
Nach Zuweisung
y = 5;
Adresse
x
y
z
Inhalt
5
5
7
Learning By Doing
Für Objekte werden Referenzvariablen verwendet:
• Für Objekte wird in einem dynamischen Speicherbereich (Heap)
zu Laufzeit Speicherplatz reserviert
• Um eine Objekt anzusprechen muss eine Referenzvariable (Referenz)
verwendet werden, welche die Adresse des Objekts enthält. Der Wert
der Referenz (also die Adresse des Objekts) ist nicht zugänglich
• Objekte werden mit dem Erzeugungsoperator new erzeugt. Der Rückgabewert wir einer Referenzvariable zugewiesen
Deklaration einer
Referenzvariablen
Erzeugung eines Objekts
t = new T();
T t;
a
t
n ull
t
Objekt
a
Heap
Learning By Doing
Zuweisung und Vergleich von Referenzvariablen
• Zugewiesene Referenzvariablen zeigen auf dasselbe Objekt
• Verändert man mit einer dieser Variablen das Objekt, so ist es
automatisch auch für die andere Variable geändert
• Der Vergleich von Referenzvariablen mit == prüft, ob die beiden
Variablen auf das gleiche Objekt verweisen und nicht, ob die beiden
Objekte gleich sind
T t = new T();
T u;
u = t;
a
t
u
Objekt
a
a
Heap
Learning By Doing
Basistypen versus Referenztypen
// WbzEx2.java
// WbzEx2a.java
import static ch.aplu.util.Console.*;
import ch.aplu.turtle.*;
import java.awt.Color;
class WbzEx2
{
WbzEx2()
{
int hans = 3;
println("hans: " + hans);
class WbzEx2a
{
WbzEx2a()
{
Turtle hans = new Turtle(Color.red);
int peter;
peter = hans;
println("peter: " + peter);
Turtle peter;
peter = hans;
hans = 7;
println("hans: " + hans);
println("peter: " + peter);
hans.setColor(Color.blue);
peter.back(100);
}
}
public static void main(String[] args)
{
new WbzEx2a();
}
}
J2SE V1.4:
public static void main(String[] args)
{
new WbzEx2a();
}
}
statt import static nur import
dafür statt println() überall Console.println()
Learning By Doing
Referenzvariablen (Referenzen) dienen nicht
dazu, Objekte zu speichern, sondern mit ihnen
zu kommunizieren
Heap
Instanz von john
john
Referenz von john
Learning By Doing
Basistypen
Datentyp/
Schlüsselwort
Ganzzahlen
byte
short
int
long
s. Buch S. 66
Beschreibung
Größe/Format
Ganze Zahlen von -128 bis +127 (–27 bis 27-1)
8-bit Zweierkomplement
(1 byte)
16-bit Zweierkomplement
Ganze Zahlen von -32'768 bis +32'767 (–215 bis 215-1)
(2 bytes)
32-bit Zweierkomplement
Ganze Zahlen von -2 147 483 648 bis 2 147 483 647 (–231
(4 bytes)
bis 231-1)
Ganze Zahlen von -9 223 372 036 854 775 808 bis 9 223 372 64-bit Zweierkomplement
(8 bytes)
036 854 775 807 (-263 bis 263-1)
Fliesskommazahlen
float
Dezimalzahl, ungefähr 7 Ziffern, Exponent 10 -38..10+38
double
Dezimalzahl, ungefähr 16 Ziffern, Exponent 10 -308..10+308
Andere Typen
char
boolean
Zeichen
Wahrheitswert wahr oder falsch
32-bit IEEE 754 (24-bit Mantisse/8-bit
Exponent)
64-bit IEEE 754 (53-bit Mantisse/11-bit
Exponent)
16-bit Unicode (kein Vorzeichen)
true/false (1 byte)
Learning By Doing
Ausdrücke/Operatoren
Operator
s. Buch S. 72/73
.
[]
()
++, -+, ~
!
(type)
*, /, %
Rangordnung
0
0
0
1
1
1
1
1
2
Typ
syntaktisch
syntaktisch
syntaktisch
arithmetisch
arithmetisch
int
boolean
jeder
arithmetisch
+, +
<<
>>
3
3
4
4
arithmetisch
String
int
int
>>>
4
int
<, <=, >, >=
instanceof
==, !=
5
5
6
arithmetisch
Objekt
alle
Beschreibung
Klassenmember
Arrayindex
Parameterklammer
Inkrement u. Dekrement
Unäres Plus u. Minus
Bitweises Komplement
Logisches Komplement
Cast
Multiplikation, Division,
Modulo
Addition und Subtraktion
Stringkonkatenation
Shift links
Shift rechts mit
Vorzeichenerweiterung
Shift rechts ohne
Vorzeichenerweiterung
Numerische Vergleiche
Typvergleich
Gleich-/Ungleichheit
Learning By Doing
Ausdrücke/Operatoren
Operator
&
&
^
^
|
|
&&
Rangordnung
7
7
8
8
9
9
10
Typ
int
boolean
int
boolean
int
boolean
boolean
||
11
boolean
?:
=
*=,
/=,
%=,
+=, -=, <<=,
>>=, >>>=, &=,
^=, |=
12
13
14
alle
alle
alle
s. Buch S. 72/73
Beschreibung
Bitweises Und
Logisches Und
Bitweises Xor
Logisches Xor
Bitweises Oder
Logisches Oder
Logisches Und,
Kurzschluss
Logisches Oder,
Kurzschluss
Bedingungsoperator
Zuweisung
Zuweisung mit Operation
Learning By Doing
Strings
• Nicht einfach Zeichenketten, sondern Instanzen einer Klasse
• In Java eine sehr spezielle Implementierung
 unveränderlich (immutable)
 in einem speziellen Speicherbereich (String pool)
 + - Operator überladen (Konkatenation)
 Erzeugung mit String-Literal (Anführungszeichen)
String s = "Heute ist der ";
...
Date today = new Date();
String s = s + today.toString();
 enger Zusammenhang mit Klassen StringBuffer und StringBuilder
sb.charAt()
sb.deleteCharAt()
sb.setCharAt()
sb.insert()
sb.append()
Learning By Doing
// WbzEx3.java
import javax.swing.JOptionPane;
class WbzEx3
{
WbzEx3()
{
String town = "Bern";
String answer = "";
boolean quitting = false;
while (!quitting)
{
String input =
JOptionPane.showInputDialog(
"Wo findet der Wbz-Kurs statt?");
if (input == null)
quitting = true;
else
{
if (input.equals(town))
{
answer = "richtig";
quitting = true;
}
else
answer = "falsch";
JOptionPane.showMessageDialog(
null, answer);
}
}
System.exit(0);
}
public static void main(String[] args)
{
new WbzEx3();
}
}
Learning By Doing
Arrays
• Analog math. Vektor: Statt von Komponenten spricht man von Elementen
• Elemente haben alle denselben Datentyp
• Elemente werden mit einem Arrayindex, der immer bei 0 beginnt, angesprochen
• Ein Array ist ein Objekt (mit etwas speziellen Eigenschaften)
• Ein Array wird mit einer Referenzvariablen (Arrayreferenz) angesprochen. Deklaration:
int[] a;
auch: int a[];
• Das Arrayobjekt (d.h. die Elemente) befinden sich auf dem Heap. Erzeugung:
a = new int[6];
Anzahl kann int-Variable sein (semistatisch)
• Übliche Kurzschreibweise:
int[] a = new int[6];
• Erzeugung/Initialisierung in Kurzschreibweise:
int[] a = {1, 2, 3, 6, 5, 4};
• Anzahl Arrayelemente:
a.length;
• Lesen/Schreiben (Random access):
a[0], a[1], a[2], a[3], a[4], a[5]
s. Buch S. 99ff
int, keine Klammern (kein Methodenaufruf)
Herunterladen