<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kriber</id>
	<title>FreitagsrundenWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kriber"/>
	<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//Spezial:Beitr%C3%A4ge/Kriber"/>
	<updated>2026-10-29T08:11:25Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.6</generator>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Uebungsaufgaben&amp;diff=7208</id>
		<title>Javakurs2006/Uebungsaufgaben</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Uebungsaufgaben&amp;diff=7208"/>
		<updated>2006-04-05T16:09:06Z</updated>

		<summary type="html">&lt;p&gt;Kriber: /* Selbst einige Methoden schreiben! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Variablen =&lt;br /&gt;
* Das gleiche Thema im Buch [http://www.galileocomputing.de/openbook/javainsel5/javainsel02_002.htm#Rxx747java02002040000A91F032100 Java ist auch eine Insel]&lt;br /&gt;
== Variablendeklaration und Initialisierung ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Beispiel {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		int aWholeNumber;&lt;br /&gt;
		double notAWholeNumber;&lt;br /&gt;
		String aString;&lt;br /&gt;
&lt;br /&gt;
		aWholeNumber = 0;&lt;br /&gt;
		notAWholeNumber = 0.0;&lt;br /&gt;
		aString = &amp;quot;&amp;quot;;&lt;br /&gt;
		System.out.println(aWholeNumber);&lt;br /&gt;
		System.out.println(notAWholeNumber);&lt;br /&gt;
		System.out.println(aString);&lt;br /&gt;
&lt;br /&gt;
		int anotherWholeNumber = 0;&lt;br /&gt;
		double anotherNotSoWholeNumber = 0;&lt;br /&gt;
		String anotherString = &amp;quot;&amp;quot;;&lt;br /&gt;
		System.out.println(anotherWholeNumber);&lt;br /&gt;
		System.out.println(anotherNotSoWholeNumber);&lt;br /&gt;
		System.out.println(anotherString);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* An welcher Stelle im Programm wird die Variable &#039;&#039;aWholeNumber&#039;&#039; definiert?&lt;br /&gt;
* An welcher Stelle im Programm wird die Variable &#039;&#039;aWholeNumber&#039;&#039; initialisiert?&lt;br /&gt;
Beantworte diese Fragen auch für die Variablen: &#039;&#039;notAWholeNumber&#039;&#039;, &#039;&#039;aString&#039;&#039;, &#039;&#039;anotherWholeNumber&#039;&#039;, &#039;&#039;anotherNotSoWholeNumber&#039;&#039;, &#039;&#039;anotherString&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Erkläre deine Meinung einem Tutor.&lt;br /&gt;
&lt;br /&gt;
== Selber Deklarationen und Definitionen durchführen ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Beispiel {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		// deklariere eine Variable &amp;quot;birnen&amp;quot;  vom Typ int&lt;br /&gt;
		&lt;br /&gt;
		// weise ihr den Wert drei zu&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;3 erwartet: &amp;quot; + birnen);&lt;br /&gt;
		// addiere fünf zu dem Wert&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;8 erwartet: &amp;quot; + birnen);&lt;br /&gt;
		// deklariere eine Variable &amp;quot;aepfel&amp;quot; und weise ihr den Wert fünf zu&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;5 erwartet: &amp;quot; + aepfel);&lt;br /&gt;
		// subtrahiere zwei von dem Wert&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;3 erwartet: &amp;quot; + aepfel);&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zuweisung an Variablen ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Beispiel {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		System.out.println(0);&lt;br /&gt;
		int zero = 0;&lt;br /&gt;
		System.out.println(zero);&lt;br /&gt;
		int one = 1;&lt;br /&gt;
		int whatsThis = zero;&lt;br /&gt;
		System.out.println(whatsThis);&lt;br /&gt;
		whatsThis = one;&lt;br /&gt;
		System.out.println(whatsThis);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Überlege dir, was dieses Code-Fragment ausgeben würde.&lt;br /&gt;
Führe es aus und vergleiche die Resultate: Kopiere hierfür den Beispiel-Code in eine Datei, kompiliere sie und führe sie aus.&lt;br /&gt;
* Was sind die Unterschiede?&lt;br /&gt;
* Warum?&lt;br /&gt;
Erkläre einem Tutor, zu welchem Schluss du gekommen bist und frage ihn, ob du Recht hast.&lt;br /&gt;
&lt;br /&gt;
== Variablen ändern ihre Werte ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Test {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		int number = 1;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 1;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 2;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 3;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 1;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 17;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Überlege dir, was dieser Code ausgeben würde.&lt;br /&gt;
Schreibe ihn in eine Datei, kompiliere ihn und führe ihn aus.&lt;br /&gt;
* Was gibt er tatsächlich aus?&lt;br /&gt;
* Gibt es Unterschiede?&lt;br /&gt;
&lt;br /&gt;
== Formatierung und Namen ==&lt;br /&gt;
Wieso haben wir die Code-Beispiele nach den geschweiften Klammern eingerückt und die Variablen so benannt, wie wir es taten und nicht so:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class _{static long _&lt;br /&gt;
(long __,long  ___) {&lt;br /&gt;
return __==0 ?___+ 1:&lt;br /&gt;
___==0?_(__-1,1):_(__&lt;br /&gt;
-1,_(__, ___-1)) ;  }&lt;br /&gt;
static  {int _=2 ,___&lt;br /&gt;
= 2;System.out.print(&lt;br /&gt;
&amp;quot;a(&amp;quot;+_+’,’+___+ &amp;quot;)=&amp;quot;+&lt;br /&gt;
_ (_,  ___) ) ;System&lt;br /&gt;
.exit(1);}}//(C) Ulli&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nenne mindestens einen Grund und erkläre ihn deinem Tutor.&lt;br /&gt;
&lt;br /&gt;
Etwas weniger Extrem, wieso haben wir unser zweites Beispiel nicht so gestellt?&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Beispiel {public static void main&lt;br /&gt;
	(String [] ignored) {&lt;br /&gt;
	System.out.println(0); int zero = 0;&lt;br /&gt;
			System.out.println(zero);&lt;br /&gt;
		int one = 1;&lt;br /&gt;
		int whatsThis = zero;&lt;br /&gt;
			System.out.&lt;br /&gt;
		println(whatsThis);&lt;br /&gt;
	whatsThis = one;		System.out.println(whatsThis)&lt;br /&gt;
;}}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nenne mindestens einen Grund und erkläre ihn deinem Tutor.&lt;br /&gt;
&lt;br /&gt;
Wieso haben wir unser zweites Beispiel nicht so gestellt?&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class b {&lt;br /&gt;
	public static void main(String [] i) {&lt;br /&gt;
		System.out.println(0);&lt;br /&gt;
		int a = 0;&lt;br /&gt;
		System.out.println(a);&lt;br /&gt;
		int b = 1;&lt;br /&gt;
		int c = a;&lt;br /&gt;
		System.out.println(c);&lt;br /&gt;
		c = b;&lt;br /&gt;
		System.out.println(c);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nenne mindestens einen Grund und erkläre ihn deinem Tutor.&lt;br /&gt;
&lt;br /&gt;
== Variablen mit verschiedenen Typen zuweisen ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Test {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= if =&lt;br /&gt;
== Einfache if-Bedingung ==&lt;br /&gt;
Überlege dir, was das folgende Code-Fragment macht.&lt;br /&gt;
Führe es aus und vergleiche mit deinen Erwartungen. &lt;br /&gt;
&lt;br /&gt;
(Kopiere den Beispiel-Code in eine Datei, kompiliere sie und führe sie aus)&lt;br /&gt;
* Was sind die Unterschiede?&lt;br /&gt;
* Warum?&lt;br /&gt;
Erkläre einem Tutor, zu welchem Schluss du gekommen bist und frage ihn, ob du Recht hast.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class If_Uebung1 {&lt;br /&gt;
    /* Eure Aufgabe:&lt;br /&gt;
     * Versucht nachzuvollziehen, was dieses Programm macht &lt;br /&gt;
     * und schaut Euch den Code an.&lt;br /&gt;
     */&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
        /* &lt;br /&gt;
         * Wir erzeugen uns hier eine Zufallszahl im&lt;br /&gt;
         * Bereich 1-6. Warum funktioniert das so?&lt;br /&gt;
         * Math.random ist eine statische Funktion im &lt;br /&gt;
         * Math-Paket, die uns eine double-Zahl kleiner&lt;br /&gt;
         * als 1.0, aber groesser oder gleich 0 liefert.&lt;br /&gt;
         * Mit 6 multipliziert und um Eins erhöht erhalten wir&lt;br /&gt;
         * Zahlen von 1.0 bis 6.99999...&lt;br /&gt;
         * Durch das Umwandeln in int werden die Nachkommastellen abgeschnitten&lt;br /&gt;
         * und wir erhalten ein int von 1 bis 6.&lt;br /&gt;
         */&lt;br /&gt;
        int wuerfelzahl = (int) (1 + (6 * Math.random()));&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Zur Kontrolle geben wir das Ergebnis aus &lt;br /&gt;
         */&lt;br /&gt;
        System.out.println(&amp;quot;Der Würfel hat &amp;quot; + wuerfelzahl + &amp;quot; ergeben.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Ist das Ergebnis groesser als 3 ?&lt;br /&gt;
         */&lt;br /&gt;
        if (wuerfelzahl &amp;gt; 3) {&lt;br /&gt;
            // Wenn ja gib diesen Text aus:&lt;br /&gt;
            System.out.println(&amp;quot;mehr als 3!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== if-else-Konstrukt ==&lt;br /&gt;
Überlege dir, was das folgende Code-Fragment macht.&lt;br /&gt;
Führe es aus und vergleiche mit deinen Erwartungen. &lt;br /&gt;
&lt;br /&gt;
(Kopiere den Beispiel-Code in eine Datei, kompiliere sie und führe sie aus)&lt;br /&gt;
* Was sind die Unterschiede?&lt;br /&gt;
* Warum?&lt;br /&gt;
Erkläre einem Tutor, zu welchem Schluss du gekommen bist und frage ihn, ob du Recht hast.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class If_Uebung2 {&lt;br /&gt;
&lt;br /&gt;
    public static void main (String[] args){&lt;br /&gt;
&lt;br /&gt;
        int x=10;&lt;br /&gt;
        if (x&amp;gt;5) {&lt;br /&gt;
             System.out.println(&amp;quot;x ist groesser als 5&amp;quot;); &lt;br /&gt;
        } else {&lt;br /&gt;
             System.out.println(&amp;quot;x ist kleiner/gleich 5&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mehrere if-Bedingungen ==&lt;br /&gt;
Überlege dir, was das folgende Code-Fragment macht.&lt;br /&gt;
Führe es aus und vergleiche mit deinen Erwartungen. &lt;br /&gt;
&lt;br /&gt;
(Kopiere den Beispiel-Code in eine Datei, kompiliere sie und führe sie aus)&lt;br /&gt;
&lt;br /&gt;
Was macht das Programm für verschiedene Werte von &#039;&#039;wert&#039;&#039;?. &lt;br /&gt;
&lt;br /&gt;
Welche If-Abfragen sind unnötig, weil man die Ausgaben in else-Zweige von bereits vorhandenen schreiben könnte?&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class If_Uebung3 {    &lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        &lt;br /&gt;
        int wert;&lt;br /&gt;
        &lt;br /&gt;
        wert = 5;&lt;br /&gt;
        &lt;br /&gt;
        if (wert&amp;lt;5){&lt;br /&gt;
            System.out.println(&amp;quot;Der Wert ist echt kleiner 5.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if (wert&amp;gt;5){&lt;br /&gt;
            System.out.println(&amp;quot;Der Wert ist echt groesser 5.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if (wert==5){&lt;br /&gt;
            System.out.println(&amp;quot;Der Wert ist gleich 5&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if (wert&amp;gt;=5){&lt;br /&gt;
            System.out.println(&amp;quot;Der Wert ist groesser oder gleich 5&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if (wert&amp;lt;=5){&lt;br /&gt;
            System.out.println(&amp;quot;Der Wert ist kleiner oder gleich 5&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= while =&lt;br /&gt;
== Einfache Schleife ==&lt;br /&gt;
Schreibe eine Schleife die unendlich oft &amp;quot;Hallo Welt!&amp;quot; ausgibt.&lt;br /&gt;
&lt;br /&gt;
== Begrenzte Schleifen ==&lt;br /&gt;
* Schreibe eine for-Schleife, die 10 mal &amp;quot;Hallo Welt!!&amp;quot; ausgibt.&lt;br /&gt;
* Verändere diese Schleife, so dass sie abwechselnd &amp;quot;Hallo Welt!&amp;quot; und &amp;quot;Ich bin im Javakurs!&amp;quot; ausgibt&lt;br /&gt;
** Es gibt zwei Möglichkeiten das zu realisieren - finde die andere.&lt;br /&gt;
&lt;br /&gt;
== einfache while-Schleife ==&lt;br /&gt;
Überlege dir, was das folgende Code-Fragment macht. Welche Zahlen werden ausgegeben?&lt;br /&gt;
Führe es aus und vergleiche mit deinen Erwartungen. &lt;br /&gt;
&lt;br /&gt;
(Kopiere den Beispiel-Code in eine Datei, kompiliere sie und führe sie aus)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class While_Uebung1 {&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
        int x=10;&lt;br /&gt;
        while (x&amp;gt;0){&lt;br /&gt;
            System.out.println(&amp;quot; x=&amp;quot; + x);  // Anhaengen von x an den String&lt;br /&gt;
            x=x-1;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= for =&lt;br /&gt;
== for-Schleifen zum Zählen ==&lt;br /&gt;
Überlege dir, was das folgende Code-Fragment macht. Welche Zahlen werden ausgegeben?&lt;br /&gt;
Führe es aus und vergleiche mit deinen Erwartungen. &lt;br /&gt;
&lt;br /&gt;
(Kopiere den Beispiel-Code in eine Datei, kompiliere sie und führe sie aus)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class For_Uebung1 {&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;erste for Schleife:&amp;quot;);&lt;br /&gt;
        for (int i = 1; i &amp;lt;= 10; i = i + 1) {&lt;br /&gt;
            System.out.print(&amp;quot; &amp;quot; + i);&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println(); // Zeilenumbruch&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;zweite for Schleife:&amp;quot;);&lt;br /&gt;
        for (int i = 1; i &amp;lt;= 10; i = i + 2) {&lt;br /&gt;
            System.out.print(&amp;quot; &amp;quot; + i);&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println(); // Zeilenumbruch&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;dritte for Schleife:&amp;quot;);&lt;br /&gt;
        for (int i = 1; i &amp;lt;= 10; i = i * 2) {&lt;br /&gt;
            System.out.print(&amp;quot; &amp;quot; + i);&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println(); // Zeilenumbruch&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== for-Schleife und if-Bedingung ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class ForIf_Uebung {&lt;br /&gt;
    &lt;br /&gt;
    // Welche Zahlen gibt dieses Programm aus ?&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        for (int i=1;i&amp;lt;10;i++){&lt;br /&gt;
            if ((i % 2)==0){ // % ist der Modulo-Operator &lt;br /&gt;
                System.out.println(&amp;quot;Die Zahl &amp;quot;+i+&amp;quot; ist gerade.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
== Argumente ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Beispiel {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		ausgabe(1, &amp;quot;Martin&amp;quot;);&lt;br /&gt;
		ausgabe(&amp;quot;Arthur&amp;quot;, 2);&lt;br /&gt;
		ausgabe(3, &amp;quot;Florian&amp;quot;);&lt;br /&gt;
		ausgabe(&amp;quot;Robert&amp;quot;, 4);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	static void ausgabe(int i, String string) {&lt;br /&gt;
		System.out.println(i + &amp;quot;: &amp;quot; + string);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Überlege was dieses Beispiel ausgibt.&lt;br /&gt;
* Probiere es aus und erkläre den Unterschied. (Wenn Fehler auftreten, erkläre wieso)&lt;br /&gt;
* Erkläre das einem Tutor&lt;br /&gt;
&lt;br /&gt;
== Was tut das? ==&lt;br /&gt;
Überlege dir, was das folgenden Code-Fragmente machen. Welche Zahlen werden ausgegeben?&lt;br /&gt;
Führe sie aus und vergleiche mit deinen Erwartungen. &lt;br /&gt;
&lt;br /&gt;
(Kopiere den Beispiel-Code in eine Datei, kompiliere sie und führe sie aus)&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
//file: Methoden1.java&lt;br /&gt;
class Methoden1 {&lt;br /&gt;
    public static void main (String[] arguments) {&lt;br /&gt;
        System.out.println( gibMirNeZahl() );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static double gibMirNeZahl() {&lt;br /&gt;
        return 15.3;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//file: Methoden2.java&lt;br /&gt;
class Methoden3 {&lt;br /&gt;
    public static void main (String[] arguments) {&lt;br /&gt;
        System.out.println( mathematik(1, 2) );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static boolean mathematik(int argument1, int argument2) {&lt;br /&gt;
        return (argument1 + 5) &amp;lt; (argument2 * 2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//file: Methoden3.java&lt;br /&gt;
class Methoden3 {&lt;br /&gt;
    public static void main (String[] arguments) {&lt;br /&gt;
        System.out.println( mathematik(1, 2) );&lt;br /&gt;
        System.out.println( mathematik(1, 5) );&lt;br /&gt;
        System.out.println( mathematik(3, 4) );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static boolean mathematik(int argument1, int argument2) {&lt;br /&gt;
        return (argument1 + 5) &amp;lt; (argument2 * 2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//file: Methoden4.java&lt;br /&gt;
class Methoden4 {&lt;br /&gt;
    public static void main (String[] arguments) {&lt;br /&gt;
        int eineZahl = 2;&lt;br /&gt;
        System.out.println( mathematik(4, eineZahl) );&lt;br /&gt;
        eineZahl = 5;&lt;br /&gt;
        System.out.println( mathematik(2, eineZahl) );&lt;br /&gt;
        System.out.println( mathematik(eineZahl, 4) );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static boolean mathematik(int argument1, int argument2) {&lt;br /&gt;
        return (argument1 + 5) &amp;lt; (argument2 * 2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selbst einige Methoden schreiben! ==&lt;br /&gt;
Im Folgenden wollen wir einige (mathematische)-Methoden programmieren.&lt;br /&gt;
&lt;br /&gt;
* Lege eine neue Klasse &amp;quot;MatheAufgabe&amp;quot; an.&lt;br /&gt;
* Füge eine &amp;lt;code&amp;gt;public static void main(Strings[] arguments)&amp;lt;/code&amp;gt; Methode hinzu.&lt;br /&gt;
* Deklariere innerhalb der &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;-Methode eine &amp;lt;code&amp;gt;double&amp;lt;/code&amp;gt;-Variable.&lt;br /&gt;
* Belege diese Variable dem Wert &amp;lt;code&amp;gt;5/3&amp;lt;/code&amp;gt; und gib den Inhalt der Variable auf dem Bildschirm aus.&lt;br /&gt;
* Schreibe nun eine Methode &amp;lt;code&amp;gt;public static double add(double x, double y)&amp;lt;/code&amp;gt;, die die Summe der beiden übergebenen Zahlen &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt; zurückgibt.&lt;br /&gt;
** Teste deine Methode mit verschiedenen Eingaben wie z.B.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
System.out.println(&amp;quot; 1.0 + 2.0 = &amp;quot; + add ( 1.0 , 2.0 ) );&lt;br /&gt;
double x = 5.0;&lt;br /&gt;
System.out.println( &amp;quot; &amp;quot; + x + &amp;quot; + 2.0 = &amp;quot; + add ( x , 2.0) );&lt;br /&gt;
System.out.println( &amp;quot; 2.0 + &amp;quot; + x + &amp;quot; = &amp;quot; + add ( 2.0 , x) );&lt;br /&gt;
x = add ( x , 2.0);&lt;br /&gt;
System.out.println( x);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Schreibe nun eine Methode &amp;lt;code&amp;gt;sub&amp;lt;/code&amp;gt;, welche die Differenz zweier übergebener Werte zurückgibt.&lt;br /&gt;
** Teste deine Methode wie eben!&lt;br /&gt;
** Überprüfe, ob x == (x - y ) + y gilt! (natürlich mit deinen &amp;lt;code&amp;gt;sub&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt;-Modthoden)&lt;br /&gt;
* Schreibe nun eine &amp;lt;code&amp;gt;mul&amp;lt;/code&amp;gt;-Methode.&lt;br /&gt;
** Benutze dazu nicht den operator *. Rufe statt dessen deine add-Methode auf.&lt;br /&gt;
** Teste deine Methode wie eben!&lt;br /&gt;
* Schreibe nun eine &amp;lt;code&amp;gt;public static double pow ( double basis, int exponent)&amp;lt;/code&amp;gt;, die &amp;lt;code&amp;gt;basis&amp;lt;/code&amp;gt; hoch &amp;lt;code&amp;gt;exponent&amp;lt;/code&amp;gt; zurückgibt. &amp;lt;code&amp;gt;pow(2,3)&amp;lt;/code&amp;gt; wurde z.B. 2^3=8 zurückgeben.&lt;br /&gt;
** Benutze auch hier weder *, noch Math.pow(). Nutze statt dessen deine gerade geschriebene mul-Methode.&lt;br /&gt;
** Teste deine Methode wie gehabt!&lt;br /&gt;
**: Was liefert deine Methode wenn der Exponent 0 ist?&lt;br /&gt;
**: Was liefert deine Methode wenn der Exponent negativ ist?&lt;br /&gt;
&lt;br /&gt;
= Arrays (eindimensional und n-dimensional) =&lt;br /&gt;
== Eindimensionale Arrays ==&lt;br /&gt;
Folgendes Array-Konstrukt wird initialisiert&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
int[] meinArray1 = new int[5];&lt;br /&gt;
meinArray1[0] = 0;&lt;br /&gt;
meinArray1[1] = 1;&lt;br /&gt;
meinArray1[2] = 2;&lt;br /&gt;
meinArray1[3] = 3;&lt;br /&gt;
meinArray1[4] = 4;&lt;br /&gt;
&lt;br /&gt;
int[] meinArray2 = new int[3];&lt;br /&gt;
meinArray2[0] = 0;&lt;br /&gt;
meinArray2[1] = 1;&lt;br /&gt;
meinArray2[2] = 2;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Was geben die folgenden &amp;quot;system.out.println&amp;quot; jeweils aus?&lt;br /&gt;
Vergleiche die Ausgabe mit Deinem Ergebnis.&lt;br /&gt;
&lt;br /&gt;
1.1.&lt;br /&gt;
 System.out.println(meinArray1.length);&lt;br /&gt;
&lt;br /&gt;
1.2.&lt;br /&gt;
 System.out.println(meinArray2.length);&lt;br /&gt;
&lt;br /&gt;
1.3.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray1[1]);&lt;br /&gt;
&lt;br /&gt;
1.4.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray2[1]);&lt;br /&gt;
&lt;br /&gt;
1.5.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray1[4]);&lt;br /&gt;
&lt;br /&gt;
1.6.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray2[4]);&lt;br /&gt;
&lt;br /&gt;
1.7.&lt;br /&gt;
 System.out.println(meinArray1.length-1);&lt;br /&gt;
&lt;br /&gt;
1.8.&lt;br /&gt;
 System.out.println(meinArray2.length-1);&lt;br /&gt;
&lt;br /&gt;
1.9.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray1[0]);&lt;br /&gt;
&lt;br /&gt;
1.10.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray2[0]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zweidimensionale Arrays ==&lt;br /&gt;
Folgendes Array-Konstrukt wird initialisiert&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
int[][] meinArray3 = new int[2][3];&lt;br /&gt;
meinArray3[0][0] = 1;&lt;br /&gt;
meinArray3[1][1] = 2;&lt;br /&gt;
meinArray3[0][2] = 1;&lt;br /&gt;
meinArray3[1][0] = 2;&lt;br /&gt;
meinArray3[0][1] = 1;&lt;br /&gt;
meinArray3[1][2] = 2;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was geben die folgenden &amp;quot;system.out.println&amp;quot; jeweils aus?&lt;br /&gt;
Vergleiche die Ausgabe mit Deinem Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Tipp: Aus der Mathematik kennst Du Matrizen. Ihre Größe wird mit (n x m) angegeben. &lt;br /&gt;
&lt;br /&gt;
 System.out.println(meinArray3[0][0]+meinArray3[0][1]+meinArray3[0][2]);&lt;br /&gt;
 System.out.println(meinArray3[1][0]+meinArray3[1][1]+meinArray3[1][2]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dreidimensionale Arrays ==&lt;br /&gt;
Folgendes Array-Konstrukt wird initialisiert&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
int[][][] meinArray3D = new int[2][2][2];&lt;br /&gt;
meinArray3D[0][0][0] = 1;&lt;br /&gt;
meinArray3D[0][1][1] = 2;&lt;br /&gt;
meinArray3D[0][1][0] = 2;&lt;br /&gt;
meinArray3D[0][0][1] = 1;&lt;br /&gt;
&lt;br /&gt;
meinArray3D[1][0][0] = 3;&lt;br /&gt;
meinArray3D[1][1][1] = 4;&lt;br /&gt;
meinArray3D[1][1][0] = 4;&lt;br /&gt;
meinArray3D[1][0][1] = 3;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Was geben die folgenden &amp;quot;system.out.println&amp;quot; jeweils aus?&lt;br /&gt;
Vergleiche die Ausgabe mit Deinem Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Tipp: Aus der Mathematik kennst Du mehrdimensionale Obejekte. &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
System.out.println(meinArray3D[0][0][0]+meinArray3D[0][0][1]);&lt;br /&gt;
System.out.println(meinArray3D[0][1][0]+meinArray3D[0][1][1]);&lt;br /&gt;
System.out.println(meinArray3D[1][0][0]+meinArray3D[1][0][1]);&lt;br /&gt;
System.out.println(meinArray3D[1][1][0]+meinArray3D[1][1][1]);&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Klassen =&lt;br /&gt;
(todo)&lt;/div&gt;</summary>
		<author><name>Kriber</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_3&amp;diff=7067</id>
		<title>Javakurs2006/Tag 3</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_3&amp;diff=7067"/>
		<updated>2006-04-05T13:54:41Z</updated>

		<summary type="html">&lt;p&gt;Kriber: /* Weiterführende Aufgaben */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Javakurs2006| &amp;lt;- Zurück zur Übersicht]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ab heute verändert sich der Tagesplan - wir veranstalten jetzt Vor- und Nachmittags Übungen.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Übungsaufgaben ==&lt;br /&gt;
&lt;br /&gt;
=== Aufgaben zur Festigung ===&lt;br /&gt;
&lt;br /&gt;
* Stellt ersteinmal in aller Ruhe Übungsblatt 3 fertig.&lt;br /&gt;
* Wir haben ein [[Javakurs2006/Uebungsaufgaben| größeres Angebot an Beispiel-Aufgaben]] um bestimmte Themengebiete noch einmal zu wiederholen.&lt;br /&gt;
* Zur Wiederholung der Objektorientierten Programmierung gibt es hier eine [[Javakurs2006/Rennschnecke| Rennschneckenaufgabe]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Weiterführende Aufgaben ===&lt;br /&gt;
&lt;br /&gt;
* [[Javakurs2006/Tag 2/Vorlesung 3/Aufgaben| Aufgaben zur API-Benutzung]] &lt;br /&gt;
*:(Dazu nochmal ein Link zur entsprechenden Vorlesung: [http://docs.freitagsrunde.org/javakurs/vortrag%20le4_23.pdf Vortragsfolien], [[Javakurs2006/Tag 2/Vorlesung 2| Vorlesung zum Nachlesen]])&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
* [http://docs.freitagsrunde.org/javakurs/AufgabenTDDv2.pdf Fortgeschrittene Aufgaben] für alle die im Stoff schon sehr sattelfest sind und sich für Test-Driven-Development interessieren. Dafür braucht ihr noch die [http://docs.freitagsrunde.org/javakurs/junit.jar Datei junit.jar].&lt;br /&gt;
&lt;br /&gt;
== Hilfe zu Java == &lt;br /&gt;
&lt;br /&gt;
* Eine [[Javakurs2006/Java_Kurzreferenz| Kurzreferenz für Java ]] ist seit gestern Online.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Javakurs2006| &amp;lt;- Zurück zur Übersicht]]&lt;/div&gt;</summary>
		<author><name>Kriber</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Uebungsaufgaben&amp;diff=7142</id>
		<title>Javakurs2006/Uebungsaufgaben</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Uebungsaufgaben&amp;diff=7142"/>
		<updated>2006-04-04T18:34:29Z</updated>

		<summary type="html">&lt;p&gt;Kriber: /* Variablen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Variablen =&lt;br /&gt;
== Variablendeklaration und Initialisierung ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Beispiel {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		int aWholeNumber;&lt;br /&gt;
		double notAWholeNumber;&lt;br /&gt;
		String aString;&lt;br /&gt;
&lt;br /&gt;
		aWholeNumber = 0;&lt;br /&gt;
		notAWholeNumber = 0.0;&lt;br /&gt;
		aString = &amp;quot;&amp;quot;;&lt;br /&gt;
		System.out.println(aWholeNumber);&lt;br /&gt;
		System.out.println(notAWholeNumber);&lt;br /&gt;
		System.out.println(aString);&lt;br /&gt;
&lt;br /&gt;
		int anotherWholeNumber = 0;&lt;br /&gt;
		double anotherNotSoWholeNumber = 0;&lt;br /&gt;
		String anotherString = &amp;quot;&amp;quot;;&lt;br /&gt;
		System.out.println(anotherWholeNumber);&lt;br /&gt;
		System.out.println(anotherNotSoWholeNumber);&lt;br /&gt;
		System.out.println(anotherString);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* An welcher Stelle im Programm wird die Variable &#039;&#039;aWholeNumber&#039;&#039; definiert?&lt;br /&gt;
* An welcher Stelle im Programm wird die Variable &#039;&#039;aWholeNumber&#039;&#039; initialisiert?&lt;br /&gt;
Beantworte diese Fragen auch für die Variablen: &#039;&#039;notAWholeNumber&#039;&#039;, &#039;&#039;aString&#039;&#039;, &#039;&#039;anotherWholeNumber&#039;&#039;, &#039;&#039;anotherNotSoWholeNumber&#039;&#039;, &#039;&#039;anotherString&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Erkläre deine Meinung einem Tutor.&lt;br /&gt;
&lt;br /&gt;
== Selber Deklarationen und Definitionen durchführen ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Beispiel {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		// deklariere eine Variable &amp;quot;birnen&amp;quot;  vom Typ int&lt;br /&gt;
		&lt;br /&gt;
		// weise ihr den Wert drei zu&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;3 erwartet: &amp;quot; + birnen);&lt;br /&gt;
		// addiere fünf zu dem Wert&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;7 erwartet: &amp;quot; + birnen);&lt;br /&gt;
		// deklariere eine Variable &amp;quot;aepfel&amp;quot; und weise ihr den Wert fünf zu&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;5 erwartet: &amp;quot; + aepfel);&lt;br /&gt;
		// subtrahiere zwei von dem Wert&lt;br /&gt;
&lt;br /&gt;
//		System.out.println(&amp;quot;3 erwartet: &amp;quot; + aepfel);&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zuweisung an Variablen ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Beispiel {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		System.out.println(0);&lt;br /&gt;
		int zero = 0;&lt;br /&gt;
		System.out.println(zero);&lt;br /&gt;
		int one = 1;&lt;br /&gt;
		int whatsThis = zero;&lt;br /&gt;
		System.out.println(whatsThis);&lt;br /&gt;
		whatsThis = one;&lt;br /&gt;
		System.out.println(whatsThis);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Überlege dir was dieses Code-Fragment ausgeben würde.&lt;br /&gt;
Führe es aus und vergleiche die Resultate. (Kopiere &lt;br /&gt;
* Was sind die Unterschiede?&lt;br /&gt;
* Warum?&lt;br /&gt;
Erkläre einem Tutor zu welchem Schluss du gekommen bist und frage ihn ob du Recht hast.&lt;br /&gt;
&lt;br /&gt;
== Variablen ändern ihre Werte ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Test {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		int number = 1;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 1;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 2;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 3;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 1;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
		number = 17;&lt;br /&gt;
		System.out.println(number);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Überlege dir  was dieser Code ausgeben würde.&lt;br /&gt;
Schreibe ihn in eine Datei, kompiliere ihn und führe ihn aus.&lt;br /&gt;
* Was gibt er tatsächlich aus?&lt;br /&gt;
* Gibt es unterschiede?&lt;br /&gt;
&lt;br /&gt;
== Formatierung ==&lt;br /&gt;
Wieso haben wir das Beispiel  nach den geschweiften Klammern eingerückt und die Variablen so gestellt wie wir es gestellt haben und nicht so:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class _{static long _&lt;br /&gt;
(long __,long  ___) {&lt;br /&gt;
return __==0 ?___+ 1:&lt;br /&gt;
___==0?_(__-1,1):_(__&lt;br /&gt;
-1,_(__, ___-1)) ;  }&lt;br /&gt;
static  {int _=2 ,___&lt;br /&gt;
= 2;System.out.print(&lt;br /&gt;
&amp;quot;a(&amp;quot;+_+’,’+___+ &amp;quot;)=&amp;quot;+&lt;br /&gt;
_ (_,  ___) ) ;System&lt;br /&gt;
.exit(1);}}//(C) Ulli&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nenne mindestens einen Grund und erkläre ihn deinem Tutor.&lt;br /&gt;
&lt;br /&gt;
Etwas weniger Extrem, wieso haben wir unser zweites Beispiel nicht so gestellt?&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Beispiel {public static void main&lt;br /&gt;
	(String [] ignored) {&lt;br /&gt;
	System.out.println(0); int zero = 0;&lt;br /&gt;
			System.out.println(zero);&lt;br /&gt;
		int one = 1;&lt;br /&gt;
		int whatsThis = zero;&lt;br /&gt;
			System.out.&lt;br /&gt;
		println(whatsThis);&lt;br /&gt;
	whatsThis = one;		System.out.println(whatsThis)&lt;br /&gt;
;}}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nenne mindestens einen Grund und erkläre ihn deinem Tutor.&lt;br /&gt;
&lt;br /&gt;
Wieso haben wir unser zweites Beispiel nicht so gestellt?&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class b {&lt;br /&gt;
	public static void main(String [] i) {&lt;br /&gt;
		System.out.println(0);&lt;br /&gt;
		int a = 0;&lt;br /&gt;
		System.out.println(a);&lt;br /&gt;
		int b = 1;&lt;br /&gt;
		int c = a;&lt;br /&gt;
		System.out.println(c);&lt;br /&gt;
		c = b;&lt;br /&gt;
		System.out.println(c);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Nenne mindestens einen Grund und erkläre ihn deinem Tutor.&lt;br /&gt;
&lt;br /&gt;
== Variablen mit verschiedenen Typen zuweisen ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Test {&lt;br /&gt;
	public static void main(String [] ignored) {&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== If ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class If_Uebung1 {&lt;br /&gt;
    /* Eure Aufgabe:&lt;br /&gt;
     * Versucht nachzuvollziehen, was dieses Programm macht &lt;br /&gt;
     * und schaut Euch den Code an.&lt;br /&gt;
     */&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
        /* &lt;br /&gt;
         * wir erzeugen uns hier eine Zufallszahl im&lt;br /&gt;
         * Bereich 1-6. Warum funktioniert das so?&lt;br /&gt;
         * Math.random ist eine statische Funktion im &lt;br /&gt;
         * Math-Paket, dass und eine double-Zahl, die kleiner&lt;br /&gt;
         * als 1.0 aber groesser oder gleich 0 ist.&lt;br /&gt;
         * Mit 6 multipliziert und um eins erhöht erhalten wir&lt;br /&gt;
         * Zahlen von 1.0 bis 6.99999...&lt;br /&gt;
         * Durch das Umwandeln in int werden die Nachkommastellen abgeschnitten&lt;br /&gt;
         * und wir erhalten ein int von 1 bis 6.&lt;br /&gt;
         */&lt;br /&gt;
        int wuerfelzahl = (int) (1 + (6 * Math.random()));&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Zur Kontrolle geben wir das Ergebnis aus &lt;br /&gt;
         */&lt;br /&gt;
        System.out.println(&amp;quot;Der Würfel hat &amp;quot; + wuerfelzahl + &amp;quot; ergeben.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        /*&lt;br /&gt;
         * Ist das Ergebnis groesser als 3 ?&lt;br /&gt;
         */&lt;br /&gt;
        if (wuerfelzahl &amp;gt; 3) {&lt;br /&gt;
            // Wenn ja gib diesen Text aus:&lt;br /&gt;
            System.out.println(&amp;quot;mehr als 3!&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class If_Uebung2 {&lt;br /&gt;
&lt;br /&gt;
    /*&lt;br /&gt;
     * Eure Aufgabe:&lt;br /&gt;
     * Schaut Euch das Programm an und überlegt, was fuer verschiedene&lt;br /&gt;
     * Werte passiert. &lt;br /&gt;
     * Welche If-Abfragen sind unnötig, weil man die Ausgaben in else-Zweige von &lt;br /&gt;
     * bereits vorhandenen schreiben könnte?&lt;br /&gt;
     */&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        &lt;br /&gt;
        int wert;&lt;br /&gt;
        &lt;br /&gt;
        wert = 5;&lt;br /&gt;
        &lt;br /&gt;
        if (wert&amp;lt;5){&lt;br /&gt;
            System.out.println(&amp;quot;Der Wert ist echt kleiner 5.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if (wert&amp;gt;5){&lt;br /&gt;
            System.out.println(&amp;quot;Der Wert ist echt groesser 5.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if (wert==5){&lt;br /&gt;
            System.out.println(&amp;quot;Der Wert ist gleich 5&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if (wert&amp;gt;=5){&lt;br /&gt;
            System.out.println(&amp;quot;Der Wert ist groesser oder gleich 5&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        if (wert&amp;lt;=5){&lt;br /&gt;
            System.out.println(&amp;quot;Der Wert ist kleiner oder gleich 5&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== For ==&lt;br /&gt;
&lt;br /&gt;
=== 1. ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class For_Uebung1 {&lt;br /&gt;
    /*&lt;br /&gt;
     * Eure Aufgabe:&lt;br /&gt;
     *  Schaut Euch dieses Programm an und überlegt, welche Zahlen&lt;br /&gt;
     *  es ausgeben wird. &lt;br /&gt;
     *  Anschliessend kompiliert das Programm, führt es aus und überprüft&lt;br /&gt;
     *  Eure Vermutungen.&lt;br /&gt;
     *  &lt;br /&gt;
     */&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;erste for Schleife:&amp;quot;);&lt;br /&gt;
        for (int i = 1; i &amp;lt;= 10; i = i + 1) {&lt;br /&gt;
            System.out.print(&amp;quot; &amp;quot; + i);&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println(); // Zeilenumbruch&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;zweite for Schleife:&amp;quot;);&lt;br /&gt;
        for (int i = 1; i &amp;lt;= 10; i = i + 2) {&lt;br /&gt;
            System.out.print(&amp;quot; &amp;quot; + i);&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println(); // Zeilenumbruch&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;dritte for Schleife:&amp;quot;);&lt;br /&gt;
        for (int i = 1; i &amp;lt;= 10; i = i * 2) {&lt;br /&gt;
            System.out.print(&amp;quot; &amp;quot; + i);&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println(); // Zeilenumbruch&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
public class ForIf_Uebung {&lt;br /&gt;
    &lt;br /&gt;
    // Welche Zahlen gibt dieses Programm aus ?&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        for (int i=1;i&amp;lt;10;i++){&lt;br /&gt;
            if ((i % 2)==0){ // % ist der Modulo-Operator &lt;br /&gt;
                System.out.println(&amp;quot;Die Zahl &amp;quot;+i+&amp;quot; ist gerade.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Methoden==&lt;br /&gt;
&lt;br /&gt;
===Was tut das?===&lt;br /&gt;
&lt;br /&gt;
//file: Methoden1.java&lt;br /&gt;
class Methoden1 {&lt;br /&gt;
    public static void main (String[] arguments) {&lt;br /&gt;
        System.out.println( gibMirNeZahl() );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static double gibMirNeZahl() {&lt;br /&gt;
        return 15.3;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//file: Methoden2.java&lt;br /&gt;
class Methoden3 {&lt;br /&gt;
    public static void main (String[] arguments) {&lt;br /&gt;
        System.out.println( mathematik(1, 2) );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static boolean mathematik(int argument1, int argument2) {&lt;br /&gt;
        return (argument1 + 5) &amp;lt; (argument2 * 2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//file: Methoden3.java&lt;br /&gt;
class Methoden3 {&lt;br /&gt;
    public static void main (String[] arguments) {&lt;br /&gt;
        System.out.println( mathematik(1, 2) );&lt;br /&gt;
        System.out.println( mathematik(1, 5) );&lt;br /&gt;
        System.out.println( mathematik(3, 4) );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static boolean mathematik(int argument1, int argument2) {&lt;br /&gt;
        return (argument1 + 5) &amp;lt; (argument2 * 2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//file: Methoden4.java&lt;br /&gt;
class Methoden4 {&lt;br /&gt;
    public static void main (String[] arguments) {&lt;br /&gt;
        int eineZahl = 2;&lt;br /&gt;
        System.out.println( mathematik(4, eineZahl) );&lt;br /&gt;
        eineZahl = 5;&lt;br /&gt;
        System.out.println( mathematik(2, eineZahl) );&lt;br /&gt;
        System.out.println( mathematik(eineZahl, 4) );&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static boolean mathematik(int argument1, int argument2) {&lt;br /&gt;
        return (argument1 + 5) &amp;lt; (argument2 * 2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
===Tue selbst etwas!===&lt;br /&gt;
&lt;br /&gt;
Die folgende Aufgabe ist eine Schritt-für-Schritt Anleitung. Sie soll euch die Möglickeit geben einmal genau angeleitet zu sehen, wie man an eine Aufgabe herangehen könnte.&lt;br /&gt;
&lt;br /&gt;
Zuerst stellen wir einen denkbaren Aufgabentext vor, der später ausreichen müsste um selbst ein Programm zu schreiben.&lt;br /&gt;
&lt;br /&gt;
Aufgabe: Erstelle ein Modul, das die mathematischen Operationen Addition, Subtraktion, und Potenzieren jeweils in einer Methode anbieten. Probiere deine Methoden in der main-Methode aus.&lt;br /&gt;
&lt;br /&gt;
//TODO: Schritt für Schritt Anleitung, wie, in welcher Reihenfolge und wo genau welche Methode implementiert werden soll. Voraussetzung: Verständnis von Schleifen. Rudimentäres Verständnis von Methoden.&lt;br /&gt;
&lt;br /&gt;
= Arrays (eindimensional und n-dimensional) =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.&lt;br /&gt;
Folgendes Array-Konstrukt wird initialisiert:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int[] meinArray1 = new int[5];&lt;br /&gt;
meinArray1[0] = 0;&lt;br /&gt;
meinArray1[1] = 1;&lt;br /&gt;
meinArray1[2] = 2;&lt;br /&gt;
meinArray1[3] = 3;&lt;br /&gt;
meinArray1[4] = 4;&lt;br /&gt;
&lt;br /&gt;
int[] meinArray2 = new int[3];&lt;br /&gt;
meinArray2[0] = 0;&lt;br /&gt;
meinArray2[1] = 1;&lt;br /&gt;
meinArray2[2] = 2;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Was geben die folgenden &amp;quot;system.out.println&amp;quot; jeweils aus?&lt;br /&gt;
Vergleiche die Ausgabe mit Deinem Ergebnis.&lt;br /&gt;
&lt;br /&gt;
1.1.&lt;br /&gt;
 System.out.println(meinArray1.length);&lt;br /&gt;
&lt;br /&gt;
1.2.&lt;br /&gt;
 System.out.println(meinArray2.length);&lt;br /&gt;
&lt;br /&gt;
1.3.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray1[1]);&lt;br /&gt;
&lt;br /&gt;
1.4.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray2[1]);&lt;br /&gt;
&lt;br /&gt;
1.5.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray1[4]);&lt;br /&gt;
&lt;br /&gt;
1.6.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray2[4]);&lt;br /&gt;
&lt;br /&gt;
1.7.&lt;br /&gt;
 System.out.println(meinArray1.length-1);&lt;br /&gt;
&lt;br /&gt;
1.8.&lt;br /&gt;
 System.out.println(meinArray2.length-1);&lt;br /&gt;
&lt;br /&gt;
1.9.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray1[0]);&lt;br /&gt;
&lt;br /&gt;
1.10.&lt;br /&gt;
 System.out.println(&amp;quot;Ergebnis:&amp;quot;+meinArray2[0]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
Folgendes Array-Konstrukt wird initialisiert:&lt;br /&gt;
&lt;br /&gt;
 int[][] meinArray3 = new int[2][3];&lt;br /&gt;
 meinArray3[0][0] = 1;&lt;br /&gt;
 meinArray3[1][1] = 2;&lt;br /&gt;
 meinArray3[0][2] = 1;&lt;br /&gt;
 meinArray3[1][0] = 2;&lt;br /&gt;
 meinArray3[0][1] = 1;&lt;br /&gt;
 meinArray3[1][2] = 2;&lt;br /&gt;
&lt;br /&gt;
Was geben die folgenden &amp;quot;system.out.println&amp;quot; jeweils aus?&lt;br /&gt;
Vergleiche die Ausgabe mit Deinem Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Tipp: Aus der Mathematik kennst Du Matrizen. Ihre Größe wird mit (n x m) angegeben. &lt;br /&gt;
&lt;br /&gt;
 System.out.println(meinArray3[0][0]+meinArray3[0][1]+meinArray3[0][2]);&lt;br /&gt;
 System.out.println(meinArray3[1][0]+meinArray3[1][1]+meinArray3[1][2]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
Folgendes Array-Konstrukt wird initialisiert:&lt;br /&gt;
&lt;br /&gt;
 int[][][] meinArray3D = new int[2][2][2];&lt;br /&gt;
 meinArray3D[0][0][0] = 1;&lt;br /&gt;
 meinArray3D[0][1][1] = 2;&lt;br /&gt;
 meinArray3D[0][1][0] = 2;&lt;br /&gt;
 meinArray3D[0][0][1] = 1;&lt;br /&gt;
&lt;br /&gt;
 meinArray3D[1][0][0] = 3;&lt;br /&gt;
 meinArray3D[1][1][1] = 4;&lt;br /&gt;
 meinArray3D[1][1][0] = 4;&lt;br /&gt;
 meinArray3D[1][0][1] = 3;&lt;br /&gt;
&lt;br /&gt;
Was geben die folgenden &amp;quot;system.out.println&amp;quot; jeweils aus?&lt;br /&gt;
Vergleiche die Ausgabe mit Deinem Ergebnis.&lt;br /&gt;
&lt;br /&gt;
Tipp: Aus der Mathematik kennst Du mehrdimensionale Obejekte. &lt;br /&gt;
&lt;br /&gt;
 System.out.println(meinArray3D[0][0][0]+meinArray3D[0][0][1]);&lt;br /&gt;
 System.out.println(meinArray3D[0][1][0]+meinArray3D[0][1][1]);&lt;br /&gt;
 System.out.println(meinArray3D[1][0][0]+meinArray3D[1][0][1]);&lt;br /&gt;
 System.out.println(meinArray3D[1][1][0]+meinArray3D[1][1][1]);&lt;/div&gt;</summary>
		<author><name>Kriber</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2/Vorlesung_2&amp;diff=7113</id>
		<title>Javakurs2006/Tag 2/Vorlesung 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2/Vorlesung_2&amp;diff=7113"/>
		<updated>2006-04-03T21:33:11Z</updated>

		<summary type="html">&lt;p&gt;Kriber: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Kleine Wiederholung==&lt;br /&gt;
&lt;br /&gt;
Klassen beinhalten zusammengehörige Daten und Methoden. Mit new erzeugt man Instanzen dieser Klassen. Jede Instanz kann eigene Werte der zugehörigen Daten enthalten. Ein Teil der im Quellcode dieses Textes enthaltenen Kommentare erklären Syntax und hätten in einem &amp;quot;echten&amp;quot; Programm nichts zu suchen.&lt;br /&gt;
&lt;br /&gt;
 //file: Apfel.java&lt;br /&gt;
 class Apfel {&lt;br /&gt;
     String farbe;&lt;br /&gt;
     int gewicht; //in Gramm&lt;br /&gt;
     &lt;br /&gt;
     Apfel (String farb, int gew) { //Konstuktor&lt;br /&gt;
         farbe = farb; //eigentlich this.farbe =farb, ist aber unnötig&lt;br /&gt;
         gewicht = gew;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void essen() { //eine Methode&lt;br /&gt;
         gewicht = 0;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //file: Beispiel.java&lt;br /&gt;
 public Beispiel {&lt;br /&gt;
     public static void main( String args[] ) {&lt;br /&gt;
         Apfel boskop1 = new Apfel(&amp;quot;rot&amp;quot;, 175);&lt;br /&gt;
         Apfel boskop2 = new Apfel(&amp;quot;grün&amp;quot;, 180);&lt;br /&gt;
         &lt;br /&gt;
         System.out.println(&amp;quot;boskop1 (&amp;quot; +&lt;br /&gt;
             boskop1.farbe + &amp;quot;): &amp;quot; + boskop1.gewicht + &amp;quot; gramm&amp;quot;);&lt;br /&gt;
         System.out.println(&amp;quot;boskop2 (&amp;quot; +&lt;br /&gt;
             boskop2.farbe + &amp;quot;): &amp;quot; + boskop2.gewicht + &amp;quot;gramm&amp;quot;);        &lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Vererbung==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In objektorientierten Programmiersprachen gibt es ein Konzept, dass sich Vererbung nennt. Eine Klasse erbt dann das Verhalten (also die Methoden) und auch die Daten von einer anderen Klasse. In Java benutzt man zum Vererben das Schlüsselwort extends.&lt;br /&gt;
&lt;br /&gt;
 //File: Obst.java&lt;br /&gt;
 class Obst {&lt;br /&gt;
 	String farbe;&lt;br /&gt;
 	int gewicht; //in Gramm&lt;br /&gt;
  	&lt;br /&gt;
 	void essen() {&lt;br /&gt;
 		gewicht = 0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: Apfel.java&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	 &lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Klasse Apfel im Beispiel hat alle Methoden und Daten von der Klasse Obst geerbt. Das heißt Instanzen dieser Klasse besitzen eine Farbe, ein Gewicht und man kann sie essen.&lt;br /&gt;
&lt;br /&gt;
Wer mehr über Objektorientierung und Vererbung erfahren möchte, kann entweder eins der unzähligen verfügbaren Bücher zu dem Thema zur Hand nehmen. Alternativ könnte man auch diesen link (http://java.sun.com/docs/books/tutorial/java/concepts/index.html) verfolgen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Die Klasse Object==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Java gibt es eine Klasse Object, von der jede andere Klasse abgeleitet ist. Wenn man kein extends hinschreibt, wird vom Compiler sozusagen das &amp;quot;extends Object&amp;quot; ergänzt. Dies geschieht intern, also ohne Veränderung in eurem Quellcode.&lt;br /&gt;
&lt;br /&gt;
Einige Methoden von Object sind für uns sehr nützlich, weshalb sie hier kurz vorgestellt werden sollen. Doch eins noch zum Wort Objekt: Die Bezeichnung Objekt wird oftmals sowohl für Klassen als auch für Instanzen von Klassen benutzt, deshalb immer schauen welche Bedeutung wohl gerade gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird hier Obje&amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt;t in der Bedeutung von Instanz benutzt und Obje&amp;lt;b&amp;gt;c&amp;lt;/b&amp;gt;t, wenn die besondere Klasse Object gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Nun aber zu den genannten nützlichen Mehtoden: Die Methode toString() liefert einen String, der die Instanz beschreibt. Doch woher soll die Methode (die ja in Object angelegt wurde) wissen, wie man unsere spezielle Instanz treffend in einem String beschreibt?&lt;br /&gt;
&lt;br /&gt;
Dazu kann man die Methode überschreiben. Man macht das, indem man sie einfach in der eigenen Klasse noch einmal definiert.&lt;br /&gt;
&lt;br /&gt;
 //File: Apfel.java&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	&lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 	 &lt;br /&gt;
 	String toString() {&lt;br /&gt;
 		String description = &amp;quot;Ein Apfel, geerntet  in &amp;quot; + geerntetIn;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ruft man nun auf einer Instanz von Apfel toString auf, so wird die in Apfel definierte Version benutzt. Die Methode toString() ist unter anderem deshalb so wichtig, weil sie von System.out.println() benutzt wird, um Instanzen beliebiger Nachfahren von Object auf der Konsole auszugeben. Die Methode printMe() aus der vorhergehenden Übung hatte die gleiche Funktion. Nur arbeitet  println() mit toString(), weshalb es sinnvoll wäre printMe() in toString() umzubenennen. &lt;br /&gt;
&lt;br /&gt;
Eine weitere wichtige Methode von Object ist equals(Object o). Hiermit kann, wie der Name schon sagt die Gleichheit zweier Objekte festgestellt werden. Nun wird sich vielleicht der ein oder andere fragen, warum man nicht den Vergleichsoperator == benutzt, sondern eine eigene Methode dafür schreibt. Warum das so ist, soll an einem Codebeispiel verdeutlicht werden.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String []args) {&lt;br /&gt;
 	Apfel apfel1 = new Apfel();&lt;br /&gt;
 	apfel1.farbe = &amp;quot;grün&amp;quot;;&lt;br /&gt;
 	apfel1.geerntetIn = &amp;quot;Berlin&amp;quot;;&lt;br /&gt;
 	apfel1.gewicht = 215;&lt;br /&gt;
  	&lt;br /&gt;
 	Apfel apfel2 = new Apfel();&lt;br /&gt;
 	apfel2.farbe = &amp;quot;grün&amp;quot;;&lt;br /&gt;
 	apfel2.geerntetIn = &amp;quot;Brandenburg&amp;quot;;&lt;br /&gt;
 	apfel2.gewicht = 215;&lt;br /&gt;
  	&lt;br /&gt;
 	Apfel apfel3 = apfel2;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Der Operator == gibt genau dann true zurück, wenn die Werte der beiden verglichenen Dinge identisch sind. Bei eingebauten Datentypen (int, double) verhält er sich wie erwartet. Der Wert eines Objektes hingegen ist die Identität des Objektes, und nicht sein Inhalt. Deshalb würde apfel1 == apfel2 false zurückgeben, weil es sich um zwei verschiedene Objekte handelt. Wir hätten aber gern eine Methode, die uns sagt, dass diese Äpfel insofern gleich sind, dass sie die gleichen Eigenschaften besitzen. Dabei ist zu beachten, dass wir für die Gleichheit zweier Äpfel hier nur das Gewicht und die Farbe heranziehen.Genau dies sollte equals realisieren.&lt;br /&gt;
&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	&lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	String toString() {&lt;br /&gt;
 		String description = &amp;quot;Ein Apfel, geerntet  in &amp;quot; + geerntetIn;&lt;br /&gt;
 	}&lt;br /&gt;
 	 &lt;br /&gt;
 	boolean equals(Object o) {&lt;br /&gt;
 		Apfel andererApfel = (Apfel)o;&lt;br /&gt;
 		return farbe.equals(andererApfel.farbe) &amp;amp;&amp;amp;&lt;br /&gt;
 			gewicht == andererApfel.gewicht;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Im Beispiel für equals gibt es gleich zwei Dinge, die einer weiteren Erklärung bedürfen: In der ersten Zeile machen wir aus der Intanz von Object, mit dem wir vergleichen einen Apfel. Diesen Vorgang nennt man casten.  Das Programm wird an dieser Stelle mit einer entsprechenden Fehlermeldung beendet, wenn der Parameter o kein Apfel ist. Das ist zwar nicht schön, macht aber trotzdem Sinn, da eine Gleichheit zwischen Äpfeln und beliebigen Objekten nicht zwangsläufig definiert ist. Dies ist zugegebenermaßen noch nicht ganz zufriedenstellend, da das Programm einfach beendet würde, wenn Apfel mit Autos zu vergleichen, obwohl man sicher sagen könnte, dass die beiden unterschiedlich sind. Wer hierzu noch etwas mehr lesen möchte, kann sich hier (http://www.galileocomputing.de/openbook/javainsel3/javainsel_030003.htm#Rxxjavainsel_030003281GleichheitvonObjektenunddieMethodeequals) vertiefen.&lt;br /&gt;
&lt;br /&gt;
Die zweite Sache, die auffällt: das Gewicht wird mit == verglichen, warum nicht auch mit equals? Die Antwort darauf ist eigentlich recht einfach: gewicht ist vom Typ int, der ein primitiver Datentyp ist. Damit erbt er nicht von Object, und bietet demnach auch keine Methode equals an. Wie oben schon erwähnt liefert == bei primitiven Datentypen ja auch das gewünschte Ergebnis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Comparable==&lt;br /&gt;
&lt;br /&gt;
Manchmal reicht es nicht aus, zu wissen zwei Objekte gleich sind. Oft wollen wir Objekte ordnen, wozu wir eine Funktion brauchen die uns mitteilt welches von zwei Objekten &amp;quot;größer&amp;quot; ist. Eine solche Funktion ist compareTo(Object o). Im Gegensatz zu equals und toString ist sie allerdings keine Methode von Object, da es Klassen gibt, deren Objekte man nicht ordnen kann. Ein Beispiel hierfür wären Farbtöne, für die es schwer fällt eine natürliche Ordnung zu finden. Nun könnten wir für unsere eigenen Klassen, wo das Ordnen Sinn macht einfach ein compareTo implementieren. Würden wir dies einfach so tun könnten wir allerdings nicht einen Algorithmus benutzen, den jemand anderes zum Ordnen seiner eigenen Klasse, die compareTo implementiert geschrieben hat:&lt;br /&gt;
&lt;br /&gt;
 //File: MyClass.java&lt;br /&gt;
 class MyClass {&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(MyClass o) {&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: SomeonesClass.java&lt;br /&gt;
 class SomeonesClass {&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(SomeonesClass o) {&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File Utility.java&lt;br /&gt;
 class Utility {&lt;br /&gt;
 	static sort(SomeonesClass daten[]) {&lt;br /&gt;
 		//sortiere daten mittels compareTo&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier kann man kein array vom Typ MyClass[] als parameter von sort übergeben, da es sich um zwei verschiedene Typen handelt. Um dieses Manko zu umgehen gibt es in Java Interfaces. Sie stellen eine Vereinbarung darüber dar, welche Methoden eine Klasse anbietet. Im Gegensatz zur Vererbung gibt es aber hier beim Interface noch keine Vorgabe, wie diese Methoden funktionieren. Das Interface schreibt nur die Namen, Art der Parameter und des Rückgabewertes von Methoden vor. Comparable ist ein solches Interface, dass schon in der Java API vorgegeben ist. Es schreibt vor, dass Klassen die dieses Interface implementieren die Methode int compareTo(Object o) anbieten müssen.&lt;br /&gt;
&lt;br /&gt;
Modifizieren wir also unser Beispiel so, dass wir das Interface Comparable nutzen.&lt;br /&gt;
	&lt;br /&gt;
 //File: MyClass.java&lt;br /&gt;
 class MyClass implements Comparable{&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(Object o) {&lt;br /&gt;
 		MyClass parameter = (MyClass)o;&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: SomeonesClass.java&lt;br /&gt;
 class SomeonesClass implements Comparable{&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(Object o) {&lt;br /&gt;
 		SomeonesClass parameter = (SomeonesClass)o;&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File Utility.java&lt;br /&gt;
 class Utility {&lt;br /&gt;
 	static sort(Comparable daten[]) {&lt;br /&gt;
 		//sortiere daten mittels compareTo&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Nun kann die Methode sort beliebige arrays übergeben bekommen, deren Inhalt das Interface comaparable implementiert. Darüber wird dieser Mehtode zugesichert, dass jedes Element dieses arrays über die Methode compareTo verfügt und somit sich mit anderen Elementen des arrays vergleichen lässt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Java API - Javas Klassenbibliothek==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein großer Vorteil von Java gegenüber anderen Programmiersprachen besteht darin, dass es eine Vielzahl vereinheitlichter und schon mitgelieferter Klassen und Interfaces gibt. Die Sammlung dieser Klassen und Interfaces nennt man Java API. Es gibt auf der Website von Sun(java.sun.com) eine sehr umfassende Dokumentation dieser API(http://java.sun.com/j2se/1.4.2/docs/api/), die allerdings nicht immer einfach zu bedienen ist. Wenn man weiß, nach welcher Klasse man sucht findet man meist recht schnell die gewünschten Informationen. Hat man aber nur eine vage Idee, was die Klasse tun soll muss man meist noch andere Quellen nutzen, um an den Namen der gesuchten Klasse heranzukommen. Hierzu bieten sich natürlich Suchmaschinen wie google an.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wollen wir einige besonders Häufig verwendete Module und Konzepte der Java API vorstellen. Wie man ein solches Modul in eigenen Programmen verwendet, werden wir im ersten vorgestellten Modul etwas näher beleuchten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Math===&lt;br /&gt;
&lt;br /&gt;
Das Modul Math bietet, wenig überraschend, alle möglichen Methoden und Konstanten die man für mathematische Berechnungen brauchen könnte. Einige Konstanten sind zum Beispiel &lt;br /&gt;
&lt;br /&gt;
 public static final double E;&lt;br /&gt;
 public static final double PI;&lt;br /&gt;
&lt;br /&gt;
Diese beiden Konstanten sind jeweils mit drei zusätzlichen Schlüsselwörtern gekennzeichnet, die hier zumindest grob erklärt werden sollen.&lt;br /&gt;
&lt;br /&gt;
public bedeutet, dass die entsprechende Variable oder Methode auch außerhalb der definierenden Klasse und außerhalb von Math benutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Von Daten, die satic definiert sind hat nicht jede Instanz eine eigene Ausprägung, sondern alle Instanzen der Klasse teilen sich diese Variable.&lt;br /&gt;
Mehtoden die static definiert sind, brauchen keine Instanz der Klasse um aufgerufen zu werden. Demnach kennen sie allerdings auch this nicht und können daher nicht auf Daten einer Instanz der Klasse arbeiten.&lt;br /&gt;
&lt;br /&gt;
Das Schlüsselwort final an einer Variable macht diese zur Konstante. Das heißt sie wird einmal bei der Deklaration festgelegt und kann dann nicht mehr verändert werden.&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Methoden, die Math bietet sollen hier nicht im Detail besprochen werden, da sie recht einfach in der API-Dokumentation von Java zu finden sind. Dennoch soll anhand des Sinus ein Aufruf einer Methode aus Math hier gezeigt werden, um die nötige Syntax zu zeigen.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String args[]) {&lt;br /&gt;
     System.out.print( Math.sin(Math.PI / 2) );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ausgabe: 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine sehr nützliche Methode aus Math soll hier noch kurz vorgestellt werden, da man sie nicht unbedingt hier vermuten würde: Die Methode random liefert ohne Parameter zu erwarten eine Zufallszahl zwischen 0 und 1. Mit Hilfe dieser Methode kann man gleichverteilte und beliebige Zufallszahlen in den Bereichen von float und int erzeugen.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String args[]) {&lt;br /&gt;
     double random1 = Math.random(); //erzeugt eine Zahl im Bereich [0;1)&lt;br /&gt;
     double random2 = Math.random() * 30 + 5; //erzeugt eine Zahl im Bereich [5;34)&lt;br /&gt;
     int random3 = (int) (Math.random() * 13); //erzeugt eine natürliche Zahl im Bereich [0;12]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Streams===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres nützliches Konzept, dass die Java API uns bietet sind Streams. Streams (zu deutsch: Datenströme) beschreiben Datenquellen oder Ziele, an die man Daten schicken kann. Dabei wird von der tatsächlichen Datenquelle oder vom tatsächlichen Ziel abstrahiert, um für alle &amp;quot;Sender&amp;quot; oder &amp;quot;Empfänger&amp;quot; von Daten die gleichen Mehtoden nutzen zu können. So können sich hinter einem Datenstrom beispielsweise eine Datei, die von der Tastatur kommenden Zeichen oder aber eine Netzwerkverbindung verbergen. Der Programmierer muss sich aber um diese Details, wenn er erstmal ein entsprechendes Datenstrom-Objekt erstellt hat keine Gedanken mehr machen, weil er ebend auf einem Datenstrom arbeitet und nicht auf einer bestimmten Datenquelle. Hier ein paar Beispiele, wie man verschiedene Datenströme erstellt. Dabei ist generell zwischen InputStream und OutputStream zu unterscheiden, wobei der erstere Daten von außen an unser Programm heranträgt und der zweite Daten von unserem Programm an einen Empfänger übermittelt&lt;br /&gt;
&lt;br /&gt;
 import java.io.*&lt;br /&gt;
 &lt;br /&gt;
 //prints the ascii code for a specified number of keys pressed on the keyboard to the console&lt;br /&gt;
 static void printAsciiCodes(int keysToPrint) {&lt;br /&gt;
     InputStream keyboard = System.in; //get standard input stream (the keyboard)&lt;br /&gt;
     for (int i = 0; i &amp;lt; keysToPrint; i++) {&lt;br /&gt;
         int asciiCode = keyboard.read(); //wait for a key to be pressed&lt;br /&gt;
         System.out.print(asciiCode + &amp;quot; &amp;quot;); //print it&#039;s ascii code&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //prints the content of a file given by Name to the console bytewise&lt;br /&gt;
 static void printFile(String fileName) {&lt;br /&gt;
     InputStream file = new FileInputStream(fileName); //open a stream representing the file&lt;br /&gt;
     int byteRead = file.read(); //read first byte from the file&lt;br /&gt;
     while (byteRead != -1) { //while there is something to read&lt;br /&gt;
         System.out.print(byteRead + &amp;quot; &amp;quot;); //print the byte we read at last&lt;br /&gt;
         byteRead = file.read(); //read a new byte&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Im Beispiel kann man schön sein, dass der Mechanismus zum lesen eines bytes bei beiden Datenströmen der gleiche ist. Lediglich in der Erstellung des Datenstromes gibt es je nach Quelle Unterschiede. Die Funktionsweise ist für Ausgabeströme recht ähnlich. Nähere Informationen dazu findet man in der API-Reference, wenn man nach den Klassen OutputStream und FileOutputStream sucht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===BufferedReader===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im letzten Abschnitt haben wir gesehen, wie leicht es ist mit Hilfe von Streams Bytes aus verschiedenen Quellen zu lesen. Oftmals wollen wir aber keine einzelnen Bytes lesen, sondern wissen dass unsere Datenquelle uns einen Text liefert. Da Text meist in Zeilen strukturiert ist, wäre es schön eine Funktion zu haben die Zeilenweise Strings aus unserem Stream liest. Auch hierfür bietet uns die Java Klassenbibiliothek bereits eine Lösung: den BufferedReader. Seine readLine Methode liest eine Zeile aus. Das Problem an dem BufferedReader ist, dass wir zu seiner Instantiierung einen Reader benötigen. Schauen wir in der API Dokumentation nach, welche Arten von Readern es gibt, so fällt der InputStreamReader auf. Schaut man sich diesen genauer an, so enthält er auch einen Konstruktor, der einen InputStream als Parameter akzeptiert.&lt;br /&gt;
&lt;br /&gt;
Nun bleibt es unsere Aufgabe zuerst einen Datenstrom aus unserer Datenquelle zu erzeugen, dann darauf einen Reader zu konstruieren um am Schluß darauf einen BufferedReader zu setzen. Dieses Vorgehen wirkt zwar etwas klobig, doch es gibt in der Klassenbibliothek bisher (bis Java 1.4.2) keine bessere Lösung dafür. Es folgt ein kleines Beispiel, dass den Inhalt einer Textdatei zeilenweise auf der Konsole ausgibt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 import java.io.*;&lt;br /&gt;
 &lt;br /&gt;
 static void printTextFile(String fileName) {&lt;br /&gt;
     InputStream fileStream = new FileInputStream(fileName);&lt;br /&gt;
     Reader reader = new InputStreamReader(fileStream); //wrap a Reader around the InputStream&lt;br /&gt;
     BufferedReader lineReader = new BufferedReader(reader); //wrap a BufferedReader around the Reader&lt;br /&gt;
     String line = lineReader.readLine();&lt;br /&gt;
     while (line != null) { //if readLine returns null, file end is reached&lt;br /&gt;
         System.out.println(line);&lt;br /&gt;
         line = lineReader.readLine();&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Exceptions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Versucht man die Programme aus den letzten beiden Abschnitten zu compilieren, so wird man feststellen dass sie nicht lauffähig sind. Mit der Tatsache, dass Streams so universell sind, handelt man sich natürlich auch alle möglichen Probleme der verschiedenen Medien, die ein Stream verstecken kann, ein. Um die Behandlung dessen zu vereinfachen und dem Programmierer die Chance zu geben an der richtigen Stelle auf Fehler zu reagieren gibt es Exceptions. An dieser Stelle soll es genügen zu erkennen, wann man von einer Methode erwarten muss, dass sie eine Exception auslöst und wie man damit umgeht.&lt;br /&gt;
&lt;br /&gt;
Methoden, die eine Exception auslösen können müssen dies ihrer Umgebung mitteilen. Dies geschieht, mit dem Schlüsselwort throws gefolgt von einer kommaseparierten Liste aller Exceptions, die sie auslösen können.&lt;br /&gt;
&lt;br /&gt;
 public class InputStream {&lt;br /&gt;
     ...&lt;br /&gt;
     public int read() throws IOException {&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Bei den Klassen aus der Java Klassenbibliothek kann man der API-Reference entnehmen, welche Exceptions sie auslösen können. Jede mögliche Exception muss behandelt werden, dazu gibt es zwei Wege, von denen wir hier nur auf einen genauer eingehen werden: Man fasst den Teil einer Mehtode, der eine Exception auslösen kann in ein try-catch-Konstrukt ein. Wie dies aussieht soll gleich am Beispiel der Methode printTextFile gezeigt werden.&lt;br /&gt;
&lt;br /&gt;
 import java.io.*; &lt;br /&gt;
 &lt;br /&gt;
 static void printTextFile(String fileName) {&lt;br /&gt;
     InputStream fileStream = null;&lt;br /&gt;
     try {&lt;br /&gt;
         fileStream = new FileInputStream(fileName);&lt;br /&gt;
     } catch (FileNotFoundException) {&lt;br /&gt;
         System.out.println(&amp;quot;The file &amp;quot; + fileName + &amp;quot; could not be found.&amp;quot;);&lt;br /&gt;
         return; //stop execution of method... cannot print from non existing file&lt;br /&gt;
     }&lt;br /&gt;
     Reader reader = new InputStreamReader(fileStream); //wrap a Reader around the InputStream&lt;br /&gt;
     BufferedReader lineReader = new BufferedReader(reader); //wrap a BufferedReader around the Reader&lt;br /&gt;
     try {&lt;br /&gt;
         String line = lineReader.readLine();&lt;br /&gt;
         while (line != null) { //if readLine returns null, file end is reached&lt;br /&gt;
             System.out.println(line);&lt;br /&gt;
             line = lineReader.readLine();&lt;br /&gt;
         }&lt;br /&gt;
     } catch (IOException e) {&lt;br /&gt;
         System.out.println(&amp;quot;An unknown IOException occured while reading the file.&amp;quot;);&lt;br /&gt;
     } catch (EOFException e) {&lt;br /&gt;
         System.out.println(&amp;quot;Unexpected end of File found.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jetzt würde der Javacompiler die Methode compilieren. Sollte eine Exception auftreten, so wird dies dem Benutzer auf der Konsole mitgeteilt und die Ausführung der Methode abgebrochen. Der try-catch-Mechanismus funktioniert folgendermaßen: Wenn in dem Block zwischen try und catch eine Exception auftritt, wird die Ausführung des Blocks abgebrochen und es geht im passenden catch-Block weiter. Dabei ist passend derjenige Block, dessen gefangene Klasse derjenige Vorfahre der tatsächlich ausgelösten Exceptionklasse ist, der in der Vererbungshierarchie am nächsten daran ist.&lt;br /&gt;
Man sollte die Blöcke zwischen try und catch so klein wie sinnvoll möglich halten. Insbesondere sollte man sich davor hüten, ganze Methoden in ein großes try-catch einzubauen, weil dann die Fehlerbehandlung ungenau und die Fehlersuche schwieriger wird. Eine gute Möglichkeit zum Fehler finden ist es, im catch Block die Methode printStackTrace der Exception aufzurufen.&lt;br /&gt;
&lt;br /&gt;
Die zweite Möglichkeit Exceptions zu behandeln ist es sie nicht zu behandeln und an den Aufrufer weiterzugeben, was hier aber nicht näher thematisiert werden soll. Hier ein Link (http://java.sun.com/docs/books/tutorial/essential/exceptions/index.html) für Interessierte, die gerne mehr über Exceptions erfahren wollen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das wars zu diesem Thema. Falls jemand so weit durchgehalten hat, danken wir für die Aufmerksamkeit :)&lt;br /&gt;
Wir hoffen, dass ihr jetzt ein klein wenig mehr mit den Mechanismen die Java anbietet vertraut seid und regen Gebrauch von der großen Klassenbibliothek machen werdet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TODOs==&lt;br /&gt;
&lt;br /&gt;
equals und compareTo() sind nicht sauber - erwähnen und link auf erklärung&lt;br /&gt;
&lt;br /&gt;
eventuell Konstruktor für Apfel und Obst überall einbauen und nutzen&lt;br /&gt;
&lt;br /&gt;
throws bei exceptions weiter ausbauen&lt;br /&gt;
&lt;br /&gt;
Link für Streams und &amp;quot;Aufsätze&amp;quot;&lt;/div&gt;</summary>
		<author><name>Kriber</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2/Vorlesung_2&amp;diff=7112</id>
		<title>Javakurs2006/Tag 2/Vorlesung 2</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Tag_2/Vorlesung_2&amp;diff=7112"/>
		<updated>2006-04-03T19:12:32Z</updated>

		<summary type="html">&lt;p&gt;Kriber: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Kleine Wiederholung==&lt;br /&gt;
&lt;br /&gt;
Klassen beinhalten zusammengehörige Daten und Methoden. Mit new erzeugt man Instanzen dieser Klassen. Jede Instanz kann eigene Werte der zugehörigen Daten enthalten. Ein Teil der im Quellcode dieses Textes enthaltenen Kommentare erklären Syntax und hätten in einem &amp;quot;echten&amp;quot; Programm nichts zu suchen.&lt;br /&gt;
&lt;br /&gt;
 //file: Apfel.java&lt;br /&gt;
 class Apfel {&lt;br /&gt;
     String farbe;&lt;br /&gt;
     int gewicht; //in Gramm&lt;br /&gt;
     &lt;br /&gt;
     Apfel (String farb, int gew) { //Konstuktor&lt;br /&gt;
         farbe = farb; //eigentlich this.farbe =farb, ist aber unnötig&lt;br /&gt;
         gewicht = gew;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     void essen() { //eine Methode&lt;br /&gt;
         gewicht = 0;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //file: Beispiel.java&lt;br /&gt;
 public Beispiel {&lt;br /&gt;
     public static void main( String args[] ) {&lt;br /&gt;
         Apfel boskop1 = new Apfel(&amp;quot;rot&amp;quot;, 175);&lt;br /&gt;
         Apfel boskop2 = new Apfel(&amp;quot;grün&amp;quot;, 180);&lt;br /&gt;
         &lt;br /&gt;
         System.out.println(&amp;quot;boskop1 (&amp;quot; +&lt;br /&gt;
             boskop1.farbe + &amp;quot;): &amp;quot; + boskop1.gewicht + &amp;quot; gramm&amp;quot;);&lt;br /&gt;
         System.out.println(&amp;quot;boskop2 (&amp;quot; +&lt;br /&gt;
             boskop2.farbe + &amp;quot;): &amp;quot; + boskop2.gewicht + &amp;quot;gramm&amp;quot;);        &lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Vererbung==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In objektorientierten Programmiersprachen gibt es ein Konzept, dass sich Vererbung nennt. Eine Klasse erbt dann das Verhalten (also die Methoden) und auch die Daten von einer anderen Klasse. In Java benutzt man zum Vererben das Schlüsselwort extends.&lt;br /&gt;
&lt;br /&gt;
 //File: Obst.java&lt;br /&gt;
 class Obst {&lt;br /&gt;
 	String farbe;&lt;br /&gt;
 	int gewicht; //in Gramm&lt;br /&gt;
  	&lt;br /&gt;
 	void essen() {&lt;br /&gt;
 		gewicht = 0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: Apfel.java&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	 &lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Klasse Apfel im Beispiel hat alle Methoden und Daten von der Klasse Obst geerbt. Das heißt Instanzen dieser Klasse besitzen eine Farbe, ein Gewicht und man kann sie essen.&lt;br /&gt;
&lt;br /&gt;
Wer mehr über Objektorientierung und Vererbung erfahren möchte, kann entweder eins der unzähligen verfügbaren Bücher zu dem Thema zur Hand nehmen. Alternativ könnte man auch diesen link (http://java.sun.com/docs/books/tutorial/java/concepts/index.html) verfolgen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Die Klasse Object==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Java gibt es eine Klasse Object, von der jede andere Klasse abgeleitet ist. Wenn man kein extends hinschreibt, wird vom Compiler sozusagen das &amp;quot;extends Object&amp;quot; ergänzt. Dies geschieht intern, also ohne Veränderung in eurem Quellcode.&lt;br /&gt;
&lt;br /&gt;
Einige Methoden von Object sind für uns sehr nützlich, weshalb sie hier kurz vorgestellt werden sollen. Doch eins noch zum Wort Objekt: Die Bezeichnung Objekt wird oftmals sowohl für Klassen als auch für Instanzen von Klassen benutzt, deshalb immer schauen welche Bedeutung wohl gerade gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Im folgenden wird hier Obje&amp;lt;b&amp;gt;k&amp;lt;/b&amp;gt;t in der Bedeutung von Instanz benutzt und Obje&amp;lt;b&amp;gt;c&amp;lt;/b&amp;gt;t, wenn die besondere Klasse Object gemeint ist.&lt;br /&gt;
&lt;br /&gt;
Nun aber zu den genannten nützlichen Mehtoden: Die Methode toString() liefert einen String, der die Instanz beschreibt. Doch woher soll die Methode (die ja in Object angelegt wurde) wissen, wie man unsere spezielle Instanz treffend in einem String beschreibt?&lt;br /&gt;
&lt;br /&gt;
Dazu kann man die Methode überschreiben. Man macht das, indem man sie einfach in der eigenen Klasse noch einmal definiert.&lt;br /&gt;
&lt;br /&gt;
 //File: Apfel.java&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	&lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 	 &lt;br /&gt;
 	String toString() {&lt;br /&gt;
 		String description = &amp;quot;Ein Apfel, geerntet  in &amp;quot; + geerntetIn;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ruft man nun auf einer Instanz von Apfel toString auf, so wird die in Apfel definierte Version benutzt. Die Methode toString() ist unter anderem deshalb so wichtig, weil sie von System.out.println() benutzt wird, um Instanzen beliebiger Nachfahren von Object auf der Konsole auszugeben. Die Methode printMe() aus der vorhergehenden Übung hatte die gleiche Funktion. Nur arbeitet  println() mit toString(), weshalb es sinnvoll wäre printMe() in toString() umzubenennen. &lt;br /&gt;
&lt;br /&gt;
Eine weitere wichtige Methode von Object ist equals(Object o). Hiermit kann, wie der Name schon sagt die Gleichheit zweier Objekte festgestellt werden. Nun wird sich vielleicht der ein oder andere fragen, warum man nicht den Vergleichsoperator == benutzt, sondern eine eigene Methode dafür schreibt. Warum das so ist, soll an einem Codebeispiel verdeutlicht werden.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String []args) {&lt;br /&gt;
 	Apfel apfel1 = new Apfel();&lt;br /&gt;
 	apfel1.farbe = &amp;quot;grün&amp;quot;;&lt;br /&gt;
 	apfel1.geerntetIn = &amp;quot;Berlin&amp;quot;;&lt;br /&gt;
 	apfel1.gewicht = 215;&lt;br /&gt;
  	&lt;br /&gt;
 	Apfel apfel2 = new Apfel();&lt;br /&gt;
 	apfel2.farbe = &amp;quot;grün&amp;quot;;&lt;br /&gt;
 	apfel2.geerntetIn = &amp;quot;Brandenburg&amp;quot;;&lt;br /&gt;
 	apfel2.gewicht = 215;&lt;br /&gt;
  	&lt;br /&gt;
 	Apfel apfel3 = apfel2;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Der Operator == gibt genau dann true zurück, wenn die Werte der beiden verglichenen Dinge identisch sind. Bei eingebauten Datentypen (int, double) verhält er sich wie erwartet. Der Wert eines Objektes hingegen ist die Identität des Objektes, und nicht sein Inhalt. Deshalb würde apfel1 == apfel2 false zurückgeben, weil es sich um zwei verschiedene Objekte handelt. Wir hätten aber gern eine Methode, die uns sagt, dass diese Äpfel insofern gleich sind, dass sie die gleichen Eigenschaften besitzen. Dabei ist zu beachten, dass wir für die Gleichheit zweier Äpfel hier nur das Gewicht und die Farbe heranziehen.Genau dies sollte equals realisieren.&lt;br /&gt;
&lt;br /&gt;
 class Apfel extends Obst {&lt;br /&gt;
 	String geerntetIn;&lt;br /&gt;
 	&lt;br /&gt;
 	void schaelen() {&lt;br /&gt;
 		gewicht = gewicht - 10;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	String toString() {&lt;br /&gt;
 		String description = &amp;quot;Ein Apfel, geerntet  in &amp;quot; + geerntetIn;&lt;br /&gt;
 	}&lt;br /&gt;
 	 &lt;br /&gt;
 	boolean equals(Object o) {&lt;br /&gt;
 		Apfel andererApfel = (Apfel)o;&lt;br /&gt;
 		return farbe.equals(andererApfel.farbe) &amp;amp;&amp;amp;&lt;br /&gt;
 			gewicht == andererApfel.gewicht;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Im Beispiel für equals gibt es gleich zwei Dinge, die einer weiteren Erklärung bedürfen: In der ersten Zeile machen wir aus der Intanz von Object, mit dem wir vergleichen einen Apfel. Diesen Vorgang nennt man casten.  Das Programm wird an dieser Stelle mit einer entsprechenden Fehlermeldung beendet, wenn der Parameter o kein Apfel ist. Das ist zwar nicht schön, macht aber trotzdem Sinn, da eine Gleichheit zwischen Äpfeln und beliebigen Objekten nicht zwangsläufig definiert ist. Dies ist zugegebenermaßen noch nicht ganz zufriedenstellend, da das Programm einfach beendet würde, wenn Apfel mit Autos zu vergleichen, obwohl man sicher sagen könnte, dass die beiden unterschiedlich sind. Wer hierzu noch etwas mehr lesen möchte, kann sich hier (http://www.galileocomputing.de/openbook/javainsel3/javainsel_030003.htm#Rxxjavainsel_030003281GleichheitvonObjektenunddieMethodeequals) vertiefen.&lt;br /&gt;
&lt;br /&gt;
Die zweite Sache, die auffällt: das Gewicht wird mit == verglichen, warum nicht auch mit equals? Die Antwort darauf ist eigentlich recht einfach: gewicht ist vom Typ int, der ein primitiver Datentyp ist. Damit erbt er nicht von Object, und bietet demnach auch keine Methode equals an. Wie oben schon erwähnt liefert == bei primitiven Datentypen ja auch das gewünschte Ergebnis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Comparable==&lt;br /&gt;
&lt;br /&gt;
Manchmal reicht es nicht aus, zu wissen zwei Objekte gleich sind. Oft wollen wir Objekte ordnen, wozu wir eine Funktion brauchen die uns mitteilt welches von zwei Objekten &amp;quot;größer&amp;quot; ist. Eine solche Funktion ist compareTo(Object o). Im Gegensatz zu equals und toString ist sie allerdings keine Methode von Object, da es Klassen gibt, deren Objekte man nicht ordnen kann. Ein Beispiel hierfür wären Farbtöne, für die es schwer fällt eine natürliche Ordnung zu finden. Nun könnten wir für unsere eigenen Klassen, wo das Ordnen Sinn macht einfach ein compareTo implementieren. Würden wir dies einfach so tun könnten wir allerdings nicht einen Algorithmus benutzen, den jemand anderes zum Ordnen seiner eigenen Klasse, die compareTo implementiert geschrieben hat:&lt;br /&gt;
&lt;br /&gt;
 //File: MyClass.java&lt;br /&gt;
 class MyClass {&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(MyClass o) {&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: SomeonesClass.java&lt;br /&gt;
 class SomeonesClass {&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(SomeonesClass o) {&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File Utility.java&lt;br /&gt;
 class Utility {&lt;br /&gt;
 	static sort(SomeonesClass daten[]) {&lt;br /&gt;
 		//sortiere daten mittels compareTo&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hier kann man kein array vom Typ MyClass[] als parameter von sort übergeben, da es sich um zwei verschiedene Typen handelt. Um dieses Manko zu umgehen gibt es in Java Interfaces. Sie stellen eine Vereinbarung darüber dar, welche Methoden eine Klasse anbietet. Im Gegensatz zur Vererbung gibt es aber hier beim Interface noch keine Vorgabe, wie diese Methoden funktionieren. Das Interface schreibt nur die Namen, Art der Parameter und des Rückgabewertes von Methoden vor. Comparable ist ein solches Interface, dass schon in der Java API vorgegeben ist. Es schreibt vor, dass Klassen die dieses Interface implementieren die Methode int compareTo(Object o) anbieten müssen.&lt;br /&gt;
&lt;br /&gt;
Modifizieren wir also unser Beispiel so, dass wir das Interface Comparable nutzen.&lt;br /&gt;
	&lt;br /&gt;
 //File: MyClass.java&lt;br /&gt;
 class MyClass implements Comparable{&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(Object o) {&lt;br /&gt;
 		MyClass parameter = (MyClass)o;&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File: SomeonesClass.java&lt;br /&gt;
 class SomeonesClass implements Comparable{&lt;br /&gt;
 	...&lt;br /&gt;
 	compareTo(Object o) {&lt;br /&gt;
 		SomeonesClass parameter = (SomeonesClass)o;&lt;br /&gt;
 		...&lt;br /&gt;
 	}&lt;br /&gt;
 	...&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //File Utility.java&lt;br /&gt;
 class Utility {&lt;br /&gt;
 	static sort(Comparable daten[]) {&lt;br /&gt;
 		//sortiere daten mittels compareTo&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Nun kann die Methode sort beliebige arrays übergeben bekommen, deren Inhalt das Interface comaparable implementiert. Darüber wird dieser Mehtode zugesichert, dass jedes Element dieses arrays über die Methode compareTo verfügt und somit sich mit anderen Elementen des arrays vergleichen lässt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Java API - Javas Klassenbibliothek==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein großer Vorteil von Java gegenüber anderen Programmiersprachen besteht darin, dass es eine Vielzahl vereinheitlichter und schon mitgelieferter Klassen und Interfaces gibt. Die Sammlung dieser Klassen und Interfaces nennt man Java API. Es gibt auf der Website von Sun(java.sun.com) eine sehr umfassende Dokumentation dieser API(http://java.sun.com/j2se/1.4.2/docs/api/), die allerdings nicht immer einfach zu bedienen ist. Wenn man weiß, nach welcher Klasse man sucht findet man meist recht schnell die gewünschten Informationen. Hat man aber nur eine vage Idee, was die Klasse tun soll muss man meist noch andere Quellen nutzen, um an den Namen der gesuchten Klasse heranzukommen. Hierzu bieten sich natürlich Suchmaschinen wie google an.&lt;br /&gt;
&lt;br /&gt;
Im Folgenden wollen wir einige besonders Häufig verwendete Module und Konzepte der Java API vorstellen. Wie man ein solches Modul in eigenen Programmen verwendet, werden wir im ersten vorgestellten Modul etwas näher beleuchten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Math===&lt;br /&gt;
&lt;br /&gt;
Das Modul Math bietet, wenig überraschend, alle möglichen Methoden und Konstanten die man für mathematische Berechnungen brauchen könnte. Einige Konstanten sind zum Beispiel &lt;br /&gt;
&lt;br /&gt;
 public static final double E;&lt;br /&gt;
 public static final double PI;&lt;br /&gt;
&lt;br /&gt;
Diese beiden Konstanten sind jeweils mit drei zusätzlichen Schlüsselwörtern gekennzeichnet, die hier zumindest grob erklärt werden sollen.&lt;br /&gt;
&lt;br /&gt;
public bedeutet, dass die entsprechende Variable oder Methode auch außerhalb der definierenden Klasse und außerhalb von Math benutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Von Daten, die satic definiert sind hat nicht jede Instanz eine eigene Ausprägung, sondern alle Instanzen der Klasse teilen sich diese Variable.&lt;br /&gt;
Mehtoden die static definiert sind, brauchen keine Instanz der Klasse um aufgerufen zu werden. Demnach kennen sie allerdings auch this nicht und können daher nicht auf Daten einer Instanz der Klasse arbeiten.&lt;br /&gt;
&lt;br /&gt;
Das Schlüsselwort final an einer Variable macht diese zur Konstante. Das heißt sie wird einmal bei der Deklaration festgelegt und kann dann nicht mehr verändert werden.&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Methoden, die Math bietet sollen hier nicht im Detail besprochen werden, da sie recht einfach in der API-Dokumentation von Java zu finden sind. Dennoch soll anhand des Sinus ein Aufruf einer Methode aus Math hier gezeigt werden, um die nötige Syntax zu zeigen.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String args[]) {&lt;br /&gt;
     System.out.print( Math.sin(Math.PI / 2) );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ausgabe: 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eine sehr nützliche Methode aus Math soll hier noch kurz vorgestellt werden, da man sie nicht unbedingt hier vermuten würde: Die Methode random liefert ohne Parameter zu erwarten eine Zufallszahl zwischen 0 und 1. Mit Hilfe dieser Methode kann man gleichverteilte und beliebige Zufallszahlen in den Bereichen von float und int erzeugen.&lt;br /&gt;
&lt;br /&gt;
 public static void main(String args[]) {&lt;br /&gt;
     double random1 = Math.random(); //erzeugt eine Zahl im Bereich [0;1)&lt;br /&gt;
     double random2 = Math.random() * 30 + 5; //erzeugt eine Zahl im Bereich [5;34)&lt;br /&gt;
     int random3 = (int) (Math.random() * 13); //erzeugt eine natürliche Zahl im Bereich [0;12]&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Streams===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ein weiteres nützliches Konzept, dass die Java API uns bietet sind Streams. Streams (zu deutsch: Datenströme) beschreiben Datenquellen oder Ziele, an die man Daten schicken kann. Dabei wird von der tatsächlichen Datenquelle oder vom tatsächlichen Ziel abstrahiert, um für alle &amp;quot;Sender&amp;quot; oder &amp;quot;Empfänger&amp;quot; von Daten die gleichen Mehtoden nutzen zu können. So können sich hinter einem Datenstrom beispielsweise eine Datei, die von der Tastatur kommenden Zeichen oder aber eine Netzwerkverbindung verbergen. Der Programmierer muss sich aber um diese Details, wenn er erstmal ein entsprechendes Datenstrom-Objekt erstellt hat keine Gedanken mehr machen, weil er ebend auf einem Datenstrom arbeitet und nicht auf einer bestimmten Datenquelle. Hier ein paar Beispiele, wie man verschiedene Datenströme erstellt. Dabei ist generell zwischen InputStream und OutputStream zu unterscheiden, wobei der erstere Daten von außen an unser Programm heranträgt und der zweite Daten von unserem Programm an einen Empfänger übermittelt&lt;br /&gt;
&lt;br /&gt;
 import java.io.*&lt;br /&gt;
 &lt;br /&gt;
 //prints the ascii code for a specified number of keys pressed on the keyboard to the console&lt;br /&gt;
 static void printAsciiCodes(int keysToPrint) {&lt;br /&gt;
     InputStream keyboard = System.in; //get standard input stream (the keyboard)&lt;br /&gt;
     for (int i = 0; i &amp;lt; keysToPrint; i++) {&lt;br /&gt;
         int asciiCode = keyboard.read(); //wait for a key to be pressed&lt;br /&gt;
         System.out.print(asciiCode + &amp;quot; &amp;quot;); //print it&#039;s ascii code&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 //prints the content of a file given by Name to the console bytewise&lt;br /&gt;
 static void printFile(String fileName) {&lt;br /&gt;
     InputStream file = new FileInputStream(fileName); //open a stream representing the file&lt;br /&gt;
     int byteRead = file.read(); //read first byte from the file&lt;br /&gt;
     while (byteRead != -1) { //while there is something to read&lt;br /&gt;
         System.out.print(byteRead + &amp;quot; &amp;quot;); //print the byte we read at last&lt;br /&gt;
         byteRead = file.read(); //read a new byte&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Im Beispiel kann man schön sein, dass der Mechanismus zum lesen eines bytes bei beiden Datenströmen der gleiche ist. Lediglich in der Erstellung des Datenstromes gibt es je nach Quelle Unterschiede. Die Funktionsweise ist für Ausgabeströme recht ähnlich. Nähere Informationen dazu findet man in der API-Reference, wenn man nach den Klassen OutputStream und FileOutputStream sucht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===BufferedReader===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im letzten Abschnitt haben wir gesehen, wie leicht es ist mit Hilfe von Streams Bytes aus verschiedenen Quellen zu lesen. Oftmals wollen wir aber keine einzelnen Bytes lesen, sondern wissen dass unsere Datenquelle uns einen Text liefert. Da Text meist in Zeilen strukturiert ist, wäre es schön eine Funktion zu haben die Zeilenweise Strings aus unserem Stream liest. Auch hierfür bietet uns die Java Klassenbibiliothek bereits eine Lösung: den BufferedReader. Seine readLine Methode liest eine Zeile aus. Das Problem an dem BufferedReader ist, dass wir zu seiner Instantiierung einen Reader benötigen. Schauen wir in der API Dokumentation nach, welche Arten von Readern es gibt, so fällt der InputStreamReader auf. Schaut man sich diesen genauer an, so enthält er auch einen Konstruktor, der einen InputStream als Parameter akzeptiert.&lt;br /&gt;
&lt;br /&gt;
Nun bleibt es unsere Aufgabe zuerst einen Datenstrom aus unserer Datenquelle zu erzeugen, dann darauf einen Reader zu konstruieren um am Schluß darauf einen BufferedReader zu setzen. Dieses Vorgehen wirkt zwar etwas klobig, doch es gibt in der Klassenbibliothek bisher (bis Java 1.4.2) keine bessere Lösung dafür. Es folgt ein kleines Beispiel, dass den Inhalt einer Textdatei zeilenweise auf der Konsole ausgibt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 import java.io.*;&lt;br /&gt;
 &lt;br /&gt;
 static void printTextFile(String fileName) {&lt;br /&gt;
     InputStream fileStream = new FileInputStream(fileName);&lt;br /&gt;
     Reader reader = new InputStreamReader(fileStream); //wrap a Reader around the InputStream&lt;br /&gt;
     BufferedReader lineReader = new BufferedReader(reader); //wrap a BufferedReader around the Reader&lt;br /&gt;
     String line = lineReader.readLine();&lt;br /&gt;
     while (line != null) { //if readLine returns null, file end is reached&lt;br /&gt;
         System.out.println(line);&lt;br /&gt;
         line = lineReader.readLine();&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Exceptions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Versucht man die Programme aus den letzten beiden Abschnitten zu compilieren, so wird man feststellen dass sie nicht lauffähig sind. Mit der Tatsache, dass Streams so universell sind, handelt man sich natürlich auch alle möglichen Probleme der verschiedenen Medien, die ein Stream verstecken kann, ein. Um die Behandlung dessen zu vereinfachen und dem Programmierer die Chance zu geben an der richtigen Stelle auf Fehler zu reagieren gibt es Exceptions. An dieser Stelle soll es genügen zu erkennen, wann man von einer Methode erwarten muss, dass sie eine Exception auslöst und wie man damit umgeht.&lt;br /&gt;
&lt;br /&gt;
Methoden, die eine Exception auslösen können müssen dies ihrer Umgebung mitteilen. Dies geschieht, mit dem Schlüsselwort throws gefolgt von einer kommaseparierten Liste aller Exceptions, die sie auslösen können.&lt;br /&gt;
&lt;br /&gt;
 public class InputStream {&lt;br /&gt;
     ...&lt;br /&gt;
     public int read() throws IOException {&lt;br /&gt;
         ...&lt;br /&gt;
     }&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Bei den Klassen aus der Java Klassenbibliothek kann man der API-Reference entnehmen, welche Exceptions sie auslösen können. Jede mögliche Exception muss behandelt werden, dazu gibt es zwei Wege, von denen wir hier nur auf einen genauer eingehen werden: Man fasst den Teil einer Mehtode, der eine Exception auslösen kann in ein try-catch-Konstrukt ein. Wie dies aussieht soll gleich am Beispiel der Methode printTextFile gezeigt werden.&lt;br /&gt;
&lt;br /&gt;
 import java.io.*; &lt;br /&gt;
 &lt;br /&gt;
 static void printTextFile(String fileName) {&lt;br /&gt;
     InputStream fileStream = null;&lt;br /&gt;
     try {&lt;br /&gt;
         fileStream = new FileInputStream(fileName);&lt;br /&gt;
     } catch (FileNotFoundException) {&lt;br /&gt;
         System.out.println(&amp;quot;The file &amp;quot; + fileName + &amp;quot; could not be found.&amp;quot;);&lt;br /&gt;
         return; //stop execution of method... cannot print from non existing file&lt;br /&gt;
     }&lt;br /&gt;
     Reader reader = new InputStreamReader(fileStream); //wrap a Reader around the InputStream&lt;br /&gt;
     BufferedReader lineReader = new BufferedReader(reader); //wrap a BufferedReader around the Reader&lt;br /&gt;
     try {&lt;br /&gt;
         String line = lineReader.readLine();&lt;br /&gt;
         while (line != null) { //if readLine returns null, file end is reached&lt;br /&gt;
             System.out.println(line);&lt;br /&gt;
             line = lineReader.readLine();&lt;br /&gt;
         }&lt;br /&gt;
     } catch (IOException e) {&lt;br /&gt;
         System.out.println(&amp;quot;An unknown IOException occured while reading the file.&amp;quot;);&lt;br /&gt;
     } catch (EOFException e) {&lt;br /&gt;
         System.out.println(&amp;quot;Unexpected end of File found.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jetzt würde der Javacompiler die Methode compilieren. Sollte eine Exception auftreten, so wird dies dem Benutzer auf der Konsole mitgeteilt und die Ausführung der Methode abgebrochen. Der try-catch-Mechanismus funktioniert folgendermaßen: Wenn in dem Block zwischen try und catch eine Exception auftritt, wird die Ausführung des Blocks abgebrochen und es geht im passenden catch-Block weiter. Dabei ist passend derjenige Block, dessen gefangene Klasse derjenige Vorfahre der tatsächlich ausgelösten Exceptionklasse ist, der in der Vererbungshierarchie am nächsten daran ist.&lt;br /&gt;
Man sollte die Blöcke zwischen try und catch so klein wie sinnvoll möglich halten. Insbesondere sollte man sich davor hüten, ganze Methoden in ein großes try-catch einzubauen, weil dann die Fehlerbehandlung ungenau und die Fehlersuche schwieriger wird. Eine gute Möglichkeit zum Fehler finden ist es, im catch Block die Methode printStackTrace der Exception aufzurufen.&lt;br /&gt;
&lt;br /&gt;
Die zweite Möglichkeit Exceptions zu behandeln ist es sie nicht zu behandeln und an den Aufrufer weiterzugeben, was hier aber nicht näher thematisiert werden soll. Hier ein Link (http://java.sun.com/docs/books/tutorial/essential/exceptions/index.html) für Interessierte, die gerne mehr über Exceptions erfahren wollen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das wars zu diesem Thema. Falls jemand so weit durchgehalten hat, danken wir für die Aufmerksamkeit :)&lt;br /&gt;
Wir hoffen, dass ihr jetzt ein klein wenig mehr mit den Mechanismen die Java anbietet vertraut seid und regen Gebrauch von der großen Klassenbibliothek machen werdet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TODOs==&lt;br /&gt;
&lt;br /&gt;
equals und compareTo() sind nicht sauber - erwähnen und link auf erklärung&lt;br /&gt;
&lt;br /&gt;
eventuell Konstruktor für Apfel und Obst überall einbauen und nutzen&lt;br /&gt;
&lt;br /&gt;
throws bei exceptions weiter ausbauen&lt;/div&gt;</summary>
		<author><name>Kriber</name></author>
	</entry>
</feed>