<?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=84.152.17.26</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=84.152.17.26"/>
	<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//Spezial:Beitr%C3%A4ge/84.152.17.26"/>
	<updated>2026-10-29T03:13:58Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.6</generator>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Java_Kurzreferenz&amp;diff=7247</id>
		<title>Javakurs2006/Java Kurzreferenz</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Java_Kurzreferenz&amp;diff=7247"/>
		<updated>2006-06-03T04:14:53Z</updated>

		<summary type="html">&lt;p&gt;84.152.17.26: /* Bitoperatoren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier befindet sich eine kleine &#039;&#039;&#039;Referenz für Java&#039;&#039;&#039; speziell für den Javakurs der Freitagsrunde.&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Ein &#039;&#039;&#039;Kommentar&#039;&#039;&#039; ist ein Abschnitt des Java-Codes, der vom Java-Compiler ignoriert wird.  Man kann in ein Kommentar also schreiben was man will.  Kommentare sind nützlich, um den Quellcode zu dokumentieren.  &lt;br /&gt;
&lt;br /&gt;
In Java gibt es zwei Arten von Kommentaren: &lt;br /&gt;
&lt;br /&gt;
===Kommentare über eine Zeile===&lt;br /&gt;
&lt;br /&gt;
 // Diese ganze Zeile wird vom Compiler ignoriert.&lt;br /&gt;
 int x= 5;  // Dieser  Kommentar beginnt mit »//«.  Alles davor wird vom Compiler nicht ignoriert.&lt;br /&gt;
&lt;br /&gt;
===Kommentare über mehrere Zeilen===&lt;br /&gt;
&lt;br /&gt;
 /* Dieser &lt;br /&gt;
    Kommentar&lt;br /&gt;
    erstreckt &lt;br /&gt;
    sich &lt;br /&gt;
    über&lt;br /&gt;
    mehrere&lt;br /&gt;
    Zeilen.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich: in Opal werden Kommentare mit -- eingeführt.&lt;br /&gt;
&lt;br /&gt;
=== Javadoc-Kommentare ===&lt;br /&gt;
Um Programme zu dokumentieren gibt es in Java ein Tool: Javadoc. Damit lassen sich HTML-Seiten generieren, die informationen über eure Methoden und Klassen beinhalten.&lt;br /&gt;
&lt;br /&gt;
 /**&lt;br /&gt;
  Dies ist ein Javadoc-Kommentar &lt;br /&gt;
  und erscheint später in eurer Dokumentation.&lt;br /&gt;
  Was es für Optionen gibt, fragt eure Tutoren ;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
== Datentypen (Variablen) ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Typ &lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Speicherbedarf&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Bereich&lt;br /&gt;
|- &lt;br /&gt;
|void&lt;br /&gt;
|0 Byte&lt;br /&gt;
|keiner&lt;br /&gt;
|- &lt;br /&gt;
|boolean&lt;br /&gt;
|1 Byte&lt;br /&gt;
|true, false&lt;br /&gt;
|-&lt;br /&gt;
|int&lt;br /&gt;
|4 Byte&lt;br /&gt;
| -2.147.483.648 bis 2.147.483.647&lt;br /&gt;
|- &lt;br /&gt;
|short&lt;br /&gt;
|2 Byte&lt;br /&gt;
| -32.768 bis 32.787&lt;br /&gt;
|- &lt;br /&gt;
|long&lt;br /&gt;
|8 Byte&lt;br /&gt;
| -9.223.372.036.854.775.808L bis 9.223.372.036.854.775.807L&lt;br /&gt;
|- &lt;br /&gt;
|byte&lt;br /&gt;
|1 Byte&lt;br /&gt;
| -128 bis 127&lt;br /&gt;
|- &lt;br /&gt;
|float&lt;br /&gt;
|4 Byte&lt;br /&gt;
| +/-3,40282347E+38F&lt;br /&gt;
|- &lt;br /&gt;
|double&lt;br /&gt;
|8 Byte&lt;br /&gt;
| +/-1,79769313486231570E+308&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Boolsche Operatoren ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Operator&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Beispiel&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Ergebnis des Beispiels&lt;br /&gt;
|- &lt;br /&gt;
| ==  &lt;br /&gt;
&#039;&#039;(gleich)&#039;&#039;&lt;br /&gt;
| 4 == 9&lt;br /&gt;
| false&lt;br /&gt;
|-&lt;br /&gt;
| !=  &lt;br /&gt;
&#039;&#039;(ungleich)&#039;&#039;&lt;br /&gt;
| 4 != 8&lt;br /&gt;
| true&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&amp;amp;  &lt;br /&gt;
&#039;&#039;(logisches UND)&#039;&#039;&lt;br /&gt;
| false &amp;amp;&amp;amp; true&lt;br /&gt;
| false, es wird erst der linke Ausdruck ausgewertet. Wenn die Auswertung false ergibt, wird der rechte Ausdruck nicht mehr geprüft, da das Ergebnis nicht mehr true werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
&#039;&#039;(logisches ODER)&#039;&#039;&lt;br /&gt;
| true &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; false&lt;br /&gt;
| true,  es wird erst der linke Ausdruck ausgewertet. Wenn die Auswertung true ergibt, wird der rechte Ausdruck nicht mehr geprüft, da das Ergebnis nicht mehr false werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;, &amp;lt;=, &amp;gt;, &amp;gt;=, &amp;lt;&amp;gt;&lt;br /&gt;
| 1 &amp;lt; 3  &#039;&#039;(hier exempalrisch nur eins)&#039;&#039;&lt;br /&gt;
| true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bitoperatoren ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Operator&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Beschreibung&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&lt;br /&gt;
| AND&lt;br /&gt;
| Wie das logische UND, jedoch werden auf jeden Fall beide Seiten ausgewertet.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| OR&lt;br /&gt;
| Wie das logische ODER, jedoch werden auf jeden Fall beide Seiten ausgewertet.&lt;br /&gt;
|-&lt;br /&gt;
| ^&lt;br /&gt;
| XOR&lt;br /&gt;
| Exklusives ODER&lt;br /&gt;
|-&lt;br /&gt;
| ~&lt;br /&gt;
| NOT&lt;br /&gt;
| Negation des Wertes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Konstanten ==&lt;br /&gt;
* In Java werden Konstanten mit dem Schlüsselwort &#039;&#039;&#039;final&#039;&#039;&#039; bezeichnet. In Java gibt es die Konvention Konstanten komplett groß zu schreiben:&lt;br /&gt;
&lt;br /&gt;
 final double PI = 3.14;&lt;br /&gt;
&lt;br /&gt;
== Zuweisungen und Initialisierungen ==&lt;br /&gt;
Wenn man eine Variable erstellt und sie mit Werten füllen will, wird man auf folgende Syntax stoßen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Datentyp&#039;&#039; Variablenname = &#039;&#039;Initialisierungswert&#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei Möglichkeiten diese Aktion durchzuführen:&lt;br /&gt;
* lange Variante:&lt;br /&gt;
 int zahl;&lt;br /&gt;
 zahl = 23;&lt;br /&gt;
&lt;br /&gt;
* kurze Variante:&lt;br /&gt;
 int zahl = 23;&lt;br /&gt;
&lt;br /&gt;
= if-Anweisung =&lt;br /&gt;
* Die einfachste Variante:&lt;br /&gt;
&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Zusätlich hat diese Variante einen alternativen Anweisungsblock. Wenn &#039;&#039;condition&#039;&#039; nicht erfüllt gehe in den &#039;&#039;else&#039;&#039;-Zweig und führe dort die Anweisungen aus.&lt;br /&gt;
&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 } else {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
	&lt;br /&gt;
* Natürlich lassen sich beide Varianten schachteln. Man kann also auf zwei Bedingungen prüfen und bei nicht Eintreffen in den &#039;&#039;else&#039;&#039;-Zweig gehen.&lt;br /&gt;
		&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 } else if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;			&lt;br /&gt;
 } else {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;		&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Schleifen =&lt;br /&gt;
== for-Schleife ==&lt;br /&gt;
* Um über Array&#039;s zu wandern bietet sich die for-Schleife an. Als erstes in der Klammer muß eine Laufvariable deklariert und mit einem Wert initialisiert werden (hier int i= 0). Danach muß eine Bedingung erfüllen, um festzulegen bis wann die Schleife ausgeführt wird (i &amp;lt; 10). Als letztes muß die Laufvariable verändert werden, so daß irgendwann der Abbruch eintritt (i++).&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
 &lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== while-Schleife ==&lt;br /&gt;
* Die while-Schleife wird meistens dafür benutzt, Anweisungen auszuführen bis irgendetwas eintrifft (z.B. EOF -End Of File). Für Arrays sollte man die for-Schleife nehmen. Die while-Schleife lässt sich auch als for-Schleife schreiben.&lt;br /&gt;
&lt;br /&gt;
 while (condition) {&lt;br /&gt;
     &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= switch-case =&lt;br /&gt;
* Wenn man verschiedene Werte abfangen möchte, wie zum Beispiel verschiedene Zahlen (bei einem Menü). Gehen wir mal davon aus, daß wir drei Menüeinträge haben: &lt;br /&gt;
# &#039;&#039;1&#039;&#039;&lt;br /&gt;
# &#039;&#039;2&#039;&#039;&lt;br /&gt;
# &#039;&#039;0&#039;&#039; &lt;br /&gt;
&#039;&#039;1&#039;&#039; gibt die Zahl &#039;&#039;&#039;1&#039;&#039;&#039;, &#039;&#039;2&#039;&#039; gibt die Zahl &#039;&#039;&#039;2&#039;&#039;&#039; aus und &#039;&#039;0&#039;&#039; beendet das Programm, dann ist key zum Beispiel ein &#039;&#039;&#039;int&#039;&#039;&#039; und &#039;&#039;&#039;value&#039;&#039;&#039; würde den einzelnen Menüpunkten entsprechen. Das &#039;&#039;break&#039;&#039; bewirkt ein raussprigen aus dem switch-Konstrukt. Würde man das &#039;&#039;break&#039;&#039; weglassen, würden sämtliche Anweisungen die direkt darunter folgen, ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
 switch (key) {&lt;br /&gt;
    case value: {&lt;br /&gt;
       &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
       break;&lt;br /&gt;
    }&lt;br /&gt;
    default: {&lt;br /&gt;
       &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
       break;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Grundgerüst eines Javaprogramms=&lt;br /&gt;
&lt;br /&gt;
Da der Programmierer vom Kopieren lebt, schreibt er einmal eine Schablone und benutzt sie immer wieder, frei nach dem Motto: Man muß das Rad nicht zweimal erfinden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So sieht zum Beispiel ein simples Javaprogramm ohne Handlung aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 public class Klassenname {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param args&lt;br /&gt;
 	 */&lt;br /&gt;
 	public static void main(String[] args) {&lt;br /&gt;
 		// TODO Anweisungen&lt;br /&gt;
 &lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erläuterungen:&#039;&#039;&#039;&lt;br /&gt;
@param ist für das Dokumentationssystem Javadoc, wird im Javakurs vielleicht angesprochen, sollte aber erstmal zweitrangig sein. Dennoch ist Dokumentation wichtiger als der eigentliche Code und deshalb hier erwähnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Funktionen (Methoden) =&lt;br /&gt;
In Java programmiert man meistens Objektorientiert, es sei denn man belegt Info2. Funktionen heißen bei Java Methoden und Methoden sind Objekten zugeordnet, es sei denn man programmiert nicht Objektorientiert.&lt;br /&gt;
Eine Methode hat immer folgenden Aufbau:&lt;br /&gt;
&lt;br /&gt;
 Spezialoption &#039;&#039;Veröffentlichungsart&#039;&#039; &#039;&#039;&#039;Rückgabewert&#039;&#039;&#039; Funktionsname &#039;&#039;&#039;(&#039;&#039;&#039; Parametertyp &#039;&#039;Parametername&#039;&#039; &#039;&#039;&#039;)&#039;&#039;&#039; {&lt;br /&gt;
 &lt;br /&gt;
    Methodenrumpf_mit_Anweisungen;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Spezialoption:&lt;br /&gt;
* static&lt;br /&gt;
* final&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Veröffentlichungsart&#039;&#039;:&lt;br /&gt;
* public&lt;br /&gt;
* protected&lt;br /&gt;
* private&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Spezialoption&amp;quot; und &amp;quot;Veröffentlichungsart&amp;quot; werden in Java unter dem Begriff &#039;&#039;Modifier&#039;&#039; zusammengefasst. Eine Auflistung der Modifier gibt es [http://www.javacamp.org/javaI/modifier.html hier].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rückgabewert&#039;&#039;&#039;:&lt;br /&gt;
* sämtliche oben aufgeführte Datentypen &lt;br /&gt;
* eigene Datentypen&lt;br /&gt;
&lt;br /&gt;
Funktionsname:&lt;br /&gt;
* einen für die Funktion bezeichnenden Namen aus Buchstaben, Zahlen und dem Underscore ( &#039;&#039;_&#039;&#039; )&lt;br /&gt;
* darf nicht mit eine Zahl beginnen&lt;br /&gt;
&lt;br /&gt;
Parametertyp:&lt;br /&gt;
* wie &#039;&#039;&#039;Rückgabewert&#039;&#039;&#039;, siehe oben&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Parametername&#039;&#039;:&lt;br /&gt;
* wie Funtionsname, siehe oben&lt;br /&gt;
&lt;br /&gt;
= Ausgabe =&lt;br /&gt;
* Um Fehler finden zu können oder Ausgaben auf der Konsole zu machen, gibt es in Java &#039;&#039;print&#039;&#039;-Funktionen:&lt;br /&gt;
&lt;br /&gt;
 System.out.print(&amp;quot;Irgend ein String.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Gibt &#039;&#039;Irgend ein String.&#039;&#039; auf der Konsole aus ohne einen Zeilenumbruch.&lt;br /&gt;
&lt;br /&gt;
 System.out.println(&amp;quot;Noch ein String.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Gibt &#039;&#039;Noch ein String.&#039;&#039; auf der Konsole aus allerdings diesmal mit einem Zeilenumbruch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Klassen =&lt;br /&gt;
&lt;br /&gt;
== Einfache Datenklasse ==&lt;br /&gt;
&lt;br /&gt;
Manchmal braucht man neue Datentypen, zum Beispiel um eine Farbe oder einen Punkt zu speichern und &lt;br /&gt;
damit arbeiten zu können.&lt;br /&gt;
&lt;br /&gt;
Die kann dann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
=== Eine Punktklasse ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Punkt{&lt;br /&gt;
 int x;&lt;br /&gt;
 int y;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Farbenklasse ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Farbe{&lt;br /&gt;
 double rotanteil;&lt;br /&gt;
 double gruenanteil;&lt;br /&gt;
 double blauanteil;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese beiden Klassen kann man so schon tatsächlich verwenden. Allerdings sind sie alles andere &lt;br /&gt;
als objektorientiert. Sie sind simple Datencontainer und wenn man sie verwenden will, muss man alles über ihren &lt;br /&gt;
internen Aufbau wissen, wie folgendes Programm zeigt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class PundF{&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args){&lt;br /&gt;
    &lt;br /&gt;
        Farbe farbe1 = new Farbe();&lt;br /&gt;
&lt;br /&gt;
        farbe1.rotanteil = 0.5;&lt;br /&gt;
        farbe1.blauanteil = 0.5;&lt;br /&gt;
        farbe1.gruenanteil = 0.5;&lt;br /&gt;
&lt;br /&gt;
        Punkt p = new Punkt();&lt;br /&gt;
&lt;br /&gt;
        p.x=123;&lt;br /&gt;
        p.y=321;&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;
Das ist nicht sehr praktisch, weil man sich vorstellen kann, dass man die Implementierung,&lt;br /&gt;
also den internen Aufbau z.B. des Punktes, ändern muss. Vielleicht verwendet man statt der&lt;br /&gt;
kartesischen Koordinaten nun Polarkoordinaten, oder man muss die Farben in einem anderen&lt;br /&gt;
Farbraum speichern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit jemand, der diese Klassen benutzt, sich nicht darum kuemmern braucht, wie die Daten intern gespeichert werden,&lt;br /&gt;
benutzt man zum Zugriff auf die Daten sogenannte &#039;&#039;getter&#039;&#039;- und &#039;&#039;setter&#039;&#039;-Methoden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eine bessere Punktklasse - getter und setter ===&lt;br /&gt;
&lt;br /&gt;
Man kann die Punktklasse nun wie folgt erweitern:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Punkt{&lt;br /&gt;
   private int x;&lt;br /&gt;
   private int y;&lt;br /&gt;
&lt;br /&gt;
   public int getX(){&lt;br /&gt;
    return this.x;&lt;br /&gt;
   }&lt;br /&gt;
   public int getY(){&lt;br /&gt;
    return this.y;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void setX(int arg){&lt;br /&gt;
    this.x = arg;&lt;br /&gt;
   }&lt;br /&gt;
   public void setY(int arg){&lt;br /&gt;
    this.y = arg;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huch - was soll denn dieses ganze &#039;&#039;&#039;private&#039;&#039;&#039; und &#039;&#039;&#039;public&#039;&#039;&#039; ploetzlich?!&lt;br /&gt;
&lt;br /&gt;
Eigentlich ist das relativ einfach. Die Daten haben wir &#039;&#039;private&#039;&#039; deklariert, dass heisst, wir dürfen nur&lt;br /&gt;
noch innerhalb unserer Klasse darauf zugreifen. Damit wird verhindert, dass jemand von aussen versucht &lt;br /&gt;
direkt auf die x-Koordinate zuzugreifen, die ja vielleicht irgendwann gar nicht mehr direkt vorhanden ist,&lt;br /&gt;
wenn wir Polarkoordinaten verwenden:&lt;br /&gt;
&lt;br /&gt;
=== Punkt mit Polarkoordinaten ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Punkt{&lt;br /&gt;
   private double length;&lt;br /&gt;
   private double angle;&lt;br /&gt;
&lt;br /&gt;
   public int getX(){&lt;br /&gt;
    return ...&lt;br /&gt;
   }&lt;br /&gt;
   public int getY(){&lt;br /&gt;
    return ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void setX(int arg){&lt;br /&gt;
    this.length = ... &lt;br /&gt;
   }&lt;br /&gt;
   public void setY(int arg){&lt;br /&gt;
    this.angle = ...&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;
Der Vorteil: Alle anderen Programmteile und Klassen koennen wie bisher mit Hilfe der Getter und Setter &lt;br /&gt;
an die X und Y-Koordinaten kommen, obwohl intern nur Polarkoordinaten vorliegen. Dieses Beispiel &lt;br /&gt;
ist nicht vollständig, die Mathematik wurde absichtlich weggelassen um Verwirrung zu verhindern ;)&lt;br /&gt;
[Ausserdem braucht man fuer die Überführung in Polarkoordinaten immer x und y Werte, hat den Sonderfall,&lt;br /&gt;
dass x nicht 0 sein darf, etc...]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konstruktor ==&lt;br /&gt;
&lt;br /&gt;
Ein Konstruktor ist eine besondere Methode, die beim erzeugen eines neuen Objektes (aus einer Klasse) aufgerufen&lt;br /&gt;
wird. Damit kann man Variables initialisieren/mit Werten vorbelegen, etc.&lt;br /&gt;
&lt;br /&gt;
Für unsere Punktklasse sieht ein Konstruktor zum Beispiel so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
public Punkt(int x, int y){&lt;br /&gt;
    this.x = x;&lt;br /&gt;
    this.y = y;&lt;br /&gt;
}   &lt;br /&gt;
...&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Schluesselwort this bringt damit zum Ausdruck, dass wir nicht auf die Parameter des&lt;br /&gt;
Konstruktors zugreifen wollen, sondern auf die Attribute dieser (this) Klasse.&lt;br /&gt;
&lt;br /&gt;
Im Zusammenhang sieht das dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Punkt{&lt;br /&gt;
   private int x;&lt;br /&gt;
   private int y;&lt;br /&gt;
&lt;br /&gt;
   // Konstruktor:&lt;br /&gt;
   public Punkt(int x, int y){&lt;br /&gt;
    this.x = x;&lt;br /&gt;
    this.y = y;&lt;br /&gt;
   }   &lt;br /&gt;
&lt;br /&gt;
   public int getX(){&lt;br /&gt;
    return this.x;&lt;br /&gt;
   }&lt;br /&gt;
   public int getY(){&lt;br /&gt;
    return this.y;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void setX(int arg){&lt;br /&gt;
    this.x = arg;&lt;br /&gt;
   }&lt;br /&gt;
   public void setY(int arg){&lt;br /&gt;
    this.y = arg;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Anwendung ist ebenfalls relativ einfach:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   Punkt p = new Punkt(5,5);&lt;br /&gt;
   Punkt ursprung = new Punkt(0,0);&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Komplexere Klasse ==&lt;br /&gt;
&lt;br /&gt;
Java ist ja eine Objektorientierte Sprache, bzw. unterstützt Objektorientiertes Programmieren.&lt;br /&gt;
Wodurch zeichnet sich das aus? &lt;br /&gt;
&lt;br /&gt;
Ein Effekt ist, dass eine Klasse alles mitbringt, um mit ihr zu arbeiten, man als Anwender aber nichts über die &lt;br /&gt;
Innereien der Klasse wissen muss. &lt;br /&gt;
&lt;br /&gt;
Im folgenden soll eine Klasse vorgestellt werden, die ein Postpaket darstellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Postpaket{&lt;br /&gt;
&lt;br /&gt;
  private int breite;  // in cm&lt;br /&gt;
  private int hoehe;   // in cm&lt;br /&gt;
  private int tiefe;   // in cm&lt;br /&gt;
&lt;br /&gt;
  private int gewicht; // in Gramm&lt;br /&gt;
&lt;br /&gt;
  // Kontruktor, um beim erzeugen eines Paketes&lt;br /&gt;
  // direkt alle Werte vorzubelegen&lt;br /&gt;
  public Postpaket(int breite, int hoehe, int tiefe){&lt;br /&gt;
      this.breite = breite;&lt;br /&gt;
      this.hoehe  = hoehe;&lt;br /&gt;
      this.tiefe  = tiefe;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int getWeight(){&lt;br /&gt;
      return this.gewicht;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setWeight(int weight){&lt;br /&gt;
      this.gewicht = weight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // groesse in Kubikzentimeter&lt;br /&gt;
  public int getVolume(){&lt;br /&gt;
      return this.breite * this.hoehe * this.tiefe;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  // spezifisches Gewicht in Gramm Pro Kubikzentimeter&lt;br /&gt;
  public double getSpecSize ()&lt;br /&gt;
  {&lt;br /&gt;
    // wir muessen hier vol als double sichern, da sonst&lt;br /&gt;
    // von Java automatisch eine Integer-Division&lt;br /&gt;
    // durchgeführt wird, so dass die Nachkommastellen abgeschnitten werden!&lt;br /&gt;
    double vol = ( this.breite * this.hoehe * this.tiefe);&lt;br /&gt;
    return (this.gewicht / vol );&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;
Wie verwendet man diese Klasse nun?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Programm{&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args){&lt;br /&gt;
&lt;br /&gt;
        Postpaket paket = new Postpaket(340,123,240);&lt;br /&gt;
        &lt;br /&gt;
        paket.setWeight(1420);&lt;br /&gt;
&lt;br /&gt;
        // wir haben jetzt ein Paket mit Gewicht...&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;Das spezifische Gewicht des Pakets: &amp;quot; + paket.getSpecSize());&lt;br /&gt;
        System.out.println(&amp;quot;Das Volumen des Pakets            : &amp;quot; + paket.getVolume());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>84.152.17.26</name></author>
	</entry>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Java_Kurzreferenz&amp;diff=7246</id>
		<title>Javakurs2006/Java Kurzreferenz</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=Javakurs2006/Java_Kurzreferenz&amp;diff=7246"/>
		<updated>2006-06-03T04:14:16Z</updated>

		<summary type="html">&lt;p&gt;84.152.17.26: /* Bitoperatoren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hier befindet sich eine kleine &#039;&#039;&#039;Referenz für Java&#039;&#039;&#039; speziell für den Javakurs der Freitagsrunde.&lt;br /&gt;
&lt;br /&gt;
== Kommentare ==&lt;br /&gt;
Ein &#039;&#039;&#039;Kommentar&#039;&#039;&#039; ist ein Abschnitt des Java-Codes, der vom Java-Compiler ignoriert wird.  Man kann in ein Kommentar also schreiben was man will.  Kommentare sind nützlich, um den Quellcode zu dokumentieren.  &lt;br /&gt;
&lt;br /&gt;
In Java gibt es zwei Arten von Kommentaren: &lt;br /&gt;
&lt;br /&gt;
===Kommentare über eine Zeile===&lt;br /&gt;
&lt;br /&gt;
 // Diese ganze Zeile wird vom Compiler ignoriert.&lt;br /&gt;
 int x= 5;  // Dieser  Kommentar beginnt mit »//«.  Alles davor wird vom Compiler nicht ignoriert.&lt;br /&gt;
&lt;br /&gt;
===Kommentare über mehrere Zeilen===&lt;br /&gt;
&lt;br /&gt;
 /* Dieser &lt;br /&gt;
    Kommentar&lt;br /&gt;
    erstreckt &lt;br /&gt;
    sich &lt;br /&gt;
    über&lt;br /&gt;
    mehrere&lt;br /&gt;
    Zeilen.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Zum Vergleich: in Opal werden Kommentare mit -- eingeführt.&lt;br /&gt;
&lt;br /&gt;
=== Javadoc-Kommentare ===&lt;br /&gt;
Um Programme zu dokumentieren gibt es in Java ein Tool: Javadoc. Damit lassen sich HTML-Seiten generieren, die informationen über eure Methoden und Klassen beinhalten.&lt;br /&gt;
&lt;br /&gt;
 /**&lt;br /&gt;
  Dies ist ein Javadoc-Kommentar &lt;br /&gt;
  und erscheint später in eurer Dokumentation.&lt;br /&gt;
  Was es für Optionen gibt, fragt eure Tutoren ;)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
== Datentypen (Variablen) ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Typ &lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Speicherbedarf&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Bereich&lt;br /&gt;
|- &lt;br /&gt;
|void&lt;br /&gt;
|0 Byte&lt;br /&gt;
|keiner&lt;br /&gt;
|- &lt;br /&gt;
|boolean&lt;br /&gt;
|1 Byte&lt;br /&gt;
|true, false&lt;br /&gt;
|-&lt;br /&gt;
|int&lt;br /&gt;
|4 Byte&lt;br /&gt;
| -2.147.483.648 bis 2.147.483.647&lt;br /&gt;
|- &lt;br /&gt;
|short&lt;br /&gt;
|2 Byte&lt;br /&gt;
| -32.768 bis 32.787&lt;br /&gt;
|- &lt;br /&gt;
|long&lt;br /&gt;
|8 Byte&lt;br /&gt;
| -9.223.372.036.854.775.808L bis 9.223.372.036.854.775.807L&lt;br /&gt;
|- &lt;br /&gt;
|byte&lt;br /&gt;
|1 Byte&lt;br /&gt;
| -128 bis 127&lt;br /&gt;
|- &lt;br /&gt;
|float&lt;br /&gt;
|4 Byte&lt;br /&gt;
| +/-3,40282347E+38F&lt;br /&gt;
|- &lt;br /&gt;
|double&lt;br /&gt;
|8 Byte&lt;br /&gt;
| +/-1,79769313486231570E+308&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Boolsche Operatoren ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Operator&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Beispiel&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Ergebnis des Beispiels&lt;br /&gt;
|- &lt;br /&gt;
| ==  &lt;br /&gt;
&#039;&#039;(gleich)&#039;&#039;&lt;br /&gt;
| 4 == 9&lt;br /&gt;
| false&lt;br /&gt;
|-&lt;br /&gt;
| !=  &lt;br /&gt;
&#039;&#039;(ungleich)&#039;&#039;&lt;br /&gt;
| 4 != 8&lt;br /&gt;
| true&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&amp;amp;  &lt;br /&gt;
&#039;&#039;(logisches UND)&#039;&#039;&lt;br /&gt;
| false &amp;amp;&amp;amp; true&lt;br /&gt;
| false, es wird erst der linke Ausdruck ausgewertet. Wenn die Auswertung false ergibt, wird der rechte Ausdruck nicht mehr geprüft, da das Ergebnis nicht mehr true werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
&#039;&#039;(logisches ODER)&#039;&#039;&lt;br /&gt;
| true &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; false&lt;br /&gt;
| true,  es wird erst der linke Ausdruck ausgewertet. Wenn die Auswertung true ergibt, wird der rechte Ausdruck nicht mehr geprüft, da das Ergebnis nicht mehr false werden kann.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;, &amp;lt;=, &amp;gt;, &amp;gt;=, &amp;lt;&amp;gt;&lt;br /&gt;
| 1 &amp;lt; 3  &#039;&#039;(hier exempalrisch nur eins)&#039;&#039;&lt;br /&gt;
| true&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bitoperatoren ==&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; width=&amp;quot;80%&amp;quot; rules=&amp;quot;all&amp;quot; style=&amp;quot;margin:1em 1em 1em 0; border:solid 1px #AAAAAA; border-collapse:collapse; background-color:#F9F9F9; font-size:95%; empty-cells:show;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Operator&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Beschreibung&lt;br /&gt;
! style=&amp;quot;background-color:#ABCDEF;&amp;quot; | Erklärung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;&lt;br /&gt;
| AND&lt;br /&gt;
| Wie das logische UND, jedoch werden auf jeden Fall beide Seiten ausgewertet.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| OR&lt;br /&gt;
| Wie das logische ODER, jedoch werden auf jeden Fall beide Seiten ausgewertet.&lt;br /&gt;
|-&lt;br /&gt;
| ^&lt;br /&gt;
| XOR&lt;br /&gt;
| Exklusives Oder&lt;br /&gt;
|-&lt;br /&gt;
| ~&lt;br /&gt;
| NOT&lt;br /&gt;
| Negation des Wertes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Konstanten ==&lt;br /&gt;
* In Java werden Konstanten mit dem Schlüsselwort &#039;&#039;&#039;final&#039;&#039;&#039; bezeichnet. In Java gibt es die Konvention Konstanten komplett groß zu schreiben:&lt;br /&gt;
&lt;br /&gt;
 final double PI = 3.14;&lt;br /&gt;
&lt;br /&gt;
== Zuweisungen und Initialisierungen ==&lt;br /&gt;
Wenn man eine Variable erstellt und sie mit Werten füllen will, wird man auf folgende Syntax stoßen:&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;Datentyp&#039;&#039; Variablenname = &#039;&#039;Initialisierungswert&#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
Es gibt zwei Möglichkeiten diese Aktion durchzuführen:&lt;br /&gt;
* lange Variante:&lt;br /&gt;
 int zahl;&lt;br /&gt;
 zahl = 23;&lt;br /&gt;
&lt;br /&gt;
* kurze Variante:&lt;br /&gt;
 int zahl = 23;&lt;br /&gt;
&lt;br /&gt;
= if-Anweisung =&lt;br /&gt;
* Die einfachste Variante:&lt;br /&gt;
&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Zusätlich hat diese Variante einen alternativen Anweisungsblock. Wenn &#039;&#039;condition&#039;&#039; nicht erfüllt gehe in den &#039;&#039;else&#039;&#039;-Zweig und führe dort die Anweisungen aus.&lt;br /&gt;
&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 } else {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
	&lt;br /&gt;
* Natürlich lassen sich beide Varianten schachteln. Man kann also auf zwei Bedingungen prüfen und bei nicht Eintreffen in den &#039;&#039;else&#039;&#039;-Zweig gehen.&lt;br /&gt;
		&lt;br /&gt;
 if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;	&lt;br /&gt;
 } else if (condition) {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;			&lt;br /&gt;
 } else {&lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;		&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Schleifen =&lt;br /&gt;
== for-Schleife ==&lt;br /&gt;
* Um über Array&#039;s zu wandern bietet sich die for-Schleife an. Als erstes in der Klammer muß eine Laufvariable deklariert und mit einem Wert initialisiert werden (hier int i= 0). Danach muß eine Bedingung erfüllen, um festzulegen bis wann die Schleife ausgeführt wird (i &amp;lt; 10). Als letztes muß die Laufvariable verändert werden, so daß irgendwann der Abbruch eintritt (i++).&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
 &lt;br /&gt;
    &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== while-Schleife ==&lt;br /&gt;
* Die while-Schleife wird meistens dafür benutzt, Anweisungen auszuführen bis irgendetwas eintrifft (z.B. EOF -End Of File). Für Arrays sollte man die for-Schleife nehmen. Die while-Schleife lässt sich auch als for-Schleife schreiben.&lt;br /&gt;
&lt;br /&gt;
 while (condition) {&lt;br /&gt;
     &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= switch-case =&lt;br /&gt;
* Wenn man verschiedene Werte abfangen möchte, wie zum Beispiel verschiedene Zahlen (bei einem Menü). Gehen wir mal davon aus, daß wir drei Menüeinträge haben: &lt;br /&gt;
# &#039;&#039;1&#039;&#039;&lt;br /&gt;
# &#039;&#039;2&#039;&#039;&lt;br /&gt;
# &#039;&#039;0&#039;&#039; &lt;br /&gt;
&#039;&#039;1&#039;&#039; gibt die Zahl &#039;&#039;&#039;1&#039;&#039;&#039;, &#039;&#039;2&#039;&#039; gibt die Zahl &#039;&#039;&#039;2&#039;&#039;&#039; aus und &#039;&#039;0&#039;&#039; beendet das Programm, dann ist key zum Beispiel ein &#039;&#039;&#039;int&#039;&#039;&#039; und &#039;&#039;&#039;value&#039;&#039;&#039; würde den einzelnen Menüpunkten entsprechen. Das &#039;&#039;break&#039;&#039; bewirkt ein raussprigen aus dem switch-Konstrukt. Würde man das &#039;&#039;break&#039;&#039; weglassen, würden sämtliche Anweisungen die direkt darunter folgen, ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
 switch (key) {&lt;br /&gt;
    case value: {&lt;br /&gt;
       &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
       break;&lt;br /&gt;
    }&lt;br /&gt;
    default: {&lt;br /&gt;
       &#039;&#039;Anweisungen;&#039;&#039;&lt;br /&gt;
       break;&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
= Grundgerüst eines Javaprogramms=&lt;br /&gt;
&lt;br /&gt;
Da der Programmierer vom Kopieren lebt, schreibt er einmal eine Schablone und benutzt sie immer wieder, frei nach dem Motto: Man muß das Rad nicht zweimal erfinden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So sieht zum Beispiel ein simples Javaprogramm ohne Handlung aus:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 public class Klassenname {&lt;br /&gt;
 &lt;br /&gt;
 	/**&lt;br /&gt;
 	 * @param args&lt;br /&gt;
 	 */&lt;br /&gt;
 	public static void main(String[] args) {&lt;br /&gt;
 		// TODO Anweisungen&lt;br /&gt;
 &lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erläuterungen:&#039;&#039;&#039;&lt;br /&gt;
@param ist für das Dokumentationssystem Javadoc, wird im Javakurs vielleicht angesprochen, sollte aber erstmal zweitrangig sein. Dennoch ist Dokumentation wichtiger als der eigentliche Code und deshalb hier erwähnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Funktionen (Methoden) =&lt;br /&gt;
In Java programmiert man meistens Objektorientiert, es sei denn man belegt Info2. Funktionen heißen bei Java Methoden und Methoden sind Objekten zugeordnet, es sei denn man programmiert nicht Objektorientiert.&lt;br /&gt;
Eine Methode hat immer folgenden Aufbau:&lt;br /&gt;
&lt;br /&gt;
 Spezialoption &#039;&#039;Veröffentlichungsart&#039;&#039; &#039;&#039;&#039;Rückgabewert&#039;&#039;&#039; Funktionsname &#039;&#039;&#039;(&#039;&#039;&#039; Parametertyp &#039;&#039;Parametername&#039;&#039; &#039;&#039;&#039;)&#039;&#039;&#039; {&lt;br /&gt;
 &lt;br /&gt;
    Methodenrumpf_mit_Anweisungen;&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Spezialoption:&lt;br /&gt;
* static&lt;br /&gt;
* final&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Veröffentlichungsart&#039;&#039;:&lt;br /&gt;
* public&lt;br /&gt;
* protected&lt;br /&gt;
* private&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Spezialoption&amp;quot; und &amp;quot;Veröffentlichungsart&amp;quot; werden in Java unter dem Begriff &#039;&#039;Modifier&#039;&#039; zusammengefasst. Eine Auflistung der Modifier gibt es [http://www.javacamp.org/javaI/modifier.html hier].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rückgabewert&#039;&#039;&#039;:&lt;br /&gt;
* sämtliche oben aufgeführte Datentypen &lt;br /&gt;
* eigene Datentypen&lt;br /&gt;
&lt;br /&gt;
Funktionsname:&lt;br /&gt;
* einen für die Funktion bezeichnenden Namen aus Buchstaben, Zahlen und dem Underscore ( &#039;&#039;_&#039;&#039; )&lt;br /&gt;
* darf nicht mit eine Zahl beginnen&lt;br /&gt;
&lt;br /&gt;
Parametertyp:&lt;br /&gt;
* wie &#039;&#039;&#039;Rückgabewert&#039;&#039;&#039;, siehe oben&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Parametername&#039;&#039;:&lt;br /&gt;
* wie Funtionsname, siehe oben&lt;br /&gt;
&lt;br /&gt;
= Ausgabe =&lt;br /&gt;
* Um Fehler finden zu können oder Ausgaben auf der Konsole zu machen, gibt es in Java &#039;&#039;print&#039;&#039;-Funktionen:&lt;br /&gt;
&lt;br /&gt;
 System.out.print(&amp;quot;Irgend ein String.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Gibt &#039;&#039;Irgend ein String.&#039;&#039; auf der Konsole aus ohne einen Zeilenumbruch.&lt;br /&gt;
&lt;br /&gt;
 System.out.println(&amp;quot;Noch ein String.&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Gibt &#039;&#039;Noch ein String.&#039;&#039; auf der Konsole aus allerdings diesmal mit einem Zeilenumbruch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Klassen =&lt;br /&gt;
&lt;br /&gt;
== Einfache Datenklasse ==&lt;br /&gt;
&lt;br /&gt;
Manchmal braucht man neue Datentypen, zum Beispiel um eine Farbe oder einen Punkt zu speichern und &lt;br /&gt;
damit arbeiten zu können.&lt;br /&gt;
&lt;br /&gt;
Die kann dann wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
=== Eine Punktklasse ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Punkt{&lt;br /&gt;
 int x;&lt;br /&gt;
 int y;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Eine Farbenklasse ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Farbe{&lt;br /&gt;
 double rotanteil;&lt;br /&gt;
 double gruenanteil;&lt;br /&gt;
 double blauanteil;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Diese beiden Klassen kann man so schon tatsächlich verwenden. Allerdings sind sie alles andere &lt;br /&gt;
als objektorientiert. Sie sind simple Datencontainer und wenn man sie verwenden will, muss man alles über ihren &lt;br /&gt;
internen Aufbau wissen, wie folgendes Programm zeigt:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class PundF{&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args){&lt;br /&gt;
    &lt;br /&gt;
        Farbe farbe1 = new Farbe();&lt;br /&gt;
&lt;br /&gt;
        farbe1.rotanteil = 0.5;&lt;br /&gt;
        farbe1.blauanteil = 0.5;&lt;br /&gt;
        farbe1.gruenanteil = 0.5;&lt;br /&gt;
&lt;br /&gt;
        Punkt p = new Punkt();&lt;br /&gt;
&lt;br /&gt;
        p.x=123;&lt;br /&gt;
        p.y=321;&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;
Das ist nicht sehr praktisch, weil man sich vorstellen kann, dass man die Implementierung,&lt;br /&gt;
also den internen Aufbau z.B. des Punktes, ändern muss. Vielleicht verwendet man statt der&lt;br /&gt;
kartesischen Koordinaten nun Polarkoordinaten, oder man muss die Farben in einem anderen&lt;br /&gt;
Farbraum speichern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damit jemand, der diese Klassen benutzt, sich nicht darum kuemmern braucht, wie die Daten intern gespeichert werden,&lt;br /&gt;
benutzt man zum Zugriff auf die Daten sogenannte &#039;&#039;getter&#039;&#039;- und &#039;&#039;setter&#039;&#039;-Methoden:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Eine bessere Punktklasse - getter und setter ===&lt;br /&gt;
&lt;br /&gt;
Man kann die Punktklasse nun wie folgt erweitern:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Punkt{&lt;br /&gt;
   private int x;&lt;br /&gt;
   private int y;&lt;br /&gt;
&lt;br /&gt;
   public int getX(){&lt;br /&gt;
    return this.x;&lt;br /&gt;
   }&lt;br /&gt;
   public int getY(){&lt;br /&gt;
    return this.y;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void setX(int arg){&lt;br /&gt;
    this.x = arg;&lt;br /&gt;
   }&lt;br /&gt;
   public void setY(int arg){&lt;br /&gt;
    this.y = arg;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Huch - was soll denn dieses ganze &#039;&#039;&#039;private&#039;&#039;&#039; und &#039;&#039;&#039;public&#039;&#039;&#039; ploetzlich?!&lt;br /&gt;
&lt;br /&gt;
Eigentlich ist das relativ einfach. Die Daten haben wir &#039;&#039;private&#039;&#039; deklariert, dass heisst, wir dürfen nur&lt;br /&gt;
noch innerhalb unserer Klasse darauf zugreifen. Damit wird verhindert, dass jemand von aussen versucht &lt;br /&gt;
direkt auf die x-Koordinate zuzugreifen, die ja vielleicht irgendwann gar nicht mehr direkt vorhanden ist,&lt;br /&gt;
wenn wir Polarkoordinaten verwenden:&lt;br /&gt;
&lt;br /&gt;
=== Punkt mit Polarkoordinaten ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Punkt{&lt;br /&gt;
   private double length;&lt;br /&gt;
   private double angle;&lt;br /&gt;
&lt;br /&gt;
   public int getX(){&lt;br /&gt;
    return ...&lt;br /&gt;
   }&lt;br /&gt;
   public int getY(){&lt;br /&gt;
    return ...&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void setX(int arg){&lt;br /&gt;
    this.length = ... &lt;br /&gt;
   }&lt;br /&gt;
   public void setY(int arg){&lt;br /&gt;
    this.angle = ...&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;
Der Vorteil: Alle anderen Programmteile und Klassen koennen wie bisher mit Hilfe der Getter und Setter &lt;br /&gt;
an die X und Y-Koordinaten kommen, obwohl intern nur Polarkoordinaten vorliegen. Dieses Beispiel &lt;br /&gt;
ist nicht vollständig, die Mathematik wurde absichtlich weggelassen um Verwirrung zu verhindern ;)&lt;br /&gt;
[Ausserdem braucht man fuer die Überführung in Polarkoordinaten immer x und y Werte, hat den Sonderfall,&lt;br /&gt;
dass x nicht 0 sein darf, etc...]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konstruktor ==&lt;br /&gt;
&lt;br /&gt;
Ein Konstruktor ist eine besondere Methode, die beim erzeugen eines neuen Objektes (aus einer Klasse) aufgerufen&lt;br /&gt;
wird. Damit kann man Variables initialisieren/mit Werten vorbelegen, etc.&lt;br /&gt;
&lt;br /&gt;
Für unsere Punktklasse sieht ein Konstruktor zum Beispiel so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
public Punkt(int x, int y){&lt;br /&gt;
    this.x = x;&lt;br /&gt;
    this.y = y;&lt;br /&gt;
}   &lt;br /&gt;
...&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Schluesselwort this bringt damit zum Ausdruck, dass wir nicht auf die Parameter des&lt;br /&gt;
Konstruktors zugreifen wollen, sondern auf die Attribute dieser (this) Klasse.&lt;br /&gt;
&lt;br /&gt;
Im Zusammenhang sieht das dann wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Punkt{&lt;br /&gt;
   private int x;&lt;br /&gt;
   private int y;&lt;br /&gt;
&lt;br /&gt;
   // Konstruktor:&lt;br /&gt;
   public Punkt(int x, int y){&lt;br /&gt;
    this.x = x;&lt;br /&gt;
    this.y = y;&lt;br /&gt;
   }   &lt;br /&gt;
&lt;br /&gt;
   public int getX(){&lt;br /&gt;
    return this.x;&lt;br /&gt;
   }&lt;br /&gt;
   public int getY(){&lt;br /&gt;
    return this.y;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public void setX(int arg){&lt;br /&gt;
    this.x = arg;&lt;br /&gt;
   }&lt;br /&gt;
   public void setY(int arg){&lt;br /&gt;
    this.y = arg;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Anwendung ist ebenfalls relativ einfach:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   Punkt p = new Punkt(5,5);&lt;br /&gt;
   Punkt ursprung = new Punkt(0,0);&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Komplexere Klasse ==&lt;br /&gt;
&lt;br /&gt;
Java ist ja eine Objektorientierte Sprache, bzw. unterstützt Objektorientiertes Programmieren.&lt;br /&gt;
Wodurch zeichnet sich das aus? &lt;br /&gt;
&lt;br /&gt;
Ein Effekt ist, dass eine Klasse alles mitbringt, um mit ihr zu arbeiten, man als Anwender aber nichts über die &lt;br /&gt;
Innereien der Klasse wissen muss. &lt;br /&gt;
&lt;br /&gt;
Im folgenden soll eine Klasse vorgestellt werden, die ein Postpaket darstellt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Postpaket{&lt;br /&gt;
&lt;br /&gt;
  private int breite;  // in cm&lt;br /&gt;
  private int hoehe;   // in cm&lt;br /&gt;
  private int tiefe;   // in cm&lt;br /&gt;
&lt;br /&gt;
  private int gewicht; // in Gramm&lt;br /&gt;
&lt;br /&gt;
  // Kontruktor, um beim erzeugen eines Paketes&lt;br /&gt;
  // direkt alle Werte vorzubelegen&lt;br /&gt;
  public Postpaket(int breite, int hoehe, int tiefe){&lt;br /&gt;
      this.breite = breite;&lt;br /&gt;
      this.hoehe  = hoehe;&lt;br /&gt;
      this.tiefe  = tiefe;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int getWeight(){&lt;br /&gt;
      return this.gewicht;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public void setWeight(int weight){&lt;br /&gt;
      this.gewicht = weight;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // groesse in Kubikzentimeter&lt;br /&gt;
  public int getVolume(){&lt;br /&gt;
      return this.breite * this.hoehe * this.tiefe;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  // spezifisches Gewicht in Gramm Pro Kubikzentimeter&lt;br /&gt;
  public double getSpecSize ()&lt;br /&gt;
  {&lt;br /&gt;
    // wir muessen hier vol als double sichern, da sonst&lt;br /&gt;
    // von Java automatisch eine Integer-Division&lt;br /&gt;
    // durchgeführt wird, so dass die Nachkommastellen abgeschnitten werden!&lt;br /&gt;
    double vol = ( this.breite * this.hoehe * this.tiefe);&lt;br /&gt;
    return (this.gewicht / vol );&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;
Wie verwendet man diese Klasse nun?&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
class Programm{&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args){&lt;br /&gt;
&lt;br /&gt;
        Postpaket paket = new Postpaket(340,123,240);&lt;br /&gt;
        &lt;br /&gt;
        paket.setWeight(1420);&lt;br /&gt;
&lt;br /&gt;
        // wir haben jetzt ein Paket mit Gewicht...&lt;br /&gt;
&lt;br /&gt;
        System.out.println(&amp;quot;Das spezifische Gewicht des Pakets: &amp;quot; + paket.getSpecSize());&lt;br /&gt;
        System.out.println(&amp;quot;Das Volumen des Pakets            : &amp;quot; + paket.getVolume());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>84.152.17.26</name></author>
	</entry>
</feed>