Analyzing Free-Improvised Music: Four Improvisations by Trombonist Ben Gerstein
Variablenkonzept
description
Transcript of Variablenkonzept
Learning By Doing
Variablenkonzept
• Variablendeklaration reserviert Speicherplatz im Hauptspeicher
Klassisch, in Java Basistyp
xyz
527
A d r e s s e I n h a l t
int x = 5;int y = 2;int z = 7;
Nach Deklaration/Initiali-sierung:
Nach Zuweisung
y = 5;
xyz
557
A d r e s s e I n h a l t
• Initialisierung setzt einen Wert
• Variable besteht aus Name und Wert
• Speicherplatz wird zu Compilationszeit reserviert
Variablenkonzept
Learning By Doing
• Für Objekte wird in einem dynamischen Speicherbereich (Heap)zu Laufzeit Speicherplatz reserviert
Für Objekte werden Referenzvariablen verwendet:
Deklaration einer Referenzvariablen
T t;
t null
Objekta
t a
Heap
Erzeugung eines Objekts
t = new T();
• Um eine Objekt anzusprechen muss eine Referenzvariable (Referenz)verwendet werden, welche die Adresse des Objekts enthält. Der Wertder Referenz (also die Adresse des Objekts) ist nicht zugänglich
• Objekte werden mit dem Erzeugungsoperator new erzeugt. Der Rückgabe-wert wir einer Referenzvariable zugewiesen
Referenzvariablen
Learning By Doing
• Zugewiesene Referenzvariablen zeigen auf dasselbe Objekt
Zuweisung und Vergleich von Referenzvariablen
• Verändert man mit einer dieser Variablen das Objekt, so ist esautomatisch auch für die andere Variable geändert
• Der Vergleich von Referenzvariablen mit == prüft, ob die beidenVariablen auf das gleiche Objekt verweisen und nicht, ob die beidenObjekte gleich sind
Objekta
ta
Heap
ua
T t = new T();T u;
u = t;
Zuweisung/Vergleich
Learning By Doing
// WbzEx2.java
import static ch.aplu.util.Console.*;
class WbzEx2{ WbzEx2() { int hans = 3; println("hans: " + hans);
int peter; peter = hans; println("peter: " + peter);
hans = 7; println("hans: " + hans); println("peter: " + peter); }
public static void main(String[] args) { new WbzEx2a(); }}
Basistypen versus Referenztypen
// WbzEx2a.java
import ch.aplu.turtle.*;import java.awt.Color;
class WbzEx2a{ WbzEx2a() { Turtle hans = new Turtle(Color.red);
Turtle peter; peter = hans;
hans.setColor(Color.blue); peter.back(100); }
public static void main(String[] args) { new WbzEx2a(); }}
J2SE V1.4: statt import static nur importdafür statt println() überall Console.println()
Basistypen/Referenztypen
Learning By Doing
Referenzvariablen (Referenzen) dienen nichtdazu, Objekte zu speichern, sondern mit ihnen zu kommunizieren
Heap
john
Instanz von john
Referenz von john
Referenzenkommunikation
Learning By Doing
BasistypenDatentyp/ Schlüsselwort
Beschreibung Größe/Format
Ganzzahlen byte Ganze Zahlen von -128 bis +127 (–27 bis 27-1) 8-bit Zweierkomplement
(1 byte) short Ganze Zahlen von -32'768 bis +32'767 (–215 bis 215-1) 16-bit Zweierkomplement
(2 bytes) int Ganze Zahlen von -2 147 483 648 bis 2 147 483 647 (–231
bis 231-1) 32-bit Zweierkomplement (4 bytes)
long Ganze Zahlen von -9 223 372 036 854 775 808 bis 9 223 372 036 854 775 807 (-263 bis 263-1)
64-bit Zweierkomplement (8 bytes)
Fliesskommazahlen float Dezimalzahl, ungefähr 7 Ziffern, Exponent 10-38..10+38 32-bit IEEE 754 (24-bit Mantisse/8-bit
Exponent) double Dezimalzahl, ungefähr 16 Ziffern, Exponent 10-308..10+308 64-bit IEEE 754 (53-bit Mantisse/11-bit
Exponent) Andere Typen char Zeichen 16-bit Unicode (kein Vorzeichen) boolean Wahrheitswert wahr oder falsch true/false (1 byte)
s. Buch S. 66
Übersicht Basistypen
Learning By Doing
Ausdrücke/Operatoren
s. Buch S. 72/73
Operator Rangordnung Typ Beschreibung . 0 syntaktisch Klassenmember [] 0 syntaktisch Arrayindex () 0 syntaktisch Parameterklammer ++, -- 1 arithmetisch Inkrement u. Dekrement
+, - 1 arithmetisch Unäres Plus u. Minus
~ 1 int Bitweises Komplement
! 1 boolean Logisches Komplement
(type) 1 jeder Cast
*, /, % 2 arithmetisch Multiplikation, Division, Modulo
+, - 3 arithmetisch Addition und Subtraktion
+ 3 String Stringkonkatenation
<< 4 int Shift links
>> 4 int Shift rechts mit Vorzeichenerweiterung
>>> 4 int Shift rechts ohne Vorzeichenerweiterung
<, <=, >, >= 5 arithmetisch Numerische Vergleiche
instanceof 5 Objekt Typvergleich
==, != 6 alle Gleich-/Ungleichheit
Ausdrücke/Operatoren
Learning By Doing
Ausdrücke/Operatoren
s. Buch S. 72/73
Operator Rangordnung Typ Beschreibung & 7 int Bitweises Und
& 7 boolean Logisches Und
^ 8 int Bitweises Xor
^ 8 boolean Logisches Xor
| 9 int Bitweises Oder
| 9 boolean Logisches Oder
&& 10 boolean Logisches Und, Kurzschluss
|| 11 boolean Logisches Oder, Kurzschluss
?: 12 alle Bedingungsoperator
= 13 alle Zuweisung
*=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, |=
14 alle Zuweisung mit Operation
Ausrücke/Op 2. Teil
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)
enger Zusammenhang mit Klassen StringBuffer und StringBuilder
Erzeugung mit String-Literal (Anführungszeichen)
Date today = new Date();
String s = "Heute ist der ";...
String s = s + today.toString();
sb.append()
sb.charAt()
sb.deleteCharAt()
sb.setCharAt()
sb.insert()
Strings
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(); }}
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;
• Das Arrayobjekt (d.h. die Elemente) befinden sich auf dem Heap. Erzeugung:a = new int[6];
• Übliche Kurzschreibweise:int[] a = new int[6];
• Erzeugung/Initialisierung in Kurzschreibweise:int[] a = {1, 2, 3, 6, 5, 4};
• Anzahl Arrayelemente:
a[0], a[1], a[2], a[3], a[4], a[5]
• Lesen/Schreiben (Random access):
a.length; int, keine Klammern (kein Methodenaufruf)
auch: int a[];
Anzahl kann int-Variable sein (semistatisch)
s. Buch S. 99ff
Arrays