Programmierkurs Java Grundlagen Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Algorithmen, Maschinen- und Programmiersprachen • Algorithmen kann man mit Programmiersprachen „aufschreiben“ • Maschinensprache genügt im Prinzip dafür – – – – Besteht nur aus Menge von Nullen und Einsen Für Menschen nur schwer verständlich Maschinenspezifisch, schwer auf andere Rechner zu portieren Schwer, in der Maschinensprache den Algorithmus „zu sehen“ • Deshalb: Höhere Programmiersprache • Es existieren hunderte verschiedener solcher Sprachen – Näher am menschlichen Denken – Lassen sich vom Computer in Maschinencode umwandeln – Programme in einer solchen Sprache heißen „Quellcode“, „Programmcode“, „Source-Code“ oder einfach nur „Source“ oder „Code“ – Welche man wählt, hängt vom Anwendungszweck ab – Prinzipiell sind alle gleich mächtig (Turing vollständig) #2 Höhere Programmiersprache • Sprache mit eigener Syntax und Semantik • Syntax: Grammatikregeln der Sprache – „Walfische bereisen Indien, um Wolken zu klauen!“ • Semantik: Bedeutung einzelner „Worte“ und „Satzzeichen“ der Sprache – Der obige Satz ist syntaktisch korrekt – aber sinnlos. • Ziel: Sicheres Beherrschen beider Aspekte – Compiler prüfen Syntax, aber keine Semantik. #3 Warum Java? • Besonderheiten von Java – Sprache i. W. neu entworfen, nur wenige „Altlasten“ – Daher vergleichsweise einfach zu erlernen – Write once, run everywhere • Technische Realisierung: Programm Programm Maschinencode Compiler Compiler Bytecode Interpreter Maschinencode #4 Warum Java? • Byte-Code statt Maschinensprache – Maschinencode für eine „virtuelle Maschine“ – Kann auf jeder realen Maschine simuliert werden • Ist ein solcher „Simulator“ für einen Rechner verfügbar, dann kann jedes kompilierte Java-Programm ausgeführt werden • Nachteil – (Potenziell) langsamer als „echter“ Maschinencode – Inzwischen wurden sog. Just-in-Time-Compiler entwickelt, welche den Geschwindigkeitsnachteil in vielen Bereichen kompensieren #5 Geschichte von Java • 1991 – Gosling et al. entwickeln Oak (Object Application Kernel) auf Basis von C++ – Ziele: Plattform-Unabhängigkeit, Erweiterbarkeit der Systeme und Austauschbarkeit von Komponenten (ursprünglicher Einsatzbereich: Haushaltselektronik) • 1993 – Oak wird wegen rechtlicher Probleme in Java umbenannt. – Zu diesem Namen wurden die Entwickler beim Kaffeetrinken inspiriert – Java entwickelt sich durch Applet-Technologie zur „Sprache des WWW“ • Seit 1995 – Sun bietet Java Development Kit (JDK) mit Compiler und Interpreter kostenlos an – 2009 übernimmt Oracle Sun Microsystems #6 Warum Java? • Typische Einsatzbereich für Java heute – – – – – Applets: laufen direkt im Web-Browser Desktop-Anwendungen (J2SE) Web-Server Geschäftsanwendungen (Java EE) mit Servlets, JSF, JSP, ... Handy-Anwendungen (J2ME, Android, …) • Inzwischen sehr mächtig und performant! – Vielzahl alternativer Sprachen für VM verfügbar (JRuby, ...) • Direkte Konkurrenz: Microsoft C# #7 Compiler und Laufzeitumgebung • Java-Entwickler benötigt zwei wesentliche Komponenten – Java-Compiler – Virtual Maschine (auch genannt: „Laufzeitumgebung“) • Von Oracle kostenlos angeboten – http://www.oracle.com/technetwork/java/javase/downloads/ • Empfohlener Download – Aktuelles JDK ohne weiteres Zubehör (nicht nur das JRE) #8 Compiler und Laufzeitumgebung • JDK enthält alle notwendigen Werkzeuge – javac (Java Compiler) – java (Virtual Machine, auch: VM) – Und viele andere Tools (später) • Schreiben von Java Programmen – Programme (genauer: der Quellcode) werden im TextEditor geschrieben – Unix: vi, vim, nano, pico, nedit, emacs, … – Windows: edit, PSPad, UltraEdit, Scite, … #9 Integrated Development Environment (IDE) • Alternative zum Texteditor – Integrieren Editor, Compiler und VM – Beispiele: Eclipse, Netbeans, IntelliJ, … • Viele Zusatzfunktionen – – – – – – Syntax Highlighting Code Completion Debugger Refactoring Plug-Ins für Spezialanwendung ... • Für das Erlernen von Java nicht nur hilfreich – Entscheiden Sie selbst, ab wann Sie eine IDE einsetzen #10 Ein erstes Java-Programm • Grundgerüst: Wird für jedes Java-Programm benötigt! • Einrückung und Co.: Nur für Menschen zur einfacheren Lesbarkeit Programm-Name (muss mit Dateinamen übereinstimmen, inkl. Groß-/Kleinschreibung!) public class MeinProgramm { public static void main(String[] args){ System.out.println("42"); Ende einer Anweisung } } Anweisung zum Ausgeben von Text #11 Beispiel (Editieren, Compilieren, Ausführen) • Editieren in beliebigem Editor – vi MeinProgramm.java – Groß- und Kleinschreibung wichtig (auch unter Windows) • Kompilieren mit Java-Compiler „javac“ – javac MeinProgramm.java – Erzeugt Datei „MeinProgramm.class“ mit Bytecode-Instruktionen • Ausführen mit Virtual Machine „java“ – java MeinProgramm – Achtung: weder „.java“ noch „.class“ am Ende – Groß- und Kleinschreibung beachten #12 Ausgabe auf der Konsole #13 Sprachmerkmale • Java ist Turing-mächtig – Es kann also alles berechnet werden – Sofern genügend Speicher verfügbar ist • Erforderliche Sprachmerkmale – Elementare Rechenoperationen (Addition, Subtraktion, ...) – Sequenz (Hintereinander-Ausführung) – Bedingte Ausführung (If-Anweisung) – While-Anweisung #14 Erstes Sprachelement: Sequentielle Ausführung • Markierung des Endes einer Anweisung durch Semikolon – Zeichen ; – a1; a2; a3; a4; • Formatierung (für den Compiler) egal • Für Menschen macht es Sinn, sich an gewisse Konventionen zu halten #15 Lesbarer Code: Kommentare • Kommentare einfügen damit Menschen Code besser verstehen können • Zwei Varianten (in Java) • Vorsicht: „Verschachteln“ nicht erlaubt (/* /* */ */) – Werden vom Compiler ignoriert – // Kommentar 1-zeilig – /* Kommentar potenziell über mehrere Zeilen */ #16 Verarbeitung von Daten • Programme verarbeiten Daten – Werden gelesen und ausgegeben – Notwendig: I/O-Funktionen (später) • Zur Verarbeitung müssen diese im Arbeitsspeicher gehalten werden – Programme müssen diese Daten referenzieren können – Konzept der Variablen #17