Lektionen des Moduls (1/2)
Klassen und Objekte
Java ist eine Sprache, die sich auf die objektorientierte Programmierung (OOP) konzentriert. In der OOP modellieren wir die reale Welt mithilfe von Objekten. Ein Objekt besitzt einen Zustand (die Daten) und Verhaltensweisen (die Aktionen).
Klassen und Objekte
- Klasse: Es ist ein Modell (oder Blueprint), das die Eigenschaften und das Verhalten eines Objekttyps definiert.
- Objekt: Es ist eine konkrete Instanz, die aus einer Klasse erstellt wurde.
Wenn beispielsweise Car die Klasse ist, ist Ihr Auto in der Garage das reale Objekt.
Instanzfelder und Konstruktoren
Die Daten innerhalb einer Klasse werden als Instanzfelder (oder Attribute) bezeichnet. Um den Zustand eines Objekts zum Zeitpunkt seiner Erstellung zu initialisieren, wird eine spezielle Methode namens Konstruktor verwendet.
Ein Konstruktor hat den gleichen Namen wie die Klasse und hat keinen Rückgabetyp (nicht einmal void).
class Dog {
// Campi istanza
String name;
int age;
// Costruttore
public Dog(String name, int age) {
this.name = name; // 'this' fa riferimento al campo dell'oggetto corrente
this.age = age;
}
}
Ein Objekt mit new erstellen
Um ein Objekt im Speicher zu erstellen, verwenden wir das Schlüsselwort new gefolgt vom Konstruktor der Klasse:
public class Main {
public static void main(String[] args) {
// Creazione di un oggetto Dog
Dog myDog = new Dog("Fido", 3);
// Accesso ai campi
System.out.println(myDog.name + " ha " + myDog.age + " anni.");
}
}
Die Referenz this
Das Schlüsselwort this in Java bezieht sich auf das aktuelle Objekt, auf dem der Konstruktor oder eine Methode ausgeführt wird. Es wird hauptsächlich verwendet, um Mehrdeutigkeiten zu vermeiden, wenn die Parameter des Konstruktors den gleichen Namen wie die Instanzfelder des Objekts haben (Variablenbeschattung):
class User {
String username;
public User(String username) {
this.username = username; // this.username è il campo istanza, username è il parametro
}
}
Speicherallokation: Stack vs. Heap
Zu verstehen, wie Java Speicher allokiert, ist von grundlegender Bedeutung:
- Stack: Es ist ein schneller und organisierter Speicherbereich, in dem primitive Variablen und Referenzen auf Objekte (Speicheradressen) deklariert werden, die innerhalb der Methoden lokal sind.
- Heap: Es ist ein größerer und dynamischerer Speicherbereich, in dem die tatsächlichen Objekte allokiert werden (mit dem Schlüsselwort
new).
Wenn wir Dog myDog = new Dog("Fido", 3); deklarieren:
- Die Referenz
myDogwird im Stack erstellt. - Das reale Objekt
Dogmit seinen Daten wird im Heap erstellt. - Die Variable
myDogzeigt auf die Position des Objekts im Heap.
Probier es selbst
Vervollständige die Klasse Person durch Hinzufügen des Feldes name und eines geeigneten Konstruktors. Erstelle dann in der main-Methode ein Person-Objekt namens p mit dem Namen Alice.
Hinweis anzeigen
Schreibe `String name;` in die Klasse, deklariere den Konstruktor `public Person(String name) { this.name = name; }` und instanziiere mit `new Person('Alice')`.
Lösung nach 3 Versuchen verfügbar
Erstelle eine Klasse Book mit den Feldern title (String) und pages (int), einem vollständigen Konstruktor und instanziiere in der main-Methode ein Buch namens b mit dem Titel Moby Dick und 600 Seiten.
Hinweis anzeigen
Denke daran, beide Felder in Book zu definieren, sie im Konstruktor mit `this.title = title;` und `this.pages = pages;` zuzuweisen und `new Book('Moby Dick', 600)` zu verwenden.
Lösung nach 3 Versuchen verfügbar
Erstelle eine Klasse Product mit den Feldern name (String) und price (double) und einem Konstruktor, der beide Felder initialisiert. Erstelle in der main-Methode ein Product-Objekt namens p mit dem Namen Laptop und dem Preis 999.99.
Hinweis anzeigen
Deklariere die Felder `String name;` und `double price;` in Product, weise sie im Konstruktor mit `this.name = name;` und `this.price = price;` zu und erstelle schließlich das Objekt in der main-Methode.
Lösung nach 3 Versuchen verfügbar