Programmieren in Java

Größe: px
Ab Seite anzeigen:

Download "Programmieren in Java"

Transkript

1 HOCHSCHULE MUENCHEN FAKULTÄT FÜR ELEKTROTECHNIK UND INFORMATIONSTECHNIK FG TECHNISCHE INFORMATIK V JV TH 04 Programmieren in Java Kapitel 3 3. Elementare Programmfunktionalitäten 3.1. Zugriff zu Programmparametern 3.2. Standard-Ein-und-Ausgabe (Konsolen-E/A) 3.3. Interaktion mit dem Laufzeitsystem 3.4. Exceptions 3.5. Dateizugriff

2 FACHHOCHSCHULE MUENCHEN FACHBEREICH ELEKTROTECHNIK UND INFORMATIONSTECHNIK BEREICH DATENTECHNIK V JV TH Zugriff zu Programmparametern in Java Programparameter (Kommandozeilenparameter) Einem Programm können i.a. beim Aufruf Parameter übergeben werden. Programmparameter Diese werden beim Aufruf aus der Kommandozeile durch Blanks getrennt an den eigentlichen Programmaufruf angehängt. Kommandozeilenparameter Bei Java-Programmen werden sie nach dem Namen der Start-Klasse angegeben. Beispiel : Kommandozeilenparameter sind : java Echo Sie tanzte nur einen Sommer Sie tanzte nur einen Sommer Zugriff im Programm Die Programmparameter (ohne Namen der Startklasse!) werden in einem String-Array zusammengefasst. Eine Referenz auf dieses Array wird der main()-methode der Startklasse als Parameter übergeben. Die main()-methode der Startklasse muß daher mit einem Parameter (Argument) vom Typ String[] definiert werden : public static void main(string[] args) //... Innerhalb der main()-methode stehen damit die Programmparameter als Komponenten des String-Arrays args zur Verfügung. Die Anzahl der Programmparameter (= Länge des String-Arrays) ist ermittelbar mittels args.length. Beispiel : // Echo.java class Echo public static void main(string[] args) for (int i=0; i<args.length; i++) System.out.println("Parameter "+ i + " : " + args[i]); Beispiel eines Programm-Aufrufs : E:\java\fhm\ee\vorl>java Echo Sie tanzte nur einen Sommer Parameter 0 : Sie Parameter 1 : tanzte Parameter 2 : nur Parameter 3 : einen Parameter 4 : Sommer E:\java\fhm\ee\vorl>

3 FG TECHNISCHE INFORMATIK V JV TH 04 Standard-Ein- und Ausgabe in Java (1) Grundsätzliches zum I/O-Model von Java Eine Programm-Ein- und Ausgabe findet üblicherweise über Dateien und/oder Geräte statt. Java betrachtet sowohl Geräte als auch Dateien grundsätzlich als sequentielle Folge von Bytes (Byte-Stream). Da Java Zeichen und Strings im Unicode darstellt, bietet die Sprache auch die Möglichkeit Textdateien/Text-Geräte als sequentielle Folge von Unicode-Zeichen (Unicode-Stream) zu interpretieren. Programmintern wird eine Datei bzw ein Gerät durch ein Objekt einer Stream-Klasse repräsentiert. Es gibt zahlreiche verschiedene Stream-Klassen, die jeweils unterschiedliche Eigenschaften modellieren. Alle Stream-Klassen sind im Package java.io enthalten. Vier abstrakte Klassen sind Basisklassen aller übrigen Stream-Klassen : InputStream Basisklasse für Klassen zum byteweisen Lesen (Lesen von Byte-Streams) Reader Basisklasse für Klassen zum zeichenweisen Lesen (Lesen von Unicode-Zeichen-Streams) OutputStream Basisklasse für Klassen zum byteweisen Schreiben (Schreiben in Byte-Streams) Writer Basisklasse für Klasse zum zeichenweisen Schreiben (Schreiben in Unicode-Zeichen-Streams) Diese Klassen definieren jeweils ein generelles Interface zur Verwendung der Objekte der entsprechenden abgeleiteten Klassen. Konverter-Klassen (Brücken-Klassen) erlauben einen Übergang zwischen Byte-Streams und Unicode-Zeichen- Streams : InputStreamReader (abgeleitet von Reader) Klasse zum zeichenweisen Lesen aus Byte-Streams OutputStreamWriter (abgeleitet von Writer) Klasse zum zeichenweisen Schreiben in Byte-Streams Standard-Ein- und Ausgabe-Objekte Für die Standard-Eingabe, die Standard-Ausgabe und die Standard-Fehlerausgabe werden für jedes Programm automatisch Stream-Objekte angelegt, d.h. die entsprechenden Streams (üblicherweise Tastatur und Bildschirm des Konsolengeräts) sind implizit geöffnet. Aus historischen Gründen handelt es sich hierbei um Byte-Stream-Objekte. Referenzen auf diese Stream-Objekte stehen als öffentliche statische Datenkomponenten der nicht instanzierbaren Klasse System (im Package java.lang) zur Verfügung : public static final InputStream in Standard-Eingabe-Objekt public static final PrintStream out Standard-Ausgabe-Objekt public static final PrintStream err Standard-Fehlerausgabe-Objekt Die Klasse PrintStream ist eine von OutputStream indirekt abgeleitete Klasse. Sie ermöglicht das Schreiben von Werten der einfachen Datentypen und von Objekten beliebiger Klassen (nach Umwandlung in eine String-Repräsentation) sowie direkt von Strings in einen Byte-Stream. Hierfür stellt sie die mehrfach überladenen Funktionen print() und println() (nicht explizit formatierbare Ausgabe) sowie die Methode printf() (formatierte Ausgabe) zur Verfügung. Ab dem JDK 6.0 kann als Alternative für den Zugriff zum Konsolengerät auch ein vordefiniertes Objekt der Klasse Console eingesetzt werden.

4 FG TECHNISCHE INFORMATIK V JV TH 03 Standard-Ein- und Ausgabe in Java (2) Schreiben in die Standard-Ausgabe und Standard-Fehlerausgabe Mittels der für die Standard-Stream-Objekte System.out (Standard-Ausgabe, Klasse PrintStream) System.err (Standard-Fehlerausgabe, Klasse PrintStream) aufgerufenen Methoden public void print(...) public void println(...) public PrintStream printf(string form, Object... args) (ab dem JDK 5.0) public PrintStream format(string form, Object... args) (ab dem JDK 5.0) Die Methoden print() und println() haben jeweils einen Parameter und ermöglichen die Ausgabe - von boolean-, char-, double-, float-, int- und long-werten - von char-arrays - von Strings (Objekte der Klasse String) - sowie der String-Repräsentation (Methode tostring()) von Objekten beliebiger Klassen Die Methode println() ergänzt die Ausgabe um ein Zeilenendezeichen. Sie lässt sich auch ohne Parameter aufrufen. In diesem Fall bewirkt sie lediglich einen Übergang in eine neue Zeile. Beispiel : class StdOutDemo1 public static void main(string[] args) boolean b = true; char c = 'Z'; int i = ; long l = 124L; float f = 2.25E-2f; double d = 0.0/0.0; String s = "Hallo!"; StdOutDemo1 sod = new StdOutDemo1(); System.out.print(b); System.out.println(); System.out.println(c); System.out.println(i); System.out.println(l); System.out.println(f); System.out.println(d); System.out.println(s); System.out.println(sod); Ausgabe : true Z NaN Hallo! StdOutDemo1@eee36c Die Anwendung der String-Konkatenation in Verbindung mit der automatischen Umwandlung von beliebigen Datenwerten und Objekten in eine String-Repräsentation bei ihrem Auftritt in Konkatenations-Aus drücken (Methode tostring()) erlaubt die Ausgabe mehrerer Werte/Objekte mit einem Methodenaufruf. Achtung : Der +-Operator (Konkatenation, Addition) ist links-rechts-assoziativ. Damit bei mehrfacher Konkatenation tatsächlich der richtige Gesamtstring entsteht, muss bei der ersten (am weitesten links stehenden) Verknüpfungsoperation wenigstens ein String beteiligt sein. Beispiel : class StdOutDemo2 public static void main(string[] args) System.out.println(1 + '+' " ergibt " + 2); System.out.println(1 + "+" " ergibt " + 2); Ausgabe : 45 ergibt ergibt 2

5 FG TECHNISCHE INFORMATIK V JV TH 04 Formatierte Ausgabe (ab dem JDK 5.0) Mittels der PrintStream-Methoden Standard-Ein- und Ausgabe in Java (3-1) public PrintStream printf(string form, Object... args); public PrintStream format(string form, Object... args); Rückgabewert bei beiden Methoden : aktuelles PrintStream-Objekt Beide Methoden sind in der Wirkung identisch. Sie ermöglichen eine C-ähnliche formatierte Ausgabe Der erste Parameter form ist der Format-String. Er enthält analog zum Format-String der C-Funktion printf() die einzelnen Formatangaben (format specifier) für die auszugebenden Werte/Objekte. Durch die Formatangaben wird auch der Typ bzw die Darstellungsart der Ausgabe-Werte festgelegt Zusätzlich kann der Format-String weiteren Text enthalten, der direkt ausgegeben wird. Die zweite Parameter-Angabe Object... args bedeutet, dass eine beliebige Anzahl (auch keine) weiterer Parameter beliebigen Referenz-Typs folgen darf. Diese Parameter (Argumente) legen die Werte fest, die entsprechend des jeweils spezifizierten Formats auszugeben sind. Für jede Formatangabe muss ein passendes Argument übergeben werden. Die Typen dieser Argumente müssen zu den entsprechenden Angaben im Format-String passen. Überflüssige Argumente werden ignoriert Als Parameter können auch Werte einfacher Datentypen auftreten, da sie mittels Autoboxing automatisch in Objekte der zugehörigen Wrapper-Klassen umgewandelt werden. Syntax der Formatangaben (vereinfacht) : % [flags][width][.precision]conversion conversion (Konvertierungszeichen) legt die Formatierungsart und/oder den Typ der Ausgabe fest und schließt eine Formatangabe ab Die wichtigsten Konvertierungszeichen sind : b oder B logischer Wert d ganzzahliger Wert in Dezimaldarstellung o ganzzahliger Wert in Oktaldarstellung x oder X ganzzahliger Wert in Sedezimaldarstellung c oder C Unicode-Zeichen e oder E Gleitpunkt-Wert in Exponentialdarstellung f Gleitpunkt-Wert in Dezimalbruchdarstellung g oder G Gleitpunkt-Wert in Dezimalbruchdarstellung oder Exponentialdarstellung (abhängig von Wert und Genauigkeit) s oder S String (der String, der durch die jeweilige Methode tostring() erzeugt wird) n Zeilenendezeichen Bei einem Großbuchstaben als Konvertierungszeichen werden alle Buchstaben als Großbuchstaben ausgegeben flags (Steuerflags) modifizieren das Ausgabeformat, sie können gegebenenfalls miteinander kombiniert werden Die wichtigsten Steuerflags sind : - linksbündige Ausgabe + auch positive Werte werden mit Vorzeichen ausgegeben (nur für Zahlen anwendbar) 0 Ausgabe führender Nullen (nur für Zahlen anwendbar) ' ' (Blank) Ausgabe positiver Werte mit führendem Blank (nur für Zahlen anwendbar) width (Ausgabefeldbreite) legt die minimale Ausgabefeldbreite fest precision (Genauigkeit) legt i.a. die maximale Ausgabefeldbreite fest, bei Gleitpunktzahlen jedoch die Anzahl der Nachpunktstellen (Ausnahme : beim Konvertierungszeichen g bzw G wird die Gesamtzahl der Ziffern festgelegt), bei Strings : Anzahl der auszugebenden Zeichen des Strings Nichtzulässige Zeichen in einer Formatangabe sowie fehlende oder zu einer Formatangabe nicht-kompatible Argumente führen zum Werfen einer IllegalFormatException.

6 FG TECHNISCHE INFORMATIK V JV TH 02 Standard-Ein- und Ausgabe in Java (3-2) Ergänzende Anmerkungen zur formatierten Ausgabe (ab dem JDK 5.0) Es existieren noch weitere Möglichkeiten der Formatierung (insbesondere auch für Datums- und Zeitdarstellungen). Genauere Informationen können der API-Dokumentation zur Klasse Formatter (Package java.util) entnommen werden. Zur Erzeugung von formatierten Ausgaben kann auch die Klasse Formatter eingesetzt werden : Mit Objekten dieser Klasse ist es u.a. möglich formatierte Ausgaben direkt in Dateien oder OutputStream- sowie PrintStream-Objekten vorzunehmen formatierte Strings zu erzeugen (als Objekte der Klassen StringBuffer oder StringBuilder). Diese Strings können dann explizit ausgegeben (print() oder println()) bzw in Dateien geschrieben werden. Demonstrationsprogramm zur formatierten Ausgabe : // FormOutpDemo1.java // Demonstrationsprogramm zur formatierten Ausgabe public class FormOutpDemo1 void show() int anz = 10; double summe = ; float anteil = f; String type = "Airbus A-380"; System.out.println(" "); System.out.printf("Anzahl : %5d Summe : %8.3e\n", anz, summe); System.out.format("Anzahl : %5d Summe : %8.3e\n", anz, summe); System.out.printf("Anzahl : %-5d Summe : %8.3f\n", anz, summe); System.out.printf("Anzahl : %0+5d Summe : %08.3f\n", anz, summe); System.out.printf("Anteil : %.4g\n", anteil); System.out.printf("Anteil : %.4E\n", anteil); System.out.printf("Anteil : %.4f\n", anteil); System.out.printf("Typ : %s\n", type); System.out.printf("Typ : %15s\n", type); System.out.printf("Typ : %5s\n", type); System.out.printf("Typ : %5.6S\n", type); System.out.printf("Typ : %8.6s\n", type); System.out.printf("%B\n", true); public static void main(string[] args) FormOutpDemo1 demo = new FormOutpDemo1(); demo.show(); Ausgabe des Programms : Anzahl : 10 Summe : 9.999e+01 Anzahl : 10 Summe : 9.999e+01 Anzahl : 10 Summe : 99,988 Anzahl : Summe : 0099,988 Anteil : 5.432e-05 Anteil : E-05 Anteil : 0,0001 Typ : Airbus A-380 Typ : Airbus A-380 Typ : Airbus A-380 Typ : AIRBUS Typ : Airbus TRUE

7 FACHHOCHSCHULE MUENCHEN FACHBEREICH ELEKTROTECHNIK UND INFORMATIONSTECHNIK FG TECHNISCHE INFORMATIK V JV TH Standard-Ein- und Ausgabe in Java (4) Lesen aus der Standard-Eingabe Das für die Standard-Eingabe definierte Stream-Objekt System.in steht als Instanz der Klasse InputStream zur Verfügung. Diese Klasse besitzt zum Einlesen lediglich die mehrfach überladene Methode read(), mit der nur einzelne Bytes oder eine Gruppe von Bytes (Byte-Array) eingelesen werden können. Üblicherweise soll von der Standard-Eingabe aber Text eingelesen werden, der vom Programm entweder als Wert eines einfachen Datentyps oder direkt als String interpretiert und verwendet werden soll. D.h. also, es müssen Zeichenfolgen (Datentyp char) und nicht Bytefolgen (Datentyp Byte) eingelesen werden. Der über System.in erhältliche Byte-Stream muß also in einen Unicode-Stream umgewandelt werden. Diese erfolgt mittels eines Objekts der Klasse InputStreamReader. Dem Konstruktor zur Erzeugung dieses Objekts ist das zugrundeliegende InputStream-Objekt, hier also System.in als Parameter zu übergeben. Die Klasse InputStreamReader erlaubt mittels der überladenen Methode read() das Einlesen von Einzelzeichen bzw Zeichen-Arrays. Einlesen von Einzelzeichen : public int read() throws IOException Funktionswert : gelesenes Zeichen bzw 1 bei Eingabeende Um Strings einlesen zu können, wird ein BufferedReader-Objekt benötigt. Dieses lässt sich unter Verwendung des InputStreamReader-Objekts, das dem Konstruktor als Parameter zu übergeben ist, erzeugen (Der Konstruktor der Klasse BufferedReader benötigt ein Reader-Objekt als Parameter, die Klasse InputStreamReader ist von Reader abgeleitet). Die Klasse BufferedReader stellt neben der überladenen Methode read() zum Einlesen von Einzelzeichen und Zeichen-Arrays eine Methode zum zeilenweisen Lesen zur Verfügung : public String readline() throws IOException Funktionswert : eingelesene Zeile als String-Objekt (ohne Zeilenende-Zeichen) bzw null wenn das Eingabe- Ende (EOF, Dateiende) erreicht ist. Bei der Anwendung dieser Methode (wie auch aller anderen Lese-Methoden) ist zu berücksichtigen, dass bei Auftritt eines I/O-Fehlers, eine Exception vom Typ IOException geworfen wird. Diese ist entweder in der aufrufenden Funktion zu fangen oder von dieser weiterzuwerfen. Darstellung als Klassendiagramm : BufferedReader +read():int +readline():string InputStreamReader +read():int InputStream +read():int Beispiel : // EchoLines.java import java.io.*; class EchoLines public static void main(string[] args) throws IOException BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); String line; while ((line=stdin.readline())!= null) System.out.println(line);

8 FG TECHNISCHE INFORMATIK V JV TH 04 Standard-Ein- und Ausgabe in Java (5) Lesen aus der Standard-Eingabe, Forts. Zum Einlesen von Werten der einfachen Datentypen muß der eingelesene String entsprechend dem Datentyp interpretiert und in die interne Wertedarstellung umgewandelt werden. Hierfür stehen entsprechende statische Methoden der jeweiligen Wrapper-Klassen zur Verfügung : Klasse Byte : public static byte parsebyte(string str) throws NumberFormatException; Klasse Short : public static short parseshort(string str) throws NumberFormatException; Klasse Integer : public static int parseint(string str) throws NumberFormatException; Klasse Long : public static long parselong(string str) throws NumberFormatException; Klasse Float : public static float parsefloat(string str) throws NumberFormatException; Klasse Double : public static double parsedouble(string str) throws NumberFormatException; Diese Methoden liefern die interne Darstellung des durch den Parameter str repräsentierten Werts des jeweiligen Typs als Funktionswert zurück. Sie erzeugen eine Exception vom Typ NumberFormatException, wenn str keinen entsprechenden Zahlenwert darstellt. Zur Umwandlung eines Strings in einen boolean-wert müssen zwei Methoden der Wrapper-Klasse Boolean eingesetzt werden : Klasse Boolean : public static Boolean valueof(string str); Diese Methode erzeugt ein Boolean-Objekt, das den Wert true repräsentiert, wenn der Parameter str gleich dem String "true" ist, wobei Groß-/Kleinschreibung ignoriert wird ("True" oder "TRUE" z.b. führen ebenfalls zum Wert true). Für jeden anderen Wert von str repräsentiert das erzeugte Boolean-Objekt den Wert false. Klasse Boolean : public boolean booleanvalue(); Beispiel : Diese Methode gibt den durch ein Boolean-Objekt repräsentierten boolean-wert zurück. import java.io.*; class StdInpDemo public static void main(string[] args) throws IOException int a, b; BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); System.out.print("Wert von a? "); a = Integer.parseInt(stdin.readLine()); System.out.print("Wert von b? "); b = Integer.parseInt(stdin.readLine()); System.out.println("a+b = " + (a+b)); System.out.print("Boolean-Wert? "); String s = stdin.readline(); boolean bw = Boolean.valueOf(s).booleanValue(); System.out.println("Eingabe war : " + bw); Beispiel für Ein- und Ausgabe des Programms : Wert von a? 213 Wert von b? 421 a+b = 634 Boolean-Wert? True Eingabe war : true Eine alternative, flexiblere und einfachere Möglichkeit zum Einlesen von Werten einfacher Datentypen bietet die mit dem JDK 5.0 eingeführte Klasse Scanner

9 FG TECHNISCHE INFORMATIK V JV TH 03 Die Klasse Scanner in Java (1) Allgemeines zur Klasse Scanner Bestandteil des Packages java.util, ab dem JDK 5.0 vorhanden Objekte der Klasse Scanner dienen zum Zergliedern und Interpretieren von Zeichenfolgen. Die von Scanner-Objekten bearbeitbaren Zeichenfolgen können aus unterschiedlichen Eingabe-Quellen stammen (Dateien, sonstige Eingabe-Streams wie z.b. die Standard-Eingabe, Strings). Die jeweilige Quelle muss beim Erzeugen eines Scanner-Objekts festgelegt werden. Scanner-Objekte zerlegen ihre Eingabe-Zeichenfolge in Teil-Abschnitte (token). Die Zeichen(-muster), die als Trennzeichen zwischen den Abschnitten interpretiert werden (delimiter pattern), lassen sich konfigurieren. Defaultmässig werden Whitespace-Character verwendet. Die einzelnen Teil-Abschnitte stehen als Strings zur Verfügung und können als Werte eines einfachen Datentyps interpretiert und in die dem jeweiligen Typ entsprechende interne Darstellung umgewandelt werden. Damit lassen sich Scanner-Objekte sehr elegant zum Einlesen von Werten der einfachen Datentypen aus der Standard-Eingabe einsetzen, insbesondere auch dann, wenn in einer Eingabezeile mehrere einzulesende Werte enthalten sind. Konstruktoren der Klasse Scanner (Auswahl) public Scanner(File source) public Scanner(Readable source) public Scanner(InputStream source) public Scanner(String source) Erzeugung eines Scanner-Objekts, dessen Eingabe-Quelle die durch source spezifizierte Datei ist Erzeugung eines Scanner-Objekts, dessen Eingabe-Quelle das durch source spezifizierte Objekt ist. Dieses Objekt muss das Interface Readable implementieren Erzeugung eines Scanner-Objekts, dessen Eingabe-Quelle das durch source spezifizierte InputStream-Objekt ist Erzeugung eines Scanner-Objekts, dessen Eingabe-Quelle der durch source spezifizierte String ist. Memberfunktionen der Klasse Scanner (Auswahl) public String nextline() Rückgabe des Rests der aktuellen Eingabe-Zeile public boolean hasnextline() Überprüfung, ob eine weitere Eingabe-Zeile vorhanden ist, wenn ja true public String next() public boolean hasnext() Rückgabe des nächsten Teil-Abschnitts (token) der Eingabe-Zeichenfolge Überprüfung ob ein weiterer Teil-Abschnitt vorhanden ist, wenn ja true public byte nextbyte() public short nextshort() public int nextint() public long nextlong() public float nextfloat() public double nextdouble() Interpretation des nächsten Teil-Abschnitts der Eingabe-Zeichenfolge als Wert des jeweiligen Typs und Rückgabe der internen Darstellung dieses Wertes Jede der Funktionen wirft eine Exception vom Typ InputMismatchException, wenn der Teil-Abschnitt sich nicht als Wert des jeweiligen Typs interpretieren lässt (boolean-werten können mit Gross- und/oder Kleinbuchstaben dargestellt werden) public boolean nextboolean()

10 FG TECHNISCHE INFORMATIK V JV TH 01 Die Klasse Scanner in Java (2) Demonstrationsbeispiele zur Klasse Scanner Programm EchoLinesScanDemo // EchoLinesScanDemo.java // Echo der von der Standard-Eingabe eingelesenen Zeilen in die Standard-Ausgabe // Verwendung der Klase Scanner import java.util.*; public class EchoLinesScanDemo public static void main(string[] args) Scanner scan = new Scanner(System.in); while (scan.hasnextline()) System.out.println(scan.nextLine()); Programm StdInpScanDemo // StdInpScanDemo.java // Demonstrationsprogramm zum Einlesen von der Standard-Eingabe // Verwendung der Klasse Scanner import java.util.*; public class StdInpScanDemo public static void main(string[] args) int a, b; Scanner scan = new Scanner(System.in); System.out.print("Zwei Integer-Werte a und b? "); a = scan.nextint(); b = scan.nextint(); System.out.println("a+b = " + (a + b)); System.out.print("Boolean-Wert? "); boolean bw = scan.nextboolean(); System.out.println("Eingabe war : " + bw); Beispiel für die Ein- und Ausgabe des Programms StdInpScanDemo Zwei Integer-Werte a und b? a+b = 37 Boolean-Wert? FalsE Eingabe war : false

11 HOCHSCHULE MUENCHEN FAKULTÄT FÜR ELEKTROTECHNIK UND INFORMATIONSTECHNIK FG TECHNISCHE INFORMATIK V JV TH 04 Die Klasse Console in Java (1) Allgemeines zur Klasse Console Bestandteil des Packages java.io, ab dem JDK 6.0 vorhanden Die Klasse stellt Methoden zum Zugriff zum Konsolengerät zur Verfügung. Ein Objekt dieser Klasse bildet eine allerdings nicht immer vorhandene Alternative zur Verwendung der Standard- Ein-/Ausgabe-Stream-Objekte. Die Klasse verfügt über keinen öffentlichen Konstruktor. Sie kann also nicht explizit instanziert werden. Vielmehr erfolgt eine implizite Instanzierung als Singleton durch die JVM, falls mit dieser ein Konsolengerät verbunden ist. Dieses ist u.a. immer dann der Fall, wenn die JVM aus einer Kommandozeile heraus ohne Umleitung der Standard-Einund Ausgabe gestartet wird. Das Konsolengerät wird dann typischerweise durch die Tastatur (Standard-Eingabe) und den Bildschirm (Standard-Ausgabe) gebildet. Wenn die JVM dagegen aus einem anderen Prozess (z.b. Hintergrundprozess oder IDE) heraus gestartet wird, ist mit ihr i.a. kein Konsolengerät verbunden. Das gegebenenfalls vorhandene einzige Objekt der Klasse Console kann mittels der statischen Methode der Klasse System public static Console console() ermittelt werden. Falls kein Console-Objekt existiert, liefert die Methode null zurück. Die Klasse Console stellt im wesentlichen die folgenden Funktionalitäten zur Verfügung : Formatierte Ausgabe zeilenweises Einlesen Einlesen von Passwörtern (mit ausgeschalteter Echo-Ausgabe) Ermittlung der vom Console-Objekt verwendeten Stream-Objekte für die Aus- bzw Eingabe. Bei diesen Objekten handelt es sich um Zeichen-Stream-Objekte. Über sie bestehen weitere Möglichkeiten zur Aus- bzw Eingabe. Anmerkung : Die Standard-Stream-Objekten sind dagegen Byte-Stream-Objekte. Die Schreib- und Lese-Methoden der Klasse sind synchronisiert, d.h. sie sind für den Einsatz in Multi-Threadanwendungen geeignet. Die Lese-Methoden geben als Funktionswert null zurück, wenn das Ende des Konsolen-Eingabe-Streams erreicht ist (Eingabe von Ctrl-Z unter Windows bzw Ctrl-D unter Linux/Unix). Wenn anschliessend weitere Zeichen eingegeben werden, können sie mit weiteren Lese-Operationen eingelesen weden. Memberfunktionen der Klasse Console zur Ermittlung der E/A-Stream-Objekte public Reader reader() Ermittlung des mit der Konsole verknüpften Eingabe-Stream-Objekts. (Objekt der Klasse Reader) Funktionswert Mittels der von der Klasse Reader implementierten Methoden lassen sich über dieses Eingabe-Stream-Objekt - Einzelzeichen (Methode read()) sowie - Zeichenfolgen (mehrere Methoden read(...), s. API-Dokumentation) einlesen Das Einlesen von Zeichenfolgen über Zeilengrenzen hinweg ist dabei nicht möglich. Da die Klasse Reader das Interface Readable implementiert, lässt sich das Eingabe-Stream-Obekt als Quelle für Scanner-Objekte einsetzen. public PrintWriter writer() Ermittlung des mit der Konsole verknüpften Ausgabe-Stream-Objekts. (Objekt der Klasse PrintWriter) Funktionswert Die Klasse PrintWriter stellt u.a. die gleichen Methoden print(...), println(...), printf(...) und format(...) zur Verfügung wie die Klasse PrintStream. Damit lassen sich über das Ausgabe-Stream- Objekt die gleichen Ausgabe-Operationen wie über die Standard-Ausgabe-Stream-Objekte (System.out und System.err) realisieren.

12 FG TECHNISCHE INFORMATIK V JV TH 02 Die Klasse Console in Java (2) Memberfunktionen der Klasse Console zur Ein- und Ausgabe public Console printf(string form, Object... args) public Console format(string form, Object... args) formatierte Ausgabe in den Ausgabe-Stream der Konsole Beide Methoden besitzen die gleiche Funktionalität Parameter : form Formatstring, enthält die Formatangaben für die auszugebenden Werte/Objekte Syntax der Formatangaben s. Methode printf(...) der Klasse PrintStream args Referenzen auf die auszugebenden Werte/Objekte Funktionswert : aktuelles Console-Objekt public void flush() unmittelbare Ausgabe (Flush) des Buffers des Konsolen-Ausgabe-Streams public String readline() Lesen der nächsten Zeile aus dem Konsolen-Eingabe-Stream Funktionswert : gelesene Zeile bzw null (wenn am Zeilenende gelesen wird) Das Zeilenende-Zeichen wird nicht mit zurückgegeben public String readline(string form, Object... args) Ausgabe eines formatierten Prompts in den Konsolen-Ausgabe-Stream, anschliessend Lesen der nächsten Zeile aus dem Konsolen-Eingabe-Stream Parameter : Festlegung des Prompts, s. Parameter der Methode printf(...) (bzw format(...)) Funktionswert : gelesene Zeile bzw null (wenn am Zeilenende gelesen wird) Das Zeilenende-Zeichen wird nicht mit zurückgegeben public char[] readpassword() Lesen eines Passworts aus dem Konsolen-Eingabe-Stream mit ausgeschalteter Echo-Ausgabe Funktionswert : Gelesenes Passwort (in einem char-array) bzw null (wenn am Zeilenende gelesen wird) Ein Zeilenende-Zeichen wird nicht mit zurückgegeben Anmerkung : Da die Methode das gelesene Passwort als char-array und nicht als String-Objekt zurückgibt, kann es unmittelbar nach Verwendung im Speicher überschrieben werden public char[] readpassword(string form, Object... args) Ausgabe eines formatierten Prompts in den Konsolen-Ausgabe-Stream, anschliessend Lesen eines Passworts aus dem Konsolen-Eingabe-Stream mit ausgeschalteter Echo-Ausgabe Parameter : Festlegung des Prompts, s. Parameter der Methode printf(...) (bzw format(...)) Funktionswert : Gelesenes Passwort (in einem char-array) bzw null (wenn am Zeilenende gelesen wird) Ein Zeilenende-Zeichen wird nicht mit zurückgegeben Anmerkung : Da die Methode das gelesene Passwort als char-array und nicht als String-Objekt zurückgibt, kann es unmittelbar nach Verwendung im Speicher überschrieben werden

13 FG TECHNISCHE INFORMATIK V JV TH 01 Demonstrationsprogramm zur Klasse Console in Java Programm ConsoleDemo // ConsoleDemo.java // Demo-Programm zur Klasse Console import java.io.*; import java.util.*; public class ConsoleDemo public static void main(string[] args) throws IOException Console con = System.console(); if (con == null) System.err.println("JVM besitzt keine Console -- Schade"); else System.err.println("JVM besitzt eine Console"); con.printf("%s\n", "Das ist gut"); char[] altpass = con.readpassword("%s ", "altes Passwort?"); con.printf("die folgende Ausgabe sollte nicht erfolgen :\n"); con.printf("das Passwort lautet : %s \n", new String(altPass)); con.writer().print("das Passwort lautet : "); con.writer().println(altpass); if (!verifypasswd(altpass)) con.printf("keine Berechtigung\n"); else char[] neupass1; char[] neupass2; do neupass1 = con.readpassword("neues Passwort? "); neupass2 = con.readpassword("neues Passwort wiederholen : "); while (!Arrays.equals(neuPass1, neupass2)); changepasswd(neupass1); Arrays.fill(neuPass1, ' '); Arrays.fill(neuPass2, ' '); Arrays.fill(altPass, ' '); System.out.print("Geben Sie einen beliebigen String ein : "); BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String s = stdin.readline(); System.out.println(s); static void changepasswd(char[] pw) System.out.println("Passwort geaendert!"); static boolean verifypasswd(char[] pw) return true;

14 FG TECHNISCHE INFORMATIK V JV TH 04 Die Klasse System Interaktion mit dem Laufzeitsystem in Java (1) Die Klasse System ist eine nicht-instanzierbare Utility-Klasse (Package java.lang), die einen Zugriff zu einigen Systemeigenschaften ermöglicht. Im wesentlichen stellt sie zur Verfügung : die Standard-Ein- und Ausgabe-Objekte (öffentliche statische Datenkomponenten) eine statische Methode zur Ermittlung des Konsolen-Objekts, falls vorhanden (ab JDK 1.6) statische Methoden zum Ermitteln (und Ändern) der System-Umgebung ("System Properties") statische Methoden zum Zugriff zu den aktuellen Environment-Variablen des Betriebssystems (ab JDK 1.5) statische Methoden zum Setzen und Ermitteln des im System installierten SecurityManager-Objekts statische Utility-Methoden (z.b. zur Ermittlung der aktuellen Zeit, Teilkopieren von Arrays) einige statische Methoden, die zum aktuellen Runtime-Objekt zugreifen (Aufruf gleichnamiger Methoden) : public static void gc() public static void runfinalization() expliziter Aufruf des Garbage Collectors expliziter Aufruf der finalize()-methoden aller zur Vernichtung anstehenden Objekte public static Laden der durch libname spezifizierten dynam.library void loadlibrary(string libname) (native Code) Die Zuordnung zwischen Library, Library-Ort, und Library-Dateiname ist systemabhängig public static void load(string filepath) Laden einer dynam. Library (native Code), die durch den absoluten Dateipfad filepath referiert wird. public static void exit(int status) Beendigung der aktuell laufenden JVM (u. damit des Programms). Der Parameter status ist der Programm-Exit-Code Der Aufruf System.method() ist äquivalent zu Runtime.getRuntime().method() Ermittlung der aktuellen Zeit Hierzu dient die statische Methode der Klasse System : public static long currenttimemillis(); Rückgabewert : Vergangene Zeit seit dem UTC, Mitternacht in Millisekunden Zur Decodierung dieser Zeit in ihre üblicherweise vom Menschen verwendeten Komponenten (Zeit und Datum) kann die Bibliotheks-Klasse Date (Package java.util) eingesetzt werden : Erzeugung eines Date-Objektes, dessen Konstruktor der von currenttimemillis() zurückgegebene Wert als Parameter übergeben wird. Aufruf der Methode public String tostring() für dieses Date-Objekt. Beispiel : Der von dieser Methode als Funktionswert erzeugte String enthält die Zeit (und Datum) in folgender Form : dow mon dd hh:mm:ss zzz yyyy import java.util.date; class ActTime public static void main(string[] args) Date act = new Date(System.currentTimeMillis()); System.out.println("aktuelle Zeit : " + act.tostring()); aktuelle Zeit : Wed Aug 08 19:38:30 CEST 2007

15 FACHHOCHSCHULE MUENCHEN FACHBEREICH ELEKTROTECHNIK UND INFORMATIONSTECHNIK FG TECHNISCHE INFORMATIK V JV TH Interaktion mit dem Laufzeitsystem in Java (2) System-Umgebung (System Properties) Die System-Umgebung besteht aus System-Eigenschaften (System Properties). Diese werden z. Tl von Standard- Bibliotheks-Klassen benutzt. Sie können aber auch in eigenen Klassen verwendet werden. Eine System Property hat einen Namen und einen Wert. Der Name ist ein String, der durch jeweils einen Punkt in mehrere Abschnitte unterteilt sein kann. Der Wert ist ebenfalls ein String. Änderung der System-Umgebung Für jede JVM existiert ein Satz von Standard System Properties. Zusätzlich können benutzerdefinierte System Properties beim Programm- (JVM-) Start festgelegt werden. Hierzu dient die D Option beim Aufruf der JVM. Beispiel : java DLabor.aktuell=LSW ActTime Hierdurch wird die System Property mit dem Namen "Labor.aktuell" und dem Wert "LSW" zusätzlich gesetzt. Darüberhinaus können weitere System Properties auch während des Programmlaufs gesetzt werden, vorausgesetzt das SecurityManager-Objekt erlaubt es. Zum Setzen (und Ändern) einer System Property existiert in der Klasse System die statische Methode public static String setproperty(string key, String val) Die Methode setzt eine System Property mit dem Namen key auf den Wert val. Als Funktionswert gibt die Methode den zuvor gesetzt gewesenen Wert der System Property bzw falls diese noch nicht existiert hat null zurück. Beispiel : System.setProperty("Labor.aktuell", "LSW"); Ermittlung der System-Umgebung Properties werden in Objekten der Klasse Properties (Package java.util) gespeichert. Für die Standard System Properties wird beim Start der JVM ein entsprechendes Objekt angelegt. (System- Properties-Objekt). Zu ihm kann über die Klasse System zugegriffen werden. Benutzerdefinierte System Properties (sowohl bei Programmstart festgelegte, als auch im Programm gesetzte) werden in dieses Objekt eingefügt. Ein Benutzer kann in einem Programm darüberhinaus weitere Properties-Objekte anlegen. Statische Methoden der Klasse System zum Zugriff zum System-Properties-Objekt : public static Properties getproperties() Funktionswert : das System-Properties-Objekt public static String getproperty(string key) Funktionswert : der Wert der System Property mit dem Namen key, bzw null, falls Property nicht existiert Sämtliche in einem Properties-Objekt enthaltenen Properties (Name/Wert-Paare) lassen sich mittels der folgenden Methode der Klasse Properties über ein PrintStream-Objekt ausgeben : public void list(printstream out);

16 FG TECHNISCHE INFORMATIK V JV TH 03 Interaktion mit dem Laufzeitsystem in Java (3) Beispielprogramm zur Ausgabe der System Properties in die Standard-Ausgabe import java.util.properties; class SysProps public static void main(string[] args) System.getProperties().list(System.out); -- listing properties -- java.runtime.name=java(tm) SE Runtime Environment sun.boot.library.path=c:\programme\java\jre1.6.0\bin java.vm.version=1.6.0-b105 java.vm.vendor=sun Microsystems Inc. java.vendor.url= path.separator=; java.vm.name=java HotSpot(TM) Client VM file.encoding.pkg=sun.io user.country=de sun.java.launcher=sun_standard sun.os.patch.level=service Pack 2 java.vm.specification.name=java Virtual Machine Specification user.dir=e:\java\vorlesung\elemprogfunc java.runtime.version=1.6.0-b105 java.awt.graphicsenv=sun.awt.win32graphicsenvironment java.endorsed.dirs=c:\programme\java\jre1.6.0\lib\endorsed os.arch=x86 java.io.tmpdir=c:\dokume~1\thomas\lokale~1\temp\ line.separator= java.vm.specification.vendor=sun Microsystems Inc. user.variant= os.name=windows XP sun.jnu.encoding=cp1252 java.library.path=c:\windows\system32;.;c:\windows\sun\... java.specification.name=java Platform API Specification java.class.version=50.0 sun.management.compiler=hotspot Client Compiler os.version=5.1 user.home=c:\dokumente und Einstellungen\thomas user.timezone= java.awt.printerjob=sun.awt.windows.wprinterjob file.encoding=cp1252 java.specification.version=1.6 user.name=thomas java.class.path=.;c:\programme\java\jre1.6.0\lib\ext\... java.vm.specification.version=1.0 sun.arch.data.model=32 java.home=c:\programme\java\jre1.6.0 java.specification.vendor=sun Microsystems Inc. user.language=de awt.toolkit=sun.awt.windows.wtoolkit java.vm.info=mixed mode, sharing java.version=1.6.0 java.ext.dirs=c:\programme\java\jre1.6.0\lib\ext;c:... sun.boot.class.path=c:\programme\java\jre1.6.0\lib\resour... java.vendor=sun Microsystems Inc. file.separator=\ java.vendor.url.bug= sun.cpu.endian=little sun.io.unicode.encoding=unicodelittle sun.desktop=windows sun.cpu.isalist=

17 FACHHOCHSCHULE MUENCHEN FACHBEREICH ELEKTROTECHNIK UND INFORMATIONSTECHNIK FG TECHNISCHE INFORMATIK V JV TH Interaktion mit dem Laufzeitsystem in Java (4) Zugriff zu den Environment-Variablen des Betriebssystems Ab dem JDK 5.0 kann in Java-Programmen wieder zu den vom Betriebssystem verwalteten Environment-Variablen zugegriffen werden. Eine Environment-Variable besitzt wie eine System Property einen Namen und hat einen Wert. Sowohl Name als auch Wert sind jeweils ein String. Jede Environment-Variabale bildet ein String-Paar. Mit den folgenden statischen Methoden der Klasse System kann zu dem bei der Programmabarbeitung aktuellen Environment zugegriffen werden : public static Map<String, String> getenv() Ermittlung aller aktuellen Environment-Variablen. Funktionswert : - String-String-Map, die die Environment-Variablen enthält. Falls das Betriebssystem keine Environment-Variablen unterstützt, ist die zurückgegebene Map leer. Eine Map ist ein assoziativer Container, der Schlüssel (key) Werte (value)-paare speichert. Als Schlüssel dient hier der Name einer Environment-Variablen, der Wert ist der Wert dieser Variablen public static String getenv(string name) Ermittlung des Werts der Environment-Variablen mit dem Namen name Funktionswert : - Wert der Environment-Variablen - bzw null, wenn keine Environment-Variable mit dem Namen name existiert Falls ein Security Manager installiert ist, wird er von beiden Funktionen befragt, ob der Zugriff zum Environment zulässig ist. Bei Unzulässigkeit wird eine SecurityException geworfen. Beispielprogramm zum Zugriff zu den Environment-Variablen Auflistung aller Environmentvariablen (Name = Wert) in die Standard-Ausgabe // GetEnv.java // Ermittlung des aktuellen Environments import java.util.*; public class GetEnv public static void main(string[] args) Map<String, String> env = System.getenv(); Set<String> keys = env.keyset(); for (String name : keys) System.out.println(name + " = " + System.getenv(name));

18 FG TECHNISCHE INFORMATIK V JV TH 01 Die Klasse Runtime in Java (1) Grundsätzliches Die Klasse Runtime befindet sich im Package java.lang. Jede Java-Applikation besitzt genau ein Objekt dieser Klasse. Es wird beim Start der JVM automatisch erzeugt. Dieses Objekt bildet ein Interface zwischen der Java-Applikation und der Laufzeitumgebung der ausführenden JVM. Zur Ermittlung des aktuellen Runtime-Objekts dient die statischen Methode der Klasse Runtime : static Runtime getruntime() Runtime.getRuntime() liefert das mit der aktuellen Java-Applikation assoziierte Runtime-Objekt. Eine explizite Instanzierung der Klasse ist nicht möglich. Die Klasse Runtime stellt Funktionalitäten in folgenden Bereichen zur Verfügung : Information über Systemresourcem der JVM (Prozessoranzahl, Arbeitsspeicher) expliziter Aufruf des Garbage Collectors Ausführung externer Programme in Kindprozessen Laden dynamischer Bibliotheken (nativer Code) Debug-Unterstützung Beendigung (shutdown) der JVM Information über Systemresourcen der JVM Hierfür dienen die folgenden Methoden der Klasse Runtime public int availableprocessors() Rückgabe der Anzahl Prozessoren, die der JVM zur Verfügung stehen public long freememory() public long totalmemory() public long maxmemory() Ermittlung des freien der JVM zur Verfügung stehenden Arbeitsspeichers, Funktionswert = freier Arbeitsspeicher in Bytes Ermittlung des gesamten der JVM zur Verfügung stehenden Arbeitspeichers, Funktionswert = gesamter Arbeitsspeicher in Bytes Ermittlung der maximalen Arbeitspeichergröße, die die JVM zu nutzen versuchen wird (in Bytes) Falls keine obere Grenze existiert, Rückgabe von Long.MAX_VALUE Demonstrationsbeispiel : public class ResInfo public static void main(string[] args) Runtime rt = Runtime.getRuntime(); System.out.println("Einige Systemresourcen der JVM :"); System.out.println("Anzahl Prozessoren : " + rt.availableprocessors()); System.out.println("gesamter Arbeitsspeicher : " + rt.totalmemory() + " Bytes"); System.out.println("freier Arbeitsspeicher : " + rt.freememory() + " Bytes"); System.out.println("maximaler Arbeitsspeicher : " + rt.maxmemory() + " Bytes"); Einige Systemresourcen der JVM : Anzahl Prozessoren : 2 gesamter Arbeitsspeicher : Bytes freier Arbeitsspeicher : Bytes maximaler Arbeitsspeicher : Bytes

19 FG TECHNISCHE INFORMATIK V JV TH 02 Die Klasse Runtime in Java (2) Ausführung externer Programme in Kindprozessen Die Erzeugung von Kindprozessen, die ein anzugebendes Programm ausführen, wird durch mehrere überladene Methoden mit dem Namen exec ermöglicht. Alle exec-methoden geben bei Erfolg als Funktionswert ein Objekt der Klasse Process zurück. Dieses Objekt repräsentiert den neu erzeugten Kindprozeß. Es ermöglicht dem Elternprozeß hinsichtlich bestimmter Aspekte eine Interaktion mit dem erzeugten Kindprozeß (z.b. Warten auf Kindprozeßende, Ermittlung des Return- Codes des Kindprozesses, Abbruch des Kindprozesses) Beim Auftreten von Fehlern werfen die exec-methoden entsprechende Exceptions. So werfen alle exec-methoden beim Auftreten eines I/O-Fehlers (z.b. Programmdatei nicht gefunden) eine IOException. Falls ein Security Manager installiert ist (ein SecurityManager-Objekt existiert), überprüft dieser, ob die Ausführung des angegebenen Programms zulässig ist. Bei Unzulässigkeit wird eine SecurityException geworfen. Überblick über die exec-methoden (Auswahl) : public Process exec(string cmd) throws IOException Ausführung des durch cmd referierten Programms in einem neu erzeugten Kindprozeß public Process exec(string[] cmdarr) Ausführung des durch cmdarr[0] referierten Programms in einem throws IOException neu erzeugten Kindprozeß. Die übrigen Elemente von cmdarr (ab Index 1) werden dem Programm als Programmparameter übergeben public Process exec(string cmd, Ausführung des durch cmd referierten Programms in einem neu String[] envp) erzeugten Kindprozeß throws IOException envp referiert das dem Programm zu übergebende Environment public Process exec(string[] cmdarr, Ausführung des durch cmdarr[0] referierten Programms in einem String[] envp) neu erzeugten Kindprozeß. Die übrigen Elemente von cmdarr throws IOException (ab Index 1) werden dem Programm als Programmparameter übergeben envp referiert das dem Programm zu übergebende Environment Wird kein Environment angegeben (Methoden mit nur einem Parameter bzw envp == null) so wird dem im Kindprozess ausgeführten Programm das Environment des Elternprozesses übergeben Es existieren zwei weitere exec-methoden (3 Parameter), mit denen für den neu erzeugten Kindprozeß explizit das Arbeitsdirectory festgelegt werden kann. Wird für den entsprechenden Parameter null übergeben so erbt wie bei den o.a. exec-methoden der Kindprozeß das Arbeitsdirectory des Elternprozesses. Einfaches Demonstrationsbeispiel : import java.io.*; class ExecDemo public static void main(string[] args) throws IOException String[] cmd = null; if (args.length>0) cmd = args; else cmd = new String[1]; cmd[0]= "calc"; Runtime.getRuntime().exec(cmd);

20 FACHHOCHSCHULE MUENCHEN FACHBEREICH ELEKTROTECHNIK UND INFORMATIONSTECHNIK FG TECHNISCHE INFORMATIK V JV TH Exceptions in Java (1) Prinzip des Exception Handlings Java stellt wie auch C++ einen speziellen Mechanismus zur Behandlung von Ausnahmesituationen (Fehlerfällen, Exceptions), die während der Programmausführung auftreten können, zur Verfügung Exception Handling Ausnahmesituationen in diesem Sinne sind Fehler, oder sonstige unerwünschte Sonderfälle (z.b. Dateizugriffsfehler, Verletzung von Array-Grenzen, Datenformatfehler usw), die im normalen Programmablauf nicht auftreten sollten, aber auftreten können. Exception Handling ist kein Mechanismus zur Behandlung von externen oder internen Interrupts. Exception Handling trennt den Code, der Fehler verursachen kann, von dem Code, der einen aufgetretenen Fehler behandelt. Dadurch kann der eigentliche den normalen Programmablauf steuernde (produktive) Code frei gehalten werden von einer ständigen Überprüfung auf den Auftritt von Fehlern und Sonderfällen sowie der Reaktion auf diese. Dies trägt erheblich zur Klarheit und Übersichtlichkeit des Codes bei. Code (z.b. eine Methode einer Bibliotheksklasse), der eine Ausnahmesituation entdeckt, wirft eine Exception, die dann von einem anderen Code-Teil, dem Exception-Handler gefangen wird. Im Exception-Handler findet die Reaktion auf die (Bearbeitung der) Ausnahmesituation statt. Diese kann der Fehlerart sowie der jeweiligen spezifischen Programmsituation angepasst werden. Z.B. kann eine Fehlermeldung ausgegeben werden und anschliessend das Programm fortgesetzt oder beendet werden. Oder es kann versucht werden, die Fehlerursache zu beseitigen und das Programm dann fortzusetzen. Exceptions werden als Objekte behandelt. Sie enthalten Informationen über die Fehlerursache und stellen Methoden zum Zugriff zu diesen zur Verfügung. Werfen einer Exception (throwing) bedeutet das Erzeugen eines Objekts einer Exception-Klasse und die anschliessende Suche eines passenden Exception-Handlers. Wird ein derartiger Handler gefunden, wird ihm das Exception-Objekt (genauer eine Referenz darauf) übergeben ( Fangen der Exception, catching). Dem Handler stehen damit die im Exception-Objekt enthaltenen Informationen zur Auswertung zur Verfügung. Exception Handling wird in Java wesentlich umfangreicher und strikter als in C++ angewendet : In der Standard-Bibliothek sind zahlreiche Exception-Klassen definiert. Sie bilden eine über mehrere Pakete verteilte Klassenhierarchie, die die Klasse Throwable (von Object abgeleitet, Paket java.lang) als Wurzelklasse besitzt. Im Konstruktor einer derartigen Klasse wird i.a. die Exception-Ursache bzw eine Kurzbeschreibung der Exception durch einen String (fest codiert oder als Parameter übergeben) festgelegt. Viele Methoden vieler Bibliotheksklassen werfen Exceptions. Java erzwingt, dass geworfene Exceptions gefangen werden müssen. Existiert in einem Benutzerprogramm kein geeigneter Exception-Handler, so werden sie von einem in der JVM angesiedelten Standard-Handler behandelt, der Informationen über die Exception in die Standard-Ausgabe ausgibt und anschliessend das Programm (genauer den aktuellen Thread) beendet. Ein Benutzer kann jederzeit eigene Exception-Klassen definieren. Dies kann sinnvoll sein, wenn spezielle Fehlerfälle gesondert von anderen behandelt werden sollen (z.b. "Division durch Null" als Spezialfall einer ArithmeticException). Eine beutzerdefinierte Exception-Klasse muß von einer der Standard-Bibliotheks-Exception-Klassen abgeleitet sein

21 FACHHOCHSCHULE MUENCHEN FACHBEREICH ELEKTROTECHNIK UND INFORMATIONSTECHNIK BEREICH DATENTECHNIK V JV TH Exceptions in Java (2) Hierarchie der Bibliotheks-Exception-Klassen Alle Exception-Klassen sind direkt oder indirekt von der Klasse Throwable abgeleitet. Die Klasse Throwable (Paket java.lang) ist eine direkte Unterklasse von Object. Überblick über den Anfang der Hierarchie : Throwable Error Exception VirtualMachineError weitere RuntimeException IOException Error-Klassen weitere Exception- Klassen ArithmeticException weitere RuntimeException- Klassen FileNotFoundException weitere IOException- Klassen Exceptions der Klasse Error sowie der davon abgeleiteten Klassen kennzeichnen ernsthafte Systemfehler, die normalerweise nicht auftreten sollten, aber prinzipiell jederzeit auftreten können. Ein normales Benutzerprogramm kann auf derartige Exceptions i.a. nicht sinnvoll reagieren und sollte sie deswegen auch nicht fangen. Vielmehr sollten sie immer vom Default-Exception-Handler der JVM behandelt werden. Exceptions der Klasse RuntimeException sowie der davon abgeleiteten Klassen können ebenfalls prinzipiell an beliebiger Stelle während des Programmablaufs auftreten. I.a. liegt ihre Ursache in einem logischen Programmierfehler (z.b. Division durch 0 oder unzulässiger Array-Index). Eine vernünftige Reaktion zur Laufzeit ist i.a. nicht möglich. Derartige Fehler sollten i.a. im Programm-Code korrigiert werden. Ein Benutzerprogramm kann diese Exceptions behandeln (d.h. geeignete Exception-Handler bereitstellen), muß es aber nicht. Im letzteren Fall erfolgt wiederum eine Behandlung durch den Default-Handler der JVM. Exceptions aller übrigen Klassen (z.b. IOException) repräsentieren Fehler, mit denen man prinzipiell rechnen muß (z.b. Datei ist nicht vorhanden) und die deswegen auch in irgendeiner Weise behandelt werden müssen. Für diese Exceptions schreibt Java eine "catch-or-declare"-erfordernis vor. Sie müssen von der Funktion, in der sie geworfen werden, entweder gefangen oder von ihr als weiter-werfbar deklariert werden. Andererseits darf eine Funktion nur solche Exceptions dieser Klassen werfen, die sie auch deklariert hat. Das Einhalten dieser Erfordernis kann vom Compiler überprüft werden. Sie werden daher als geprüfte (checked) Exceptions bezeichnet. Exceptions der Klassen Error und RuntimeException sowie der davon abgeleiteten Klassen sind dagegen ungeprüfte (unchecked) Exceptions. Sie können jederzeit geworfen werden, ohne daß sie von der entsprechenden Funktion deklariert werden müssen. Für sie gilt die "catch-or-declare"-erfordernis nicht, sie dürfen aber deklariert werden

22 FACHHOCHSCHULE MUENCHEN FACHBEREICH ELEKTROTECHNIK UND INFORMATIONSTECHNIK FG TECHNISCHE INFORMATIK V JV TH Die Klasse Throwable Exceptions in Java (3) Die direkt von der Klasse Object abgeleitete Klasse Throwable (Paket java.lang) ist Basisklasse aller Exception-Klassen. Sie definiert ein allgemeines Interface für den Zugriff zu den Exception-Objekten aller Exception-Klassen Die vier wichtigsten Methoden dieses Interfaces sind : public String getmessage(); Diese Methode gibt den bei der Exception-Objekt-Erzeugung gespeicherten Ursachen- bzw Kurzbeschreibungs- String als Funktionswert zurück, bzw null, falls kein derartiger String gespeichert wurde. public String tostring(); Diese Methode erzeugt einen String, der aus dem vollqualifizierten Namen der tatsächlichen Klasse des Exception- Objekts besteht, gegebenenfalls (falls getmessage() einen Wert!=null zurückgibt) gefolgt von ": " und dem Rückgabewert von getmessage(). public void printstacktrace(); Diese Methode gibt den Funktionswert von tostring() gefolgt von dem Aufruf-Stack der Funktion, in der die Exception ursprünglich geworfen wurde, in die Standard-Fehler-Ausgabe (System.err) aus. public void printstacktrace(printstream s); Diese Methode gibt den Funktionswert von tostring() gefolgt von dem Aufruf-Stack der Funktion, in der die Exception ursprünglich geworfen wurde, in den durch s referierten Print-Stream aus. Deklaration werfbarer Exceptions (throws-klausel) Die von einer Funktion werfbaren geprüften Exceptions müssen von dieser deklariert werden. Werfbare ungeprüfte Exceptions können, müssen aber nicht deklariert werden. Die Deklaration erfolgt durch eine im Funktionskopf nach der Parameterliste anzugebende throws-klausel. Die throws-klausel besteht aus dem Schlüsselwort throws, gefolgt von einer durch Kommata getrennten Auflistung von Exception-Klassen Syntax : throws Exception-Klasse, Beispiel : public String liesetwas(string dname) throws FileNotFoundException, EOFException //... Werfen einer Exception Mittels einer throw-anweisung. Nach dem Schlüsselwort throw ist eine Referenz auf das zu werfende Exception-Objekt anzugeben. Diese Referenz kann der Wert eines new-ausdrucks sein (neu erzeugtes Exception-Objekt) die einem Exception-Handler übergebene Objekt-Referenz sein ("Weiterwerfen" der Exception) Syntax : throw Exception-Objekt-Referenz ; Beispiel : throw new ArithmeticException("Nenner ist Null");

Javakurs zu Informatik I. Henning Heitkötter

Javakurs zu Informatik I. Henning Heitkötter Javakurs zu Informatik I Arrays vergleichen Implementieren Sie folgende Methode, die prüft, ob die Elemente der beiden Arrays an jeder Position übereinstimmen: public static boolean identisch(int[] a,

Mehr

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions try-catch Schlüsselworte try-catch e Schlüsselwort Schlüsselwort selbst erstellte ermöglichen die Behandlung von Fehlern, die zur Laufzeit entstehen. try-catch in C: Fehler führt immer zum Abbruch des

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Lösungen zum 2. Komplex

Lösungen zum 2. Komplex Studiengang Medieninformatik LV Software Engineering I Prof. Dr.-Ing. habil. H. Fritzsche Wintersemester 2013/14 Lösungen zum 2. Komplex Aufgabe 1 Exportieren der Anwendung: Über das Kontext-Menü des Projektes

Mehr

Programmieren I. Kapitel 15. Ein und Ausgabe

Programmieren I. Kapitel 15. Ein und Ausgabe Programmieren I Kapitel 15. Ein und Ausgabe Kapitel 15: Ein und Ausgabe Ziel: einen kleinen Einblick in die vielfältigen IO Klassen geben Grober Überblick Klasse File zur Verwaltung von Dateien Random

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1 Kapitel 11 Fehler und Ausnahmen Fehler und Ausnahmen 1 Ziele Fehlerquellen in Programmen und bei der Programmausführung verstehen Das Java-Konzept der Ausnahmen als Objekte kennenlernen Ausnahmen auslösen

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Ausnahmen. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Ausnahmen. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung Dr. Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung WS18/19 https://www.sosy-lab.org/teaching/2018-ws-infoeinf/ Fehlerarten Bei der Programmierung

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Ausnahmen. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Ausnahmen. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung Philipp Wendler Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung https://www.sosy-lab.org/teaching/2017-ws-infoeinf/ WS17/18 Fehlerarten Bei der Programmierung

Mehr

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java 3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

Übungsblatt 3: Algorithmen in Java & Grammatiken

Übungsblatt 3: Algorithmen in Java & Grammatiken Humboldt-Universität zu Berlin Grundlagen der Programmierung (Vorlesung von Prof. Bothe) Institut für Informatik WS 15/16 Übungsblatt 3: Algorithmen in Java & Grammatiken Abgabe: bis 9:00 Uhr am 30.11.2015

Mehr

Java Fehlerbehandlung

Java Fehlerbehandlung Java Fehlerbehandlung 1 Fehlerbehandlung In jedem nicht-trivialen Programm kann es während der Laufzeit zu Fehlersituationen kommen. Dabei handelt es sich nicht unbedingt um Programmierfehler: z. B.: Programm

Mehr

Ausnahmen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Ausnahmen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung : http://www.pst.ifi.lmu.de/lehre/wise-12-13/infoeinf WS12/13 Fehlerarten Bei der Programmierung können viele Arten von Fehlern auftreten: Syntaktische Fehler

Mehr

Ausnahmen. Dr. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Ausnahmen. Dr. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Dr. Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-16-17/infoeinf WS16/17 Action required now 1. Smartphone: installiere die App "socrative

Mehr

Ausnahmen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Ausnahmen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Fehlerarten Bei der Programmierung können viele Arten von Fehlern auftreten:

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Dateien lesen und schreiben 2 Übersicht der heutigen Inhalte File Streams try-with-resources Properties csv-dateien 3 Klasse File Die Klasse java.io.file bietet Unterstützung im Umgang

Mehr

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek Programmieren I Dr. Klaus Höppner Hochschule Darmstadt Wintersemester 2008/2009 1 / 22 2 / 22 Strategie zum Entwurf von Klassen Beispiele Objektorientierte Sichtweise: Mit welchen Objekten habe ich es

Mehr

Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe

Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe Tutorium Informatik 1 Aufgabe 2: Formatierte Ein- und Ausgabe Fachbereich: Elektrotechnik Inhaltsverzeichnis 1 Aufgabe 1 2 Benötigte Funktionen und Schlüsselwörter 2 Robert Halas / FH Regensburg - 2003

Mehr

Applet Firewall und Freigabe der Objekte

Applet Firewall und Freigabe der Objekte Hauptseminar Applet Firewall und Freigabe der Objekte Nachweis von Sicherheitseigenschaften für JavaCard Jin Zhou Ein Überblick über diesen Vortrag Applet Firewall Kontext JCRE Entry Point Objekt Shareable

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Ausnahmen. Gilbert Beyer und Annabelle Klarl. Einführung in die Informatik. Zentralübung zur Vorlesung Einführung in die Informatik

Ausnahmen. Gilbert Beyer und Annabelle Klarl. Einführung in die Informatik. Zentralübung zur Vorlesung Einführung in die Informatik Ausnahmen Zentralübung zur Vorlesung http://www.pst.ifi.lmu.de/lehre/wise-11-12/infoeinf WS11/12 Inhalte der heutigen Vorlesung: Arten von Fehlern Auslösen von Ausnahmen Vermeiden von Ausnahmen Ausnahmeklassen

Mehr

Distributed Computing Group

Distributed Computing Group JAVA TUTORIAL Distributed Computing Group Vernetzte Systeme - SS 06 Übersicht Warum Java? Interoperabilität grosse und gut dokumentierte Library weit verbreitet Syntax sehr nahe an C Erfahrung: Java wird

Mehr

Java Einführung Collections

Java Einführung Collections Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...

Mehr

Software Engineering Klassendiagramme Einführung

Software Engineering Klassendiagramme Einführung Software Engineering Klassendiagramme Einführung Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Aufgabe Erstellen Sie eine Klasse Person in Java. Jede Person verfügt

Mehr

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4. ! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.4 Exceptions - 1 - Ausnahmen (Exceptions( Exceptions) Treten auf, wenn zur

Mehr

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

188.154 Einführung in die Programmierung für Wirtschaftsinformatik

188.154 Einführung in die Programmierung für Wirtschaftsinformatik Beispiel 1 Vererbung (Liste) Gegeben sind die beiden Klassen ListNode und PersonNode. 188.154 Einführung in die Programmierung für Wirtschaftsinformatik Wiederholung, Prüfungsvorbereitung Monika Lanzenberger

Mehr

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007 Fachhochschule Bonn-Rhein-Sieg University of Applied Sciences Fachbereich Informatik Prof. Dr. Peter Becker Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Mehr

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf 16 Exceptions Zur Behandlung unerwarteter Situationen bietet Java Unterstützung in Form von Exceptions oder Ausnahmen. Den Sinn von Exceptions können wir Ihnen an einem kleinen Beispiel klarmachen. Nehmen

Mehr

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse Übung 03: Schleifen Abgabetermin: xx.xx.xxxx Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch Aufgabe 03.1 12

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung Annabelle Klarl Zentralübung zur Vorlesung Einführung in die Informatik: http://www.pst.ifi.lmu.de/lehre/wise-13-14/infoeinf WS13/14 Action required now 1. Smartphone: installiere die App "socrative student"

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 22 Kapitel 19 Vererbung, UML Seite 1 von 22 Vererbung - Neben der Datenabstraktion und der Datenkapselung ist die Vererbung ein weiteres Merkmal der OOP. - Durch Vererbung werden die Methoden und die Eigenschaften

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Anmeldung zur Klausur! Übungsblatt Nr. 6 Um an der Klausur teilzunehmen, müssen sich Studierende der angewandten Informatik in

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Aufgabe 3: Konto Um Geldbeträge korrekt zu verwalten, sind zwecks Vermeidung von Rundungsfehlern entweder alle Beträge in Cents umzuwandeln und

Mehr

Studentische Lösung zum Übungsblatt Nr. 7

Studentische Lösung zum Übungsblatt Nr. 7 Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Sichtbarkeit & statische Methoden Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben Nicht sichtbare Methoden Wollen Eltern bestimmte Methoden vor den

Mehr

II.4.4 Exceptions - 1 -

II.4.4 Exceptions - 1 - n 1. Unterklassen und Vererbung n 2. Abstrakte Klassen und Interfaces n 3. Modularität und Pakete n 4. Ausnahmen (Exceptions) n 5. Generische Datentypen n 6. Collections II.4.4 Exceptions - 1 - Ausnahmen

Mehr

Übung: Verwendung von Java-Threads

Übung: Verwendung von Java-Threads Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum

Mehr

Java Einführung Programmcode

Java Einführung Programmcode Java Einführung Programmcode Inhalt dieser Einheit Programmelemente Der erste Programmcode Die Entwicklungsumgebung: Sun's Java Software Development Kit (SDK) Vom Code zum Ausführen des Programms 2 Wiederholung:

Mehr

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand, Marcel Preuß, Iman Kamehkhosh, Marc Bury, Diana Howey Übungsblatt

Mehr

Innere Klassen in Java

Innere Klassen in Java Innere Klassen in Java SS 2012 Prof. Dr. Margarita Esponda Innere Klassen Klassen- oder Interfacedefinitionen können zur besseren Strukturierung von Programmen verschachtelt werden Eine "Inner Class" wird

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E

Mehr

Computeranwendung und Programmierung (CuP)

Computeranwendung und Programmierung (CuP) Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag

Mehr

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder Hinweise zur Übung Benötigter Vorlesungsstoff Ab diesem Übungskomplex wird die Kenntnis und praktische Beherrschung der Konzepte

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Konstruktor, Statische Methoden Packages Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Initialisierung von Datenstrukturen

Mehr

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Fakultät für Informatik Lehrstuhl 1 Dr. Lars Hildebrand Carla Delgado-Battenfeld Fatih Gedikli Tobias Marschall Benjamin Schowe

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Übungen zu C++ Kapitel 1

Übungen zu C++ Kapitel 1 Übungen zu C++ Kapitel 1 Aufgabe 1 Ergänze den Text. a) Die sechs logischen Einheiten eines Computers sind Eingabe-Einheit, Ausgabe-Einheit, RAM, ALU, CPU, Plattenspeicher. b) Die Programme, welche Hochsprachenprogramme

Mehr

Liste Programmieren Java Überblick

Liste Programmieren Java Überblick Liste Programmieren Java Überblick 1 Was ist Java? 2 Klassen und Objekte 3 Vererbung 4 Schnittstellen 5 Innere Klassen 6 Exceptions 8 Datenstrukturen und Algorithmen 9 Ein-/Ausgabe 10 Threads 11 GUI-Programmierung

Mehr

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API). Paketdeklaration Paketdeklaration package Bezeichner ; Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API). Ein

Mehr

Einführung in Javadoc

Einführung in Javadoc Einführung in Javadoc Johannes Rinn http://java.sun.com/j2se/javadoc Was ist Javadoc? Javadoc ist ein Werkzeug, dass eine standardisierte Dokumentation für die Programmiersprache Java unterstützt. Vorteil:

Mehr

Primitive Datentypen

Primitive Datentypen Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.

Mehr

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Java Einführung VARIABLEN und DATENTYPEN Kapitel 2 Inhalt dieser Einheit Variablen (Sinn und Aufgabe) Bezeichner Datentypen, Deklaration und Operationen Typenumwandlung (implizit/explizit) 2 Variablen

Mehr

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;

Mehr

Vorlesung Informatik II

Vorlesung Informatik II 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

Mehr

Java Virtual Machine (JVM) Bytecode

Java Virtual Machine (JVM) Bytecode Java Virtual Machine (JVM) durch Java-Interpreter (java) realisiert abstrakte Maschine = Softwareschicht zwischen Anwendung und Betriebssystem verantwortlich für Laden von Klassen, Ausführen des Bytecodes,

Mehr

Vererbung & Schnittstellen in C#

Vererbung & Schnittstellen in C# Vererbung & Schnittstellen in C# Inhaltsübersicht - Vorüberlegung - Vererbung - Schnittstellenklassen - Zusammenfassung 1 Vorüberlegung Wozu benötigt man Vererbung überhaubt? 1.Um Zeit zu sparen! Verwendung

Mehr

Einführung in die Programmierung mit Java

Einführung in die Programmierung mit Java Einführung in die Programmierung mit Java Teil 9: Ausnahmebehandlung Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München 8. Dezember

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7 Java 7 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Dezember 2011 JAV7 5 Java 7 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: 5. Abstrakte Klassen Beispiel 5. Abstrakte Klassen 5. Abstrakte Klassen Beispiel Beispiel (3) Angenommen, wir wollen die folgende Klassenhierarchie implementieren: Probleme des Implementierungsvorschlags:

Mehr

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen. Datenbank-Verschlüsselung mit DbDefence und Webanwendungen. In diesem Artikel werden wir Ihnen zeigen, wie Sie eine Datenbank verschlüsseln können, um den Zugriff einzuschränken, aber trotzdem noch eine

Mehr

Ausnahmebehandlung. Ausnahmen werfen (auslösen) Eigene Ausnahmen definieren. Ausnahmen abfangen. Ausnahmen definieren

Ausnahmebehandlung. Ausnahmen werfen (auslösen) Eigene Ausnahmen definieren. Ausnahmen abfangen. Ausnahmen definieren Ausnahmebehandlung Ausnahmen werfen (auslösen) Eigene Ausnahmen definieren Ausnahmen abfangen Ausnahmen definieren Sinnvolle Verwendung von Ausnahmen Informatik II: Objektorientierte SW-Entwicklung, Algorithmik,

Mehr

Excel Funktionen durch eigene Funktionen erweitern.

Excel Funktionen durch eigene Funktionen erweitern. Excel Funktionen durch eigene Funktionen erweitern. Excel bietet eine große Anzahl an Funktionen für viele Anwendungsbereiche an. Doch es kommt hin und wieder vor, dass man die eine oder andere Funktion

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Text- und Excel-Dateien in GeoMedia

Text- und Excel-Dateien in GeoMedia Text- und Excel-Dateien in GeoMedia Tipps & Tricks Juli 2012 2012 Intergraph SG&I Deutschland GmbH. Alle Rechte vorbehalten. Der Inhalt dieses Dokuments ist urheberrechtlich und ggf. durch internationale

Mehr

Bedienung von BlueJ. Klassenanzeige

Bedienung von BlueJ. Klassenanzeige Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument

Mehr

Methoden und Wrapperklassen

Methoden und Wrapperklassen Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)

Mehr

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Klausur zur Einführung in die objektorientierte Programmierung mit Java Klausur zur Einführung in die objektorientierte Programmierung mit Java im Studiengang Informationswissenschaft Prof. Dr. Christian Wolff Professur für Medieninformatik Institut für Medien-, Informations-

Mehr

Zahlensysteme: Oktal- und Hexadezimalsystem

Zahlensysteme: Oktal- und Hexadezimalsystem 20 Brückenkurs Die gebräuchlichste Bitfolge umfasst 8 Bits, sie deckt also 2 8 =256 Möglichkeiten ab, und wird ein Byte genannt. Zwei Bytes, also 16 Bits, bilden ein Wort, und 4 Bytes, also 32 Bits, formen

Mehr

9. Ausnahmebehandlung

9. Ausnahmebehandlung Schwerpunkte Ausnahmen und Laufzeitfehler 9. Ausnahmebehandlung Java-Beispiele: Ausnahme.java TryCatch.java TryCatchAll.java Finally.java TryInTry.java KeyboardTry.java Oeffnungszeit.java Stack-Trace Java-Ausnahmeklassen-Hierarchie

Mehr

Große Übung Praktische Informatik 1

Große Übung Praktische Informatik 1 Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,

Mehr

Software Engineering Interaktionsdiagramme

Software Engineering Interaktionsdiagramme Software Engineering Interaktionsdiagramme Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Nachrichtenaustausch Welche Nachrichten werden ausgetauscht? (Methodenaufrufe)

Mehr

OP-LOG www.op-log.de

OP-LOG www.op-log.de Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server

Mehr

Einführung in Eclipse und Java

Einführung in Eclipse und Java Universität Bayreuth Lehrstuhl für Angewandte Informatik IV Datenbanken und Informationssysteme Prof. Dr.-Ing. Jablonski Einführung in Eclipse und Java Dipl.Inf. Manuel Götz Lehrstuhl für Angewandte Informatik

Mehr

Abschnitt 12: Strukturierung von Java-Programmen: Packages

Abschnitt 12: Strukturierung von Java-Programmen: Packages Abschnitt 12: Strukturierung von Java-Programmen: Packages 12. Strukturierung von Java-Programmen: Packages 12.1 Strukturierung durch Packages 12.2 Zugriffsspezifikationen 12.3 Zusammenfassung 12 Strukturierung

Mehr

Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient.

Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient. Strings Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient. Beispiel: String zeile = "Cusanus-Gymnasium Wittlich";

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests. Universität Osnabrück 1 Problemstellung 3 - Objektorientierte Programmierung in Java Vorlesung 24: Reflection 1 SS 2006 Prof. Dr. Frank M. Thiesing, FH Osnabrück Um ein Objekt anzulegen, eine seiner Methoden

Mehr