Datentypen und Ausdrücke PDF
Document Details
Uploaded by GallantBauhaus4099
Tags
Summary
This document provides an overview of data types and expressions in Java, focusing on object-oriented programming concepts. It explains different kinds of comments, identifiers, and keywords. It also lists and explains Java primitive data types, literals, and operators.
Full Transcript
Datentypen und Ausdrücke Objektorientierte Softwareentwicklung Kodierung von Java-Programmen Ein Java-Programm ist eine Folge von Zeichen, die im Unicode- Zeichensatz kodiert ist. Jedes Unicode-Zeichen ist 2 Byte lang. Folglich gibt es 216 = 65.536 verschiedene Unicod...
Datentypen und Ausdrücke Objektorientierte Softwareentwicklung Kodierung von Java-Programmen Ein Java-Programm ist eine Folge von Zeichen, die im Unicode- Zeichensatz kodiert ist. Jedes Unicode-Zeichen ist 2 Byte lang. Folglich gibt es 216 = 65.536 verschiedene Unicode-Zeichen. Die ersten 256 Zeichen des Unicode-Zeichensatzes stimmen mit dem ASCII-Zeichensatz nach ISO-8859-1 (Latin-1) überein. Erstellt man ein Programm im ASCII-Zeichensatz – was bei vielen Editoren der Fall ist – wandelt der Compiler es automatisch in Unicode um. Umlaute und sprachspezifische Zeichen (z.B. á, è, ß, …) können verwendet werden. Dies ist jedoch nicht ratsam, da viele Editoren oder das Dateisystem keinen Unicode unterstützen. Objektorientierte Softwareentwicklung Kommentare Kommentare dienen zur Dokumentation und damit dem leichteren Verständnis des Quelltextes. Kommentare werden nicht ausgewertet, sondern vom Compiler vollständig ignoriert. In Java gibt es drei verschiedene Arten von Kommentaren: Kommentare bis zum Ende der jeweiligen Zeile Zeilenkommentar Kommentare über mehrere Zeilen Blockkommentar Kommentare, die von javadoc berücksichtigt werden Dokumentationskommentar Objektorientierte Softwareentwicklung Kommentarsyntax und Beispiele Syntax: //... Zeilenkommentar Blockkommentar Dokumentationskommentar Beispiel: // Dies ist ein Kommentar bis zum Zeilenende. Objektorientierte Softwareentwicklung Bezeichner (identifier) Bezeichner (identifier) sind Namen für Klassen, Attribute, Methoden, Schnittstellen und Variablen. Ein Bezeichner beginnt mit einem Unicode-Buchstaben (a-z, A-Z) oder einem Unterstrich (_) oder dem Dollarzeichen ($). Danach dürfen beliebige weitere Unicode-Buchstaben inklusive Unterstrich, Dollarzeichen und Zahlen folgen. Beispiele für Bezeichner: vorname1 ist ein korrekter Bezeichner. 1vorname ist kein korrekter Bezeichner. Pkw ist ein korrekter Bezeichner. X1y2Z3 ist ein korrekter aber unschöner Bezeichner. Objektorientierte Softwareentwicklung Konventionen für Bezeichner Für Bezeichner werden nur Zeichen aus dem "normalen" ASCII- Zeichensatz verwendet (a-z, A-Z, 0-9). Bezeichner für Klassen beginnen immer mit einem Großbuchstaben. Bezeichner für Methoden und Variablen beginnen mit einem Kleinbuchstaben. Bezeichner bestehen oftmals aus mehreren Wörtern. Zur besseren Lesbarkeit beginnt jedes einzelne Wort mit einem Großbuchstaben. Objektorientierte Softwareentwicklung Schlüsselwörter Bestimmte Wörter einer Programmiersprache sind für spezielle Funktionen reserviert. Sie dürfen deshalb nicht durch den Programmierer verwendet werden. Insbesondere darf kein Bezeichner mit einem Schlüsselwort übereinstimmen. Objektorientierte Softwareentwicklung Übersicht der Schlüsselwörter abstract assert boolean break byte (byvalue) case (cast) catch char class (const) continue default do double else enum extends final finally float for (future) (generic) goto if implements import instanceof int (inner) interface long native new null (operator) (outer) package private protected public (rest) return short static strictfp super switch synchronized this throw throws transient try (var) void volatile while Objektorientierte Softwareentwicklung Variablen und Datentypen Eine Variable ist ein symbolischer Name für einen Speicherplatz und dient zum Ablegen von Daten. Jede Variable besitzt einen bestimmten Datentyp, der die Größe und den Wertebereich der Variablen festlegt. Man unterscheidet zwischen den primitiven Datentypen und den Referenztypen: Primitive Datentypen sind beispielsweise Ganzzahlen oder Fließkommazahlen. Referenztypen speichern einen Verweis auf ein Objekt einer bestimmten Klasse. Man unterscheidet zwischen Instanzvariablen, Klassenvariablen und lokalen Variablen. Objektorientierte Softwareentwicklung Arten von Variablen Instanzvariablen werden innerhalb einer Klasse definiert und mit den Objekten dieser Klasse erzeugt, d.h. jedes Objekt besitzt eigene Instanzvariablen seiner Klasse. Klassenvariablen werden innerhalb einer Klasse definiert und sind unabhängig von den Objekten dieser Klasse. Lediglich die Klasse selbst, besitzt diese Variablen. Lokale Variablen existieren nur innerhalb der Methode oder des Blocks in dem sie definiert werden. Sie sind den Variablen in prozeduralen Sprachen sehr änhlich. Objektorientierte Softwareentwicklung Übersicht der primitiven Datentypen Name Größe in Wertebereich Standardwert Byte boolean 1 true / false false char 2 Unicode-Zeichen \u0000 byte 1 von -27 bis 27-1 0 short 2 von -215 bis 215-1 0 int 4 von -231 bis 231-1 0 long 8 von -263 bis 263-1 0.0 float 4 von -3,40282347 * 1038 0.0 bis +3,40282347 * 1038 double 8 von -1,79769313486231570 * 10308 0.0 bis 1,79769313486231570 * 10308 Objektorientierte Softwareentwicklung Literale Konstanten, die innerhalb des Quelltextes stehen, werden als Literale bezeichnet. Für jeden Datentyp gibt es verschiedene Literale. Man unterscheidet folgende Arten von Literalen: boolesche Literale Zeichen-Literale Zeichenketten- oder String-Literale ganzzahlige Literale Fließkommaliterale Objektorientierte Softwareentwicklung boolean-, char- und String-Literale boolesche Literale true false Zeichen-Literale Ein char-Literal wird von einfachen Hochkommata eingerahmt, z.B. 'x'. Um Sonderzeichen – wie beispielsweise Backspace oder Zeilenumbruch – darzustellen, benutzt man so genannte Escape-Sequenzen. String-Literale String-Literale werden in Anführungszeichen eingerahmt, z.B. "Das ist ein String-Literal". Objektorientierte Softwareentwicklung Übersicht der Escape-Sequenzen Escape- Bedeutung Sequenz \b Backspace \t Tabulator \n Newline \f Formfeed \r Carriage Return \" Anführungszeichen \' Hochkomma \\ Backslash Objektorientierte Softwareentwicklung Ganzzahlige Literale Ganzzahlige Literale können als Dezimal-, Oktal- oder Hexadezimalzahl geschrieben werden. Beginnt das Literal mit einer 0 wird es als Oktalzahl interpretiert: - 052 - 0055 Beginnt das Literal mit 0x wird es als Hexadezimalzahl interpretiert: - 0xABC - 0x1A9E Beginnt das Literal weder mit 0 noch mit 0x wird es als Dezimalzahl interpretiert. Jedes ganzzahlige Literal ist automatisch vom Typ int. Durch anhängen des Suffix l oder L ist es vom Typ long. 12345L 444567l Objektorientierte Softwareentwicklung Fließkomma-Literale Java unterstützt die Fließkommadarstellung gemäß Standard IEEE-754. Fließkomma-Literale sind immer vom Typ double, solange man nicht das Suffix f oder F anhängt. Fließkomma-Literale besitzen folgende Struktur: Vorzeichen Vorkommastellen Komma (.) Nachkommastellen Exponent Suffix Beispiele für Fließkomma-Literale: 3.14 .543e10 2.2e2f Objektorientierte Softwareentwicklung Ausdrücke (1) Ein Ausdruck (expression) ist die kleinste ausführbare Einheit innerhalb eines Programms und liefert bei Auswertung einen Wert/Ergebnis. Ein Ausdruck besteht aus einem Operator und einer bestimmten Anzahl von Operanden. Der Operator wird auf die Operanden angewendet und dadurch das Ergebnis des Ausdrucks ermittelt. Die Stelligkeit eines Operators wird durch die Anzahl der Operanden bestimmt, die durch ihn verknüpft werden. Objektorientierte Softwareentwicklung Ausdrücke (2) Zur Auswertung komplexer Ausdrücke muss die Bindungspriorität der Operatoren beachtet werden (z.B. "Punkt vor Strich"). Durch die Klammerung von Ausdrücken kann man die Auswertungsreihenfolge explizit festlegen. In Abhängigkeit vom Typ des zurückgegebenen Werts unterscheidet man zwischen: arithmetischen Operatoren relationalen Operatoren logischen Operatoren bitweisen Operatoren Zuweisungsoperatoren sonstige Operatoren Objektorientierte Softwareentwicklung Arithmetische Ausdrücke Arithmetische Ausdrücke dienen zur Verknüpfung von numerischen Werten ("Rechnen"). Die Operanden und das Ergebnis eines arithmetischen Ausdrucks sind numerische Werte, d.h. vom Typ: byte short int long float double Verknüpft man Operanden von unterschiedlichem Typ miteinander, wird automatisch eine Typumwandlung vorgenommen. Objektorientierte Softwareentwicklung Arithmetische Operatoren Operator Name Semantik + positives Vorzeichen Das Vorzeichen des Operanden bleibt unverändert. - negatives Vorzeichen Das Vorzeichen des Operanden wird umgekehrt. + Summe Die beiden Operanden werden addiert. - Differenz Der zweite Operand wird vom ersten subtrahiert. * Produkt Die beiden Operanden werden multipliziert. / Quotient Der erste Operand wird durch den zweiten dividiert. % Modulo Der Rest der Division vom ersten durch den zweiten Operand wird bestimmt. ++ Prä-/Postinkrement Der Operand wird um 1 erhöht (inkrementiert). -- Prä-/Postdekrement Der Operand wird um 1 vermindert (dekrementiert). Objektorientierte Softwareentwicklung Prä-/Postinkrement und Prä-/Postdekrement Die Operatoren ++ und -- sind Abkürzungen für die Addition von 1 zu bzw. die Subtraktion von 1 von einer Variablen. Die Operatoren ++ und -- kann man vor oder hinter einer Variablen notieren. Demzufolge unterscheidet man zwischen Prä-/Postinkrement und Prä-/Postdekrement. Es macht einen Unterschied, ob man die Operatoren vor oder hinter einer Variablen notiert: int a = 52; int b = 25; System.out.println(a++); // Ausgabe: 52 System.out.println(++b); // Ausgabe: 26 System.out.println(--a); // Ausgabe: 52 System.out.println(b--); // Ausgabe: 26 Objektorientierte Softwareentwicklung Relationale (Vergleichs) Ausdrücke Relationale Ausdrücke dienen dem Vergleich von numerischen oder booleschen Werten. Die Operanden eines relationalen Ausdrucks sind numerische oder boolesche Werte, das Ergebnis ist ein boolescher Wert: Operanden - byte - short - int - long - float - double Ergebnis - boolean Objektorientierte Softwareentwicklung Relationale (Vergleichs) Operatoren Operator Name Semantik == gleich Überprüft, ob die beiden Operanden gleich sind. != ungleich Überprüft, ob die beiden Operanden ungleich sind. < kleiner Überprüft, ob der erste Operand kleiner als der zweite ist. größer Überprüft, ob der erste Operand größer als der zweite ist. >= größer oder gleich Überprüft, ob der erste Operand größer oder gleich dem zweiten ist. Objektorientierte Softwareentwicklung Logische Ausdrücke Logische Ausdrücke verknüpfen boolesche Werte nach folgenden Wahrheitstafeln: && true false || true false ^ true false true true false true true true true false true false false false false true false false true false & true false | true false ! true false true true false true true true false true false false false false true false Objektorientierte Softwareentwicklung Logische Operatoren Operator Name Semantik ! NICHT (NOT) Der boolesche Ausdruck wird negiert. && UND (AND) Die beiden Operanden werden durch ein logisches UND verknüpft. || ODER (OR) Die beiden Operanden werden durch ein logisches ODER verknüpft. & UND (AND) Die beiden Operanden werden durch ein logisches UND verknüpft. | ODER (OR) Die beiden Operanden werden durch ein logisches ODER verknüpft. ^ Exklusiv-ODER (XOR) Die beiden Operanden werden durch ein logisches Exklusiv-ODER verknüpft. Objektorientierte Softwareentwicklung Unterschied zwischen && und & bzw. || und | Java bietet die Operatoren && und & für das logische UND sowie || und | für das logische ODER an. Bei den Operatoren && und || wird eine Short-Circuit-Evaluation durchgeführt, d.h. die Auswertung des logischen Ausdrucks wird abgebrochen sobald dessen Ergebnis feststeht. Beispiel: Die Auswertung von a && b wird abgebrochen, falls a bereits den Wert false besitzt. Dann ist das Gesamtergebnis des Ausdrucks auf jeden Fall false. Die Auswertung von a || b wird abgebrochen, falls a bereits den Wert true besitzt. Dann ist das Gesamtergebnis des Ausdrucks auf jeden Fall true. Objektorientierte Softwareentwicklung (Bit-Operatoren) Operator Name Semantik ~ Einerkomplement Es werden alle Bits des Operanden invertiert. | bitweises ODER Die beiden Operanden werden bitweise ODER verknüpft. & bitweises UND Die beiden Operanden werden bitweise UND verknüpft. ^ bitweises Die beiden Operanden werden bitweise Exklusiv-ODER Exklusiv-ODER verknüpft. >> Rechts-Shift mit Die Bits des ersten Operanden werden um den Wert des Vorzeichen zweiten Operanden nach rechts geschoben. Das Vorzeichen bleibt erhalten. >>> Rechts-Shift ohne Die Bits des ersten Operanden werden um den Wert des Vorzeichen zweiten Operanden nach rechts geschoben. Das Vorzeichen wird nicht berücksichtigt. b. >>>= Rechts-Shift-Zuweisung ohne Vorzeichen a >>>= b ist eine Abkürzung für a = a >>> b. Objektorientierte Softwareentwicklung Fragezeichen-Ausdruck Der Fragezeichen-Operator erlaubt eine einfache Auswahl zwischen zwei Alternativen, d.h. er ist eine Abkürzung für eine if-else- Anweisung. Syntax: boolescher_Ausdruck ? Ausdruck_1 : Ausdruck_2 Semantik: Wenn der boolesche Ausdruck wahr ist, wird der Ausdruck 1 ausgewertet und zurückgegeben. Andernfalls wird der Ausdruck 2 ausgewertet und zurückgegeben. Objektorientierte Softwareentwicklung Beispiel für den Fragezeichen-Operator Die Methode public boolean istTeiler(int a, int b) { if((a % b) == 0) return true else return false; } kann auch einfacher implementiert werden: public boolean istTeiler(int a, int b) { return ((a % b) == 0) ? true : false; } Objektorientierte Softwareentwicklung Aufgaben (1) 1. Was sind Kommentare? Welche Arten von Kommentaren gibt es in der Sprache Java? Wie werden diese Kommentare formuliert? 2. Was ist ein Bezeichner? 3. Welche der folgenden Begriffe sind korrekte Java-Bezeichner? 1mal1 ZweiPlusZwei $_$_$ BinIchEinBezeichner? super _PI_ 4. Was ist ein Schlüsselwort? 5. Was ist ein Ausdruck und welche Eigenschaften haben Ausdrücke? Objektorientierte Softwareentwicklung Aufgaben (2) 6. Werten Sie die folgenden Ausdrücke aus: true || (((true || false) && (false & false)) | true) false && ((3 < 4.5) || ((4 * 4)%2 < 3)) (true ^ false) ^ true (true ^ true) ^ true 4 / 2 4 % 2 4.5 / 2 10 & 2 12 | 4 (3 < 5) ? false : true (5 > 3) ? true : false ~5 Objektorientierte Softwareentwicklung Aufgaben (3) 7. Werten Sie die folgenden Ausdrücke aus: false || ((true | false) & (false & true) | true) true | (1 == 2) (false ^ true) ^ (true ^ false) & true 5/2 5 / 2.0 17 & 5 17 | 5 ~63 & ~31 (8 > 5) & (3 < 4) 8 > 2 Objektorientierte Softwareentwicklung