Transcript
Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer
Programmiertechnik Skalare Typen,Variablen, Zuweisungen
int inti;i; long longj;j; boolean booleanisEmpty; isEmpty; double average; double average; char charnaechstesZeichen; naechstesZeichen; j j==42L; 42L; i i==(int) (int)j;j; isEmpty isEmpty==true; true; average = 37.266; average = 37.266; naechstesZeichen naechstesZeichen=='h'; 'h';
Java-Ganzzahltypen Erinnerung ● Ganze Zahlen heißen auf englisch und in Programmiersprachen Integers ● Java definiert 4 verschiedene Integertypen, deren Länge und damit auch Wertebereich fest definiert sind.
Typ
Länge kleinste darstellbare Zahl
größte darstellbare Zahl
byte
8 Bit
-128
127
short
16 Bit
-32‘768
32‘767
int
32 Bit
-2‘147‘483‘648
2‘147‘483‘647
long
64 Bit
-9‘223‘372‘036‘854‘775‘808
9‘223‘372‘036‘854‘775‘807
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
2/18
Java-Zeichentypen ●
Die englische Bezeichnung characters (chars) ist auch im Deutschen geläufiger
●
Java verwendet 16-bit Unicode characters
●
Syntax in Java: char
●
Characters können auch als 2 Byte lange, vorzeichenlose Ganzzahlen verwendet werden
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
3/18
Java-Booleans (1) ●
Booleans sind logische ("boolsche") Werte. –
Sie können den Wahrheitswert wahr oder falsch annehmen,
–
sie können logisch miteinander verknüpft werden (A oder B, A und B, nicht A).
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
4/18
Java-Booleans (2) ●
●
Syntax in Java: boolean – mögliche Werte: true oder false.
Im Speicher dargestellt als 4-Byte int, von dem nur 1 Bit verwendet wird – speicherineffizient: 32 Bit belegt, 1 Bit verwendet – einfach, schnell, da Prozessoren auf wortgroße Daten optimiert sind
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
5/18
Überblick: Skalare Typen in Java Typ
Format, mögliche Werte
byte
8-Bit-Ganzzahl in 2-er Komplementdarstellung
short
16-Bit-Ganzzahl in 2-er Komplementdarstellung
int
32-Bit-Ganzzahl in 2-er Komplementdarstellung
long
64-Bit-Ganzzahl in 2-er Komplementdarstellung
float
32-Bit-Gleitkommazahl nach IEEE 754
double
64-Bit-Gleitkommazahl nach IEEE 754
char
16-Bit-Unicode-Zeichen
boolean
true, false
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
6/18
Variablen ●
●
Variablen sind benannte und typisierte Speicherportionen, die Werte des angegebenen Typs enthalten können. Variablen müssen vor ihrer Benutzung deklariert werden, etwa: int int i;i; boolean boolean isEmpty; isEmpty; Merke: Erst Typ, dann Name! double average; double average; short short index1; index1; char char naechstesZeichen; naechstesZeichen;
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
7/18
Variablen - Java-Namenskonventionen
●
●
●
sprechende Namen: isEmpty statt b17 (lange Variablennamen erzeugen keinen langen Code!) Variablennamen beginnen mit einem Kleinbuchstaben zusammengesetzte Namen → Anfangsbuchstaben der Folgewörter groß
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
8/18
Literale ●
●
Literale sind typisierte Konstanten, die etwa verwendet werden können um Variablen zu initialisieren. Verschiedene Typen erfordern Literale in verschiedenen Formaten: Typ
Beispielliterale
byte
127, -128
short
32456
int
60273
long
13292367454L, 13292367454l
float
87.363F, 87.363f
double
37.266, 37.266D, 37.266d, 26.77e3
char
'A', 'h'
boolean
true, false
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
9/18
Zuweisungen ●
eine Zuweisung (Assignment) erlaubt, einer Variablen v einen Wert w zuzuweisen
●
w muss denselben (oder einen engeren) Typ haben wie v.
●
Syntax (Schreibweise): v = w;
●
●
Vorsicht: Das Gleichheitszeichen "=" bedeutet nicht "Test auf Gleichheit", sondern "mache linke Seite der rechter Seite gleich". In Pseudocode wird Zuweisung häufig geschrieben als: v ← w. → Warum kann die linke Seite einer Zuweisung nur eine Variable und kein Literal sein?
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
10/18
Zuweisungen - Beispiele int int i;i; int int j;j; boolean boolean isEmpty; isEmpty; double double average; average; char char naechstesZeichen; naechstesZeichen; ii = = 178; 178; jj = = i;i; isEmpty isEmpty = = true; true; average average = = 37.266; 37.266; naechstesZeichen naechstesZeichen = = 'h'; 'h'; Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
oder auch: int int ii = = 178, 178, j;j; boolean boolean isEmpty isEmpty = = true; true; double double average average = = 37.266; 37.266; char char naechstesZeichen naechstesZeichen = = 'h'; 'h'; jj = = i;i;
11/18
Automatische Typumwandlung (auch: implizite Typwandlung/Typanpassung/Typkonversion) ● ●
●
englisch: automatic/implicit type conversion/cast Werte engerer (niedriger) Typen können an Variablen weiteren (höheren) Typs zugewiesen werden – Java führt automatische Konversion durch Beispiel:
Aber nicht:
int int ii = = 17; 17; long long j;j;
int int i;i; long long jj = = 42L; 42L;
jj = = i;i;
ii = = j;j;
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
12/18
Skalare Typhierarchie Der Wertebereich eines engeren Typs ist eine Teilmenge des Wertebereichs eines weiteren Typs. Für die enger-Beziehung "◄" gelten folgende Regeln: 1.Ganzzahltypen ◄ Gleitzahltypen 2.Ganzzahltypen: byte ◄ short ◄ int ◄ long 3.Gleitzahltypen: float ◄ double 4.char ◄ int ●
●
aus 1, 2 und 3 ergibt sich: ● byte ◄ short ◄ int ◄ long ◄ float ◄ double aus 1, 2 und 4 ergibt sich: ● char ◄ int ◄ long ◄ float ◄ double
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
13/18
Skalare Typhierarchie Merke: ●
●
Kein anderer Typ kann in boolean konvertiert werden, oder umgekehrt Die Wandlung von einer Ganzzahl in eine Gleitzahl kann zu Präzisionsverlust führen! –
int → float
–
long → float
–
long → double
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
14/18
Explizite Typumwandlung ●
●
●
Explizite Typwandlung ist in zwei Richtungen möglich: –
aufwärts (englisch: upcast): enger Typ → weiter Typ
–
abwärts (englisch: downcast): weiter Typ → enger Typ
Abwärtskonvertierung führt zu Fehlern, wenn Wert nicht in niedrigeren Typen passt! Beispiel Aufwärtskonvertierung: int int ii = = 17; 17; long long j;j; jj = = (long) (long) i;i;
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
15/18
Explizite Typumwandlung 1. Beispiel Abwärtskonvertierung: int inti;i; long longj j= =42L; 42L; i i= =(int) (int)j;j;
2. Beispiel Abwärtskonvertierung: int inti;i; long longj j= =2500000000L; 2500000000L; i i= =(int) (int)j;j;
→ i enthält den Wert -1794967296! – Warum? Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
16/18
Strings ●
●
●
Strings, d.h. Zeichenketten, sind kein skalarer Typ, sondern Objekte. Strings sind so fundamental, dass es wichtig ist Grundlegendes über ihre Verwendung zu wissen. Eine String-Variable wird genauso deklariert wie eine Variable skalaren Typs: String Stringtext; text;
●
Einer String-Variablen kann ein Text zugewiesen werden: text text= ="Hallo, "Hallo,Welt!"; Welt!";
●
Beides kann zusammengefasst werden zu: String Stringtext text= ="Hallo, "Hallo,Welt"; Welt";
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
17/18
Zu guter Letzt... We all know that 666 is the number of the Beast, but did you know that... 670 - Approximate number of the Beast DCLXVI - Roman numeral of the Beast 666.0000000 - Number of the High Precision Beast 665.9999954 - Number of the Pentium Beast 0.666 - Number of the Millibeast 1010011010 - Binary of the Beast $665.95 - Retail price of the Beast $699.25 - Price of the Beast plus 5% state sales tax $769.95 - Price of the Beast with all accessories and replacement soul $606.66 - Wal-Mart price of the Beast Route 666 - Way of the Beast 666 F - Oven temperature for roast Beast 666 mg - Recommended Minimum Daily Requirement of Beast Lotus 6-6-6 - Spreadsheet of the Beast Word 6.66 - Word Processor of the Beast i66686 - CPU of the Beast 666i - BMW of the Beast 668 - Next-door neighbor of the Beast
Prof. Dr. Oliver Haase, HTWG Konstanz Karl Martin Kern, Seitenbau GmbH Achim Bitzer, Seitenbau GmbH
18/18