Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 02. JAVA: Erstes Programm 1 Das erste Java-Programm /** Ausgabe des Zeichenkette „Hello World“ (Mehrzeiliger Kommentar zur aut. Erstellung von Dokumentationen) */ //Ein Modul (Klasse SayHello) (einzeiliger Kommentar) class SayHello { //Variablen (Attribute): keine //Deklaration von Operationen (Funktionen): //Funktion main mit Übergabe von Kommandozeilenparametern public static void main(String args[]) { //Bibliotheksfunktion println des Objekts System.out System.out.println(“Hello World“); } } 2 Das erste Java-Programm class SayHello { ... } Deklaration einer Klasse SayHello Eine Klasse ist ein strukturierter Datentyp (ein Modul) Eine Klasse besteht aus der Deklaration von Variablen und Funktionen (müssen Teil einer Klasse sein) Die Variablen einer Klasse heißen Attribute Die Funktionen einer Klasse heißen Operationen Jede Klasse in Java wird in einer eigenen java-Datei vereinbart (Klassen- und Dateiname müssen übereinstimmen) 3 Das erste Java-Programm class SayHello { ... } Deklaration einer Klasse SayHello Es können beliebig viele Variablen einer Klasse vereinbart werden Diese Variablen heißen Objekte Operationen können nur über Objekte aufgerufen werden (Ausnahme: Klassenoperationen) 4 Das erste Java-Programm class SayHello { ... } Ein C-Programm besteht aus einer Sammlung von Funktionen In C gibt es strukturierte Datentypen, die aber nur Daten kapseln In C sind Funktionen keinen Daten zugeordnet Ein Java-Programm besteht aus einer Sammlung von Klassen In Java werden durch Klassen Daten und Funktionen gekapselt In Java sind Funktionen nur über Objekte der zugehörigen Klasse aufrufbar 5 Das erste Java-Programm public static void main(String args[ ]) { ... } Deklaration der Operation main Genau eine der Klassen eines Programms muss die main-Funktion enthalten (die Programmklasse) Bei Start wird automatisch main aufgerufen 6 Das erste Java-Programm public static void main(String args[ ]) { ... } Deklaration der Operation main main hat immer folgende Modifikatoren: public: öffentliche Operation – von aussen aufrufbar static: Klassenoperation – ohne Objekt aufrufbar [man benötigt kein Objekt der Programmklasse für den Aufruf] 7 Das erste Java-Programm public static void main(String args[]) { ... } Deklaration der Operation main main hat immer folgende Parameter: void: kein Rückgabewert String args[]: Feld (Array) args von Objekten der Klasse String args repräsentiert wie in C Kommandozeilenparameter String ist Klasse zu Repräsentation von Zeichenketten 8 Das erste Java-Programm public static void main(String args[ ]) { ... } Ein C-Programm enthält genau eine Funktion main In C werden Zeichenketten durch Pointer auf char repräsentiert (char *) Ein Java-Programm enthält genau eine Klasse mit der Funktion main In Java gibt es für Zeichenketten die Klasse String 9 Das erste Java-Programm { ... } - Blöcke Geben wie in C Gültigkeitsbereiche an Beispiele: Klassenrümpfe, Funktionsrümpfe 10 Das erste Java-Programm System.out.println(...); Aufruf der Bibliotheksfunktion println println gibt übergebene Zeichenkette auf Kommandozeile aus System ist eine Bibliotheksklasse System hat ein Attribut out Zugriff auf Attribute einer Klasse mit “.” - Notation out ist Objekt der Bibliotheksklasse PrintStream PrintStream hat eine Operation println(...) Zugriff auf Operationen eines Objekts mit “.” – Notation 11 Das erste Java-Programm System.out.println(...); Aufruf der Bibliotheksfunktion println println gibt übergebene Zeichenkette auf Kommandozeile aus Bibliotheksklassen sind hierarchisch in Pakete gegliedert: Das Paket java enthält alle anderen Pakete Das Paket lang im Paket java enthält alle Basisklassen System ist eine Klasse im Paket lang Das Paket lang wird automatisch geladen (andere Pakete muss man manuell einbinden) 12 Das erste Java-Programm System.out.println(...); In C gibt es eine Funktions-Bibliothek (gegliedert in h-Dateien) In Java gibt es eine Klassen-Bibliothek (hierarchisch gegliedert in Pakete): http://java.sun.com/javase/6/docs/api/ 13 Compilieren und Ausführen Vorgehen 1. Java-Programme werden von einem Prozessorunabhängigen Java-Compiler in sog. Byte-Code übersetzt. Dieser kann vom Prozessor nicht direkt ausgeführt werden. 2. Der Byte-Code wird von einem System-spezifischen Interpreter ausgeführt. Der Java-Interpreter verdeckt die Eigenschaften des jeweiligen Prozessors und bietet eine höhere Abstraktionsschicht, die man sich als gedachten (virtuellen) Prozessor vorstellen kann man spricht von der Java Virtuellen Maschine (JVM) 14 Compilieren und Ausführen Vorgehen Erstelle .java - Quelldateien mit Texteditor Compiliere Dateien mit Kommandozeilen-Befehl javac <Dateiname>.java Ergebnis: Ausführbarer Byte-Code in class- Dateien Führe Programm aus durch Interpretation der class – Programmdatei mit Kommandozeilen-Befehl java <Programmdateiname>.class 15 Compilieren und Ausführen Vorteile: Nur ein Compiler für alle Prozessortypen Java plattform-unabhängig exakt definiert Übersetzte Java-Programme laufen ohne Neuübersetzung auf allen Plattformen mit Java-Interpreter Nachteile: Übersetzte Programme laufen langsamer Für jeden Prozessortyp einen neuen Interpreter 16 Compilieren und Ausführen Anleitung Installiere Java SE JDK 6 (auch J2SE SDK genannt) Download unter http://java.sun.com Jetzt müssen folgende Kommandos (Kommandozeilenfenster) ein erfolgreiches Ergebnis liefern: C:\Java\jdk\bin\java.exe -version C:\Java\jdk\bin\javac.exe -help Mit javac wird der Java-Compiler aufgerufen Mit java wird ein Java-Programm ausgeführt 17 Compilieren und Ausführen System konfigurieren Setzen von Umgebungsvariablen: Angabe von Pfaden ... ... wo das Betriebssystem nach Compiler/Interpreter sucht ... wo Compiler/Interpreter nach Klassendateien suchen Benutzervariablen setzen: JAVA_HOME C:/Programme/Java/jdk1.6.0_06 Systemvariablen erweitern um: Path <vorhandenePfade>; C:/Programme/Java/jdk1.6.0_06; C:/Programme/Java/jdk1.6.0_06/bin 18 Compilieren und Ausführen System konfigurieren Jetzt müssen folgende Kommandos erfolgreich sein: set JAVA_HOME java -version javac -help 19 Mehr Java-Programme class SayWhat { public static void main(String args[]) { if (0 < args.length)//Fallunterscheidung nach Länge von args { int i; for (i=0;i<args.length;i=i+1) //for-Schleife über Anzahl Parameter { System.out.println(args[i]);//Zeilenweise Ausgabe der Parameter } } else { System.out.println(“fehlende Argumente”); } } } 20 Mehr Java-Programme public static void main (String args[]) Zugriff auf Kommandozeilenparameter mit args Zugriff auf i-ten Parameter mit args[i-1] Compileraufruf: javac SayWhat.java Interpreteraufruf: java SayWhat param1 param2 ... (Entspricht args = (param1, param2, ... )) 21 Mehr Java-Programme public static void main (String args[]) Ähnlich wie in C: Deklaration von i gilt nur lokal im { ... } - Block if-else- Anweisung für Fallunterscheidungen for- Anweisung für wiederholte Ausführung von Anweisungen Unterschiedlich zu C: Mit Feldname.length kann man die Länge eines Feldes abfragen 22 Eclipse Eclipse bietet eine Entwicklungsumgebung für Java (und andere Programmiersprachen) Frei erhältlich (open source) unter www.eclipse.org .zip-Datei downloaden und in beliebigem Verzeichnis entpacken (z.B. unter C:\...\Java) Achtung: vorher JDK installieren Start: Ausführen von eclipse.exe Workspace am besten auf Datenpartition D: anlegen 23 Eclipse Programme erstellen und ausführen in Eclipse: Java-Projekt anlegen Klasse anlegen mit main-Methode (und Paket-Angabe) Programm schreiben und speichern (wird automatisch compiliert) Fehler beheben (Problems-Tab) und erneut speichern Ausführen mit dem grünen Pfeil (bei Textcursor in main()) Ausgabe im Console-Tab 24