Java Exzerpt

Kurze Informationen zum Thema

Eine Quellcode-Datei wird erstellt. Der javac-Compiler kompiliert diesen Quellcode in den kompilierten Bytecode. Der wird dann in einer virtuellen Java-Maschine ausgeführt.

Begriffe und Erläuterung

Arrays sind gut geeignet für Listen von Dingen. Damit ist ein schneller und wahlfreier Zugriff möglich. Jedes Element in einem Array ist eine Variable, entweder eine der elementaren Typen oder eine Referenzvariable.

Arrays sind immer Objekte.
Dabei spielt es keine Rolle, ob sie elementare Typen oder Objektreferenzen festhalten. Arrays können ein Arrayobjekt haben. Das Array ist nie ein elementarer Typ. Das Array kann Elemente haben, die elementare Typen sind.

Ein 'byte' kann in ein int-Array gesteckt werden, weil ein 'byte' immer in einen Becher mit int-Größe passt.
Nicht in ein int-Array passt 'double', weil etwas verschüttet werden könnte.

Es werden drei Dateien erstellt. Die werden idealerweise in einem Ordner gespeichert.

public class Ratespiel {
		// Ratespiel drei Instanzen fuer die drei Spieler-Objekte.
		Spieler s1;
		Spieler s2;
		Spieler s3;

		public void starteSpiel() {
			// Erstellt drei Spieler-Objekte und
			// weist sie den Spieler-Instanzvariablen zu.
			s1 = new Spieler();
			s2 = new Spieler();
			s3 = new Spieler();
			
			// Deklariert drei Variablen, welche die Tipps
			// festhalten, welche die Spieler abgeben.
			int tipp1 = 0;
			int tipp2 = 0;
			int tipp3 = 0;
			
			// Deklariert drei Variablen, die, abhaengig von der
			// Antwort des Spielers, 'true' oder 'false' enthalten.
			boolean s1hatRecht = false;
			boolean s2hatRecht = false;
			boolean s3hatRecht = false;
			
			// Findet eine 'Zielzahl', welche die Spieler erraten muessen.
			int zielZahl = (int) (Math.random() * 10);
			System.out.println("Ich denke mit einen Zahl zwischen 0 und 9 aus ...");
			
			while(true) {
				System.out.println("Die zu ratende Zahl ist " + zielZahl);
			
				// Ruft die raten()-Methode des Spielers auf.
				// Wird in anderer Datei 'Spieler' weiter unten definiert.
				s1.raten();
				s2.raten();
				s3.raten();
			
			// Ruft den Tipp jedes Spielers ab (das Ergebnis der
			// Ausfuehrung ihrer raten()-Methode),
			// in dem auf die zahl-Variable jedes Spielers
			// zugegriffen wird.
			tipp1 = s1.zahl;
			System.out.println("Spieler eins tippte " + tipp1);
			
			tipp2 = s2.zahl;
			System.out.println("Spieler zwei tippte " + tipp2);
			
			tipp3 = s3.zahl;
			System.out.println("Spieler drei tippte " + tipp3);
			
			// Prueft die Tipps aller Spieler, um zu sehen,
			// ob einer der Zielzahl entspricht; wenn ein 
			// Spieler recht hat, wird die Variable dieses
			// Spielers auf 'true' gesetzt (daran denken, dass die
			// per default auf 'false' gesetzt sind.
			if (tipp1 == zielZahl) {
				s1hatRecht = true;
			}
			if (tipp2 == zielZahl) {
				s2hatRecht = true;
			}
			if (tipp3 == zielZahl) {
				s3hatRecht = true;
			}
			
			// Wenn Spieler eins ODER Spieler zwei ODER Spieler
			// drei recht hat... (der ||-Operator bedeutet ODER)
			if (s1hatRecht || s2hatRecht || s3hatRecht) {
				
				System.out.println("Wir haben einen Gewinner!");
				System.out.println("Spieler eins hat richtig geraten? "+ s1hatRecht);
				System.out.println("Spieler zwei hat richtig geraten? "+ s2hatRecht);
				System.out.println("Spieler drei hat richtig geraten? "+ s3hatRecht);
				System.out.println("Das Spiel ist aus.");
				break; //Das Spiel ist zuende, also aus der Schreife ausbechen.
				
			} else {
				// Wir muessen weitermachen, weil keiner der Speiler richtig geraten hat.
				// Anderenfalls wird die Schleife weiter ausgefuehrt, und die Spieler 
				// werden um einen neuen Tipp gebeten.
				System.out.println("Die Spieler muessen es erneut versuchen.");
			} // if/else-Ende
		} // Schleifenende
	} // Methodenende
} // Klassenende
// Weitere Datei Spieler
// das Ratespiel ausfuehren

public class Spieler {
	int zahl = 0; // hier kommt der Tipp rein
	
	public void raten() {
		zahl = (int) (Math.random() * 10);
		System.out.println("Ich tippe auf die Zahl: " + zahl);
	}
}
// Weitere Datei Spielstarter

public class SpielStarter {
	public static void main (String[] args) {
		Ratespiel spiel = new Ratespiel();
		spiel.starteSpiel();
	}
}

Quelle: A.a.o., 39f.

< (kleiner als)
> (größer als)
== (gleich) zwei Gleichheitszeichen

Dateiendeung: .class

Das Programm ausführen bedeutet für einen Windows-Rechner, in der Eingabeauffoderung zum Beispiel 'java MeineErsteAnwendung' einzugeben und die Eingabetaste zu drücken.
Die Endung .class wird nicht mit angegeben.

Sobald Java ein Objekt erzeugt, existiert es in einem Speicherbereich, der als 'Heap' bezeichnet wird. Alle erzeugten Objekte befinden sich in diesem Bereich.

Beim Erzeugen des Objektes alloziert Java den benötigten Speicherplatz. Wird der Speicherplatz nicht mehr benötigt, dann wird das Objekt zur 'Garbage Collecion' freigegeben. Sollte der Speicherplatz aufgebraucht sein, wird der Gabrage Collector ausgeführt. Unerreichbare Objekte werden entfernt.

Jede Java-Anwendung hat mindestens eine Klasse und mindestens eine 'main-Methode' (eine main-Methode pro Anwendung). Ganz gleich, wie umfangreich das Programm ist bzw. wie viele Klassen es hat. es muss immer eine 'main-Methode' geben.

In Java kommt alles in eine Klasse. Die Quellcode-Datei mit der Erweiterung '.java' wird eingegeben, dann kompiliert. Ausgeführt wird immer die Klasse.

Beispiel: EingabeauffoRderung zum Beispiel 'java MeineErsteAnwendung'

  • Es gibt keine 'Objektvariable'.
  • Es gibt nur eine 'Objektreferenzvariable'.
  • Eine Objektreferenzvariable enthält Bits. Die Bits repräsentieren ein Mittel für den Zugriff auf ein Objekt.
  • Eine Objektreferenzvariable hält nicht das Objekt selbst. Sie ist so etwas wie ein Zeiger oder eine Adresse. Sie referenziert nur ein einziges Objekt. Dadurch weiß die JVM, wie sie an das Objekt kommt.

Eine Objektreferenz ist eine 'Fernsteuerung', die für die Steuerung unterschiedlicher Objekte programmiert werden kann. Sie kann zum Beispiel einen Hund referenzieren und nach einigen Minuten einen anderen Hund. Es muss nur ein Hund sein.

Wenn sie als 'final' markiert ist, kann sie nicht einen anderen Hund referenzieren, sie kann nicht auf etwas anderes umprogrammiert werden.

Eine Referenzierung auf den Wert 'null' ist möglich. Dann ist die Programmierung gelöscht und niemand kommt mehr an das Objekt heran, auf das referenziert wurde.

  • Anweisungen enden immer mit einem Semikolon ';'
  • Codeblöcke werden durch ein Paar geschweifter Klammern definiert '{ }'.
  • Eine int-Variable mit einem Namen und einem Typ deklariert man so: 'int x;'.
  • Der Zuweisungsoperator ist ein Gleichheitszeichen '='.
  • Der Gleichheitsoperator besteht aus zwei Gleicheitszeichen '=='.
  • Eine while-Schleife führt alles innerhalb des Block (der durch die geschweiften Klammern definiert wird) so lange aus, wie die Testbedingung 'true' ist
  • Wenn eine Testbedingung 'false' ist, wird der Codeblock der while-Schleife nicht ausgeführt. Die Ausfhrung geht unmittelbar mit dem Code weiter, der nach dem Schleifenblock folgt.
  • Eine Testbedingung wird in runde Klammern gesetzt: 'while (x==4) { }'.

Der Punktoperator teilt einer Referenzvariablen etwas mit:
Nimm das Ding vor dem Punktoperator,
um mir das Ding nach dem Punkt zu besorgen.

Beispiel: meinHund.bellen();
Nimm das Objekt, das die Variable meinHund referenziert, um die Methode bellen() aufzurufen.
Stellen Sie sich vor, Sie würden einen Knopf auf der Fernbedienung drücken.

Dateiendung: .java

Inhalt:
Klassendefinition, die Klasse muss in einem Paar geschweifter Klammern geschrieben werden.

Methoden
In der Klasse stehen eine oder mehrere Methoden. Die Methoden werden in geschweiften Klammern geschrieben.

Anweisungen
In den geschweiften Klammern innerhalb der Methode stehen die Anweisungen. Jede Anweisung muss mit einem Semikolon enden.

Jede Java-Anwendung muss mindestens ein Klasse und mindestens eine Main-Methode enthalten. Es muss nicht für jede Klasse eine Main-Methode vorhanden sein.

Speichern, kompilieren, ausführen

Kompilieren Beispiel
Bei einem Windows-Rechner in der Eingabeaufforderung eingeben:
'javac MeineErsteAnwendung.class'

Es gibt drei Standardschleifenkonstukte:
while, do-while, for

Die Bedingung wird zu einem boolschen Wert ausgegeben, der entweder 'true# (wahr) oder 'false' (falsch) ist.

Es gibt zwei Arten von Variablen:
'elementare (primitive) Typen' und
'Objektreverenzen'.

Elementare Typen enthalten Ganzzahlen, Boolesche Werte, Fließkommazahlen.

Objektreferenzen enthalten Objekte.

Man muss zwei Deklarationsregeln befolgen:
Variablen müssen einen Typ Vhaben.
Variablen müssen einen Namen haben.
Beispiel: Typ 'int', Name 'count'.

Vorstellung: Die Variable ist ein Becher, der etwas enthält. Es gibt vier elementare Typen in unterschiedlichen Größen für ganze Zahlen:
von links nach rechts kleiner werdend:
'long', 'int', 'short', 'byte'.

Jeder Becher hat einen Namen, das ist ein 'int' mit einem Zahlenwert.
Von links nach rechts aufsteigend:
byte - 8 | short - 16 | int - 32 | long - 64 |

Für Fließkommazahlen sind es diese hier
float - 32 | double - 64
Bei Fließkommazahlen muss ein 'f' hinter der Zahl stehen, Beispiel: 'float f = 32.5f;' Java denkt, dass alles mit einem Dezimaltrenner ein 'double' ist, wenn nicht das 'f' nachgestellt wird.

Beispiele
int größe = 32; deklariert einen int namens 'größe' und weist ihm den Wert '32' zu.
char initial = 'j'; deklariert einen char namens 'initial' und weist ihm den Wert 'j' zu.
double d = 456.7; deklariert einen double namens 'd' und weist ihm den Wert '456,7 zu.
boolean is Verrueckt; deklariert einen boolean namens 'isVerrueckt' (keine Zuweisung).
isVerrueckt = true; deklariert einen boolean namens 'isVerrueckt' und weist ihm den Wert 'true' zu.
int y = x + 456; deklariert einen int namens ' y' und weist ihm einen Wert zu, der die Summe des aktuellen Wertes x plus 456 ist.

Zum Namen der Variablen

  • Der Name muss mit einem Buchstaben beginnen, einem Unterstrich '_' oder einem Dollarzeichen '$'. Eine Zahl ist am Anfang nicht erlaubt.
  • Nach dem ersten Zeichen dürfen auch Zahlen verwendet werden. Als erstes Zeichen darf keine Zahl stehen.
  • Der Name darf sein, was diesen Regeln entspricht. Es darf jedoch keines der von Java reservierten Schlüsselwörter verwendet werden.
    Nicht erlaubt sind 'public', 'static', 'void', 'boolean', 'char', 'byte', 'short', 'int', 'long', 'float', 'double'.
    Viele andere sind aktuell noch nicht besprochen worden.

Merksatz

boolean char byte short int long float double

Beim charmanten Bären sind Ihre leckeren Früchte dahin.

Quelle
Sierra, Kathy; Bates, Bert, Java von Kopf bis Fuß, Heidelberg, 3. korrigierter Nachdruck 2008