Mag. iur. Dr. techn. Michael Sonntag Softwareentwicklung Java allgemein, Kommentare, Datentypen, Variablen, Konstanten Institut für Informationsverarbeitung und Mikroprozessortechnik (FIM) Johannes Kepler Universität Linz, Österreich E-Mail: [email protected] http://www.fim.uni-linz.ac.at/staff/sonntag.htm © Michael Sonntag 2004 ? ? ? Fragen? ? Bitte gleich stellen! ? © Michael Sonntag 2004 ? Java Allgemeines Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 3 Vom Programm zum Maschinencode z z z Ein Programm ist für einen Menschen gut lesbar, für einen Computer aber nicht ideal: Übersetzung in ein "besseres" Format: Maschinensprache Dies bedeutet aber auch, dass das übersetzte Programm dann nur mehr auf diesem Rechner(typ) ausführbar ist! Lösung: Übersetzen in Zwischensprache (Java: "Bytecode"), diese wird bei der Ausführung dann interpretiert Æ z Neuere Ablaufumgebungen führen für Teile teilweise (und trickreich) Compilierungen durch, um die Geschwindigkeit zu vergrößern Fertige Bausteine werden bei der Laufzeit einfach geladen Æ Michael Sonntag Bibliotheken, z. B. Datei - Ein-/Ausgabe, Stringfunktionen, etc. Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 4 Bearbeitungsvorgang: Vom Problem zur Ausführung Problemanalyse & Spezifikation Bytecode .class Lösungsidee & Algorithmus Programm .java Mensch Michael Sonntag Maschinencode java Ausführung javac Compiler Lader Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 5 Java-Programme: Allgemeines z Groß-/Kleinschreibung ist wichtig; muss beachtet werden Æ z Einrückungen sind für das Programm egal Æ z while, While, wHile und WHILE sind verschiedene Dinge! Für den Leser aber nicht, daher unbedingt korrekt durchführen Der Computer ist genau: Immer exakt arbeiten! Æ Æ Ein Hochkomma ´ ist etwas anderes als ein Anführungszeichen " {, [, (, ], }, ) besitzen verschiedene Bedeutungen » Der Computer nimmt sie beim Wort! Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 6 Java Programmaufbau, Kommentare, Datentypen, Variablen, Konstanten Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 7 Struktur eines Java-Programms public class Hello { Name der Klasse; muss identisch zu Dateinamen sein Hauptprogramm; dieser Block wird ausgeführt public static void main(String[] args) { Programmbeginn Jede Anweisung System.out.println("Hello World\n"); (=statement) muss mit } Strichpunkt enden Programmende } z Ergebnis: Ausgabe des Textes „Hello World“ sowie eines Zeilenumbruchs Hello.java Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 8 Kommentare in Java z Block-Kommentare: Æ Æ /* */ Alles dazwischen wird ignoriert » Inklusive „/*“, also keine Schachtelung möglich! z Zeilenende-Kommentare: Æ Æ Æ Æ z // Alles bis zum nächsten Zeilenumbruch wird ignoriert Keine Bedeutung innerhalb von /* */ /* und */ haben keine Bedeutung nach // Wo kommentieren: Æ Æ Michael Sonntag Überall, wo Zustand, Tätigkeit oder Grund nicht von vornherein sofort absolut eindeutig klar sind! Sowie: Allgemeine Beschreibung (siehe JavaDoc später!) Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 9 Datentypen in Java z z z Datentypen definieren den Wertebereich und die verfügbaren Operationen darauf Jede Variable, Parameter, etc. besitzt in Java einen genau bestimmten Datentyp Dieser lässt sich zur Laufzeit niemals ändern Æ z Bereits bei der Compilierung wird überprüft, ob Æ Æ Æ z Polymorphie (siehe später) lässt die Referenz unberührt! der Wert korrekt ist (Konstanten) eine Zuweisung tatsächlich durchgeführt werden kann (Ausdruck) Dies wird „statische Typprüfung“ genannt Nicht überprüfbar: Über-/Unterlauf Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 10 Datentypen in Java Ganze Zahlen z z z z byte: short: int: long: 8 Bit 16 Bit 32 Bit 64 Bit -128 -32768 -2147483648 … … … 127 32767 2147483647 -9223372036854775808 … 9223372036854775807 z Wertebereiche sind jeweils inklusive der Endwerte In der Regel wird mit int gearbeitet (schnellste Berechnung) z Über-/Unterlauf: z Æ Æ Æ Dies wird ignoriert Keinerlei Fehlermeldung Ergebnis kann „seltsam“ sein, z. B. falsches Vorzeichen » Siehe Zweierkomplement: Dieses wird für die Berechnung verwendet! Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 11 Datentypen in Java Ganze Zahlen - Beispiele z z z z z z byte b; byte b2=-128; byte b3=+128; // FEHLER! Außerhalb des Wertebereichs! short s=+128; short s2=128; // Wie vorige Zeile int i=s2; Æ Æ z Wertvergrößerung ist immer erfolgreich und korrekt möglich! byte ⊂ short ⊂ int ⊂ long long l=123456789; MinMax.java Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 12 Datentypen in Java Zeichen und Strings z char: Æ Æ Zeichen (16 Bit Unicode) Es lassen sich praktisch alle Schriften der Welt darstellen Auch der Quellcode ist Unicode, daher können in Strings alle beliebigen Zeichen verwendet werden » Sofern der Editor dies unterstützt! Æ Æ Æ z Unicode: http://www.unicode.org/ Konstanten: Unter geraden Hochkomma '' Beispiele: 'a', 'Z', '3' String: Eigentlich kein Datentyp sondern eine Klasse Æ Æ Æ Æ Michael Sonntag Wird später gesondert behandelt, da sehr wichtig Wichtig aber für Konstanten und Initialisierung, daher schon hier Konstanten: Unter Anführungszeichen Beispiele: "Test", "Softwareentwicklung" Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 13 Datentypen in Java Sonderkonstanten z Manche besondere Zeichen können nicht direkt in Konstanten eingebaut werden Æ Æ z Vollständige Liste (für Zeichen und Strings): Æ z z Z. B. Zeilenumbruch, nicht-druckbare Zeichen bei Verwendung von Unicode ohne Editor-Unterstützung Hierzu dienen "Escape-Sequences" \b (Backspace), \t (Tabulator), \n (Zeilenvorschub), \r (Wagenrücklauf), \f (Seitenvorschub), \" (Anführungszeichen), \' (Hochkomma), \\ (Rückstrich) Zeichen: '\u????' Fragezeichen sind durch Hexadezimal-ziffern zu ersetzen, die den Unicode-Code des gewünschten Zeichens angeben Oktalcode: \??? (von 000 bis 377) Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 14 Datentypen in Java Boolean und Gleitkomma z boolean: Æ Æ z Æ z Fließkommawert Wertebereich: ca. 1.4E-45 … 3.4E38 (optional "f": Kennzeichen) Beispiele: 3.141592657E+0, 7e3, 123.56E-3f double: Langer Fließkommawert Æ Æ z Werte: "true" und "false" (0, 1, -1, … sind nicht erlaubt!) Beispiel: boolean currentlyTeaching=false; float: Æ Wahrheitswert Wertebereich: ca. 4.9E-324 … 1.8E308 (optional "d": Kennzeichen) Beispiele: 3.141592657E+0D, 123.56e-3, 129E127 Fließkommawerte/-arithmetik entspricht IEEE 754-1985 Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 15 Variablen in Java z z Variablen müssen vor Verwendung deklariert werden Dies kann praktisch überall erfolgen Æ Sollte aber immer nur am Beginn eines Blockes erfolgen! » Lesbarkeit! z Namen: Frei wählbar Æ Beliebig lange Folge von Unicode-Buchstaben und -Ziffern » Beginn mit einem Buchstaben (inkl. A-Z, a-z, _, $) » Sonstige Unicode-Buchstaben auch erlaubt – Vorsicht: Gleiches Aussehen, aber andere Nummer = andere Variable! Æ Keine doppelten Namen erlaubt » Außer: Verschiedene Tiefe (siehe später unter "Blöcke") Æ Michael Sonntag Schlüsselwörter sind nicht erlaubt (z. B. "if", "while", …), ebensowenig wie "true", "false" und "null" Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 16 Variablen in Java Beispiele und Konventionen z Beispiele: Æ Æ Æ z int j=57; char nextChar='3'; bufferFull=true; Æ Æ Æ z z Konventionen: Æ Æ Æ Æ Falsch: int 3faches=57; (Anfangsbuchstabe) char c='A'; char c='c'; (Doppelt) boolean goto=false; (Schlüsselwort) Schlecht: Æ int Variable_drei=2; Beginnt mit Kleinbuchstaben Zusammengesetzte Worte: Neues Wort beginnt groß Substantive oder Zusammensetzungen verwenden, ev. Adjektive Nicht zu kurz, nicht zu lang » Lokale Variablen (z. B. Schleifen) kurz z Noch notwendig: Alle globalen Variablen müssen "static" sein Æ Siehe später unter Objektorientierung! Æ Beispiel: static int j=57; Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 17 Konstanten in Java z z Gleich wie Variablen, aber mit Präfix Durch das Schlüsselwort "final" wird gekennzeichnet, daß eine Variable nicht mehr verändert werden darf Æ z In der Regel zusätzlich noch als "static" deklariert Æ z Der Compiler prüft dies; eine Zuweisung darauf kann dann gar nicht mehr erfolgen (Fehlermeldung beim compilieren!) Wird später bei Klassen behandelt Zu unterscheiden von konstanten Ausdrücken: Æ Michael Sonntag Beispiel: 3, 7.56e12, 0x3fff, … Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 18 Konstanten in Java Beispiele und Konventionen z Beispiele: Æ Æ Æ Æ z final static int MAX_VALUE=100; final byte CREDENTIAL_ACCEPTED=0; final byte CREDENTIAL_REJECTED=1; final byte CREDENTIAL_UNDECIDED=2; Konventionen: Æ Æ Æ Æ Æ Michael Sonntag Lauter Großbuchstaben Zusammengesetzte Worte: Neues Wort mit '_' trennen Substantive oder Zusammensetzungen verwenden, ev. Adjektive Eher länger Gruppen zusammengehöriger Konstanten (Alternativ-Werte) sollten einen gemeinsamen Anfang besitzen Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 19 Java Einrückung Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 20 Einrückung z z Einrückung ist für den Computer egal - Sie wird ignoriert Einrückung ist für den Programmierer essentiell Æ Æ Weder er noch andere können das Programm sonst lesen Einrückungen "müssen" IMMER mit den Blöcken korrespondieren! » if (val<0) » doSomehting(); Sehr » doSomethingOther(); z schwerer Fehler: Ausrücken! Es existieren 4 Grund-Muster (siehe nächste Folie) Æ Welches gewählt wird, hängt ab von » Geschmack des Programmierers » Verwendeten Tools (z. B. Editor) » Firmen-Richtlinien Aber immer konsistent bleiben! Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 21 Einrückung 4 Grundformen z Die beiden linken Formen (1 + 2) sind gebräuchlicher Æ Und meiner Meinung nach besser geeignet! z Beide untereinander gleich z Variante 2 ist die "offizielle" Java Empfehlung Suchen Sie sich aus, was Ihnen besser gefällt. Dann bleiben Sie konsistent dabei! Michael Sonntag if ( …) 1 { doIt(); } if ( …) 3 { doIt(); } if ( …) { 2 doIt(); } if ( …) { 4 doIt(); } Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 22 Einrückung Was? Wie? z z Wie tief? 2-4 Zeichen oder 1 Tabulator Was soll man Einrücken? Æ Jeden Block (= { … }) » Ebenso: Inhalt von Klassen, Methoden Æ z Nicht einrücken: Æ Æ z Alles Anweisungen im inneren von if, while, do, switch, for, try, synchronized, static Variablen-Deklaration Kommentare Sondereinrückung: Fortsetzungszeilen Æ Æ Michael Sonntag Viel stärker: Optisch "passend" oder >=doppelter normaler Tiefe Beispiel: » if (a&&b || c&&d || » e&&f || g&&h) Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 23 Ein- / Ausgabe "Kürzest-" Fassung Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 24 Ein- / Ausgabe Ausgeben z Wiederholung: Siehe schon oben! z Verwenden der Klasse PrintWriter Æ Æ z Methoden: Æ Æ Æ z "print( … );": Für alle Datentypen (Ausgabe) "println( … );": Für alle Datentype (Ausgabe + neue Zeile) "println();": Zeilenumbruch alleine Länge eines Strings feststellen Æ z System.out: Normale Programmausgabe System.err: Ausgabe von Programmfehlern String str; int len=str.length(); An die Zeichenkonstanten denken! Æ Michael Sonntag \r, \n, \t, \\, ... Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 25 Ein- / Ausgabe Einlesen z Zeilenweise einlesen: Æ BufferedReader verwenden » BufferedReader in=new BufferedReader(new InputStreamReader( System.in)); Æ Fehlerüberprüfung "ausschalten" » Beim Hauptprogramm anfügen "throws IOException" – "public static void main(String[] args) throws IOException" z Zeile einlesen: String zeile=in.readLine(); Æ Aufteilung in einzelne Werte: Siehe Kapitel über Strings! » Derzeit: Immer nur ein Wert pro Zeile z Einzelne Zeichen lesen: Æ "read();": liefert einen int zurück » -1 falls nichts mehr zu lesen (Dateiende) » Sonst: Typecast auf char Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 26 Ein- / Ausgabe String in Zahlen umwandeln z ".parse" Datentyp-Name mit Großbuchstaben "(" String ")" Æ Æ Æ Dies sind eigentlich Klassen; siehe später! Beispiel: String s="13";byte b=Byte.parseByte(s); Gibt es für: Byte, Short, Long, Float, Double » Integer ist Sonderfall: "Integer.parseInt(s);" Kommt gegenüber Variable z Fehlerüberprüfung "ausschalten" hinzu! Æ Beim Hauptprogramm anfügen "throws NumberFormatException" » public static void main(String[] args) throws NumberFormatException » Gemeinsam mit zeilenweisem einlesen: – "throws IOException, NumberFormatException" – oder einfach für alle Fehler: "throws Exception" InOut.java Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 27 Java Sprachdefinition Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 28 Java-Sprachdefinition z Die Programmiersprache Java ist exakt definiert: Sowohl Syntax als auch Semantik sind genau festgelegt Æ Æ Dies ermöglicht es, daß auch andere Firmen als Sun Compiler und VM herstellen können! Für Programmierer: Bei Detailfragen einfach nachschauen! Java_Language_Grammar.htm z Entnommen aus der Online Version von Gosling, Joy, Steele, Bracha: The Java Language Specification. http://java.sun.com/docs/books/jls/ z Online unter http://java.sun.com/docs/books/jls/second_edition/html/ Æ Michael Sonntag Java allgemein, Kommentare, Datentypen, Variablen, Konstanten 29