Von Python zu Java
Abschnitt 1.1: Java wird vorab übersetzt, jede Variable hat einen festen Typ, Blöcke stehen in geschweiften Klammern.
Übersetzen und ausführen
javacübersetzt die ganze Datei vorab in Bytecode (.class).- Die JVM führt den Bytecode aus — auf jedem Betriebssystem.
- Dateiname = Klassenname,
mainist der Startpunkt. - Compilerfehler: nichts startet. Laufzeitfehler: Abbruch während des Laufs.
Statische Datentypen
- Typ steht fest und wird vor dem Start geprüft.
int,double,boolean,char('B'),String("Luna").int / intschneidet ab,%liefert den Rest.(int) 3.9→ 3;finalmacht eine Konstante.
int stufen = 3; double tank = 72.5; int a = 7 / 2; // 3 int r = 7 % 2; // 1 double d = 7.0 / 2; // 3.5
Verzweigungen und Schleifen
- Bedingung in
( ), Block in{ }. &&und,||oder,!nicht.- Texte mit
.equals(…)vergleichen. for: Start; Bedingung; Schritt.
// Python: for i in range(2, 10, 3):
for (int i = 2; i < 10; i += 3) {
System.out.print(i + " ");
}
// 2 5 8Methoden
- Parameter immer mit Typ.
- Rückgabetyp vor dem Namen,
void= keine Rückgabe. returnbeendet die Methode sofort.- Lokale Variablen gibt es nur in ihrer Methode.
public static double mittel(double a, double b) {
return (a + b) / 2;
}
// mittel(3, 4) liefert 3.5Jede Anweisung endet mit ;. Groß- und Kleinschreibung zählt: System.out.println, nicht system.out.println. println macht danach einen Zeilenumbruch, print nicht.
Objektorientiert denken
Abschnitt 1.2: Eine Klasse ist der Bauplan, Objekte sind Exemplare mit eigenen Werten.
Klassen und Objekte
- Klasse: Attribute (was es weiß) + Methoden (was es kann).
newerzeugt ein Objekt und ruft den Konstruktor auf.- Die Variable verweist auf das Objekt.
- Methodenaufruf mit Punkt: ändert nur dieses Objekt.
Fahrstuhl f = new Fahrstuhl(12); f.setStockwerk(7); int s = f.getStockwerk(); // 7
Klassendiagramm
- Drei Fächer: Name · Attribute · Konstruktor und Methoden.
-privat,+öffentlich,cKonstruktor.- Typ nach dem Doppelpunkt, deutsch: Ganzzahl, Fließkommazahl, Wahrheitswert, Zeichen, Zeichenkette.
- - stockwerk: Ganzzahl
- - hoechstes: Ganzzahl
- c Fahrstuhl(hoechstes: Ganzzahl)
- + getStockwerk(): Ganzzahl
- + setStockwerk(s: Ganzzahl)
Attribute und Konstruktor
- Attribute stehen in der Klasse, außerhalb der Methoden.
- Standardwerte:
0,0.0,false,null. - Konstruktor: Name der Klasse, kein Rückgabetyp.
this.x= Attribut,x= Parameter.- Eigener Konstruktor da → kein Standardkonstruktor mehr.
public Fahrstuhl(int hoechstes) {
this.hoechstes = hoechstes;
stockwerk = 0;
}Kapselung mit get und set
- Attribute
private, Zugriff über Methoden. - Getter
getX()(beiboolean:istX()) liefert den Wert. - Setter
setX(…)istvoidund weist ungültige Werte ab. - Kein Setter → nur lesbar.
public void setStockwerk(int stockwerk) {
if (stockwerk >= 0 && stockwerk <= hoechstes) {
this.stockwerk = stockwerk;
}
}- stockwerk: Ganzzahl wird private int stockwerk;, + getStockwerk(): Ganzzahl wird public int getStockwerk(), + setStockwerk(s: Ganzzahl) wird public void setStockwerk(int s). Nur der Konstruktor hat gar keinen Rückgabetyp.
Mit Objekten arbeiten
Abschnitt 1.3: Viele Werte in Arrays und Listen, gemeinsame Teile per Vererbung, ein kleines Projekt Schritt für Schritt.
Arrays
- Feste Länge, gleicher Typ für alle Plätze.
- Indizes
0bislength − 1. - Zu großer Index →
ArrayIndexOutOfBoundsException.
int[] tore = {2, 0, 3, 1, 4};
int summe = 0;
for (int i = 0; i < tore.length; i++) {
summe = summe + tore[i];
}
// summe = 10ArrayList
import java.util.ArrayList;- Wächst und schrumpft:
add,get,set,remove,size(). - Für Zahlen
Integerstattint. - Durchlauf mit for-each.
ArrayList<String> gaeste = new ArrayList<>();
gaeste.add("Ida");
gaeste.add("Noah");
gaeste.remove(0);
for (String g : gaeste) {
System.out.println(g); // Noah
}Vererbung
extends: Unterklasse „ist ein“ Oberklasse und erbt Attribute und Methoden.super(…)als erste Zeile im Konstruktor.@Override: gleiche Signatur, eigene Umsetzung.- Private Attribute der Oberklasse nur über Getter.
public class Trommel extends Instrument {
private int groesse;
public Trommel(String name, int groesse) {
super(name);
this.groesse = groesse;
}
@Override
public String klang() {
return "Bumm";
}
}Projekt: Verwaltung
- Planen: Klassendiagramm mit zwei Klassen und Assoziation.
- Liste als Attribut:
- rezepte: Liste vom Typ Rezept. - Suche: for-each,
equals,return nullerst nach der Schleife. - Nach jedem Schritt testen.
Array: feste Länge, Zugriff mit tore[i], auch für int. ArrayList: variable Länge, Zugriff mit gaeste.get(i), Typ in spitzen Klammern — bei Zahlen ArrayList<Integer>.
Die Regeln, an denen die Punkte hängen
Die meisten Punkte gehen nicht durch schwere Aufgaben verloren, sondern durch kleine, immer gleiche Ungenauigkeiten.
Regel 1 — Typen ernst nehmen
Vor jede Variable und jeden Parameter gehört ein Typ. int / int rechnet ganzzahlig, eine Kommazahl passt nicht in int, und eine Methode mit Rückgabetyp braucht auf jedem Weg ein return.
Regel 2 — Klasse sauber bauen
Attribute private, Konstruktor ohne Rückgabetyp mit this., Setter mit Prüfung. Objekte immer mit new. Im Diagramm deutsche Typen hinten, in Java englische Typen vorn.
Regel 3 — Grenzen prüfen
Schleifen über Arrays mit i < length, Texte mit equals. Bei der Suche erst nach der Schleife return null, in der Unterklasse zuerst super(…).
