Modulelessen (1/2)
Klassen en objecten
Java is een taal gericht op Object-Oriented Programming (OOP). In OOP modelleren we de echte wereld met behulp van objecten. Een object heeft status (gegevens) en gedrag (acties).
Klassen en objecten
- Klasse: het is een blauwdruk (of sjabloon) die de eigenschappen en het gedrag van een type object definieert.
- Object: het is een concrete instantie gemaakt op basis van een klasse.
Als Car bijvoorbeeld de klasse is, is uw auto in de garage het daadwerkelijke object.
Instantievelden en constructors
De gegevens binnen een klasse worden instancevelden (of attributen) genoemd. Om de toestand van een object op het moment van creatie te initialiseren, gebruiken we een speciale methode genaamd constructor.
Een constructor heeft dezelfde naam als de klasse en heeft geen retourtype (zelfs niet void).
class Dog {
// Instance fields
String name;
int age;
// Constructor
public Dog(String name, int age) {
this.name = name; // 'this' refers to the current object's field
this.age = age;
}
}Een object maken met new
Om een object in het geheugen te maken, gebruiken we het sleutelwoord new gevolgd door de klassenconstructor:
public class Main {
public static void main(String[] args) {
// Creating a Dog object
Dog myDog = new Dog("Fido", 3);
// Accessing fields
System.out.println(myDog.name + " is " + myDog.age + " years old.");
}
}De this referentie
Het sleutelwoord this in Java verwijst naar het huidige object waarop de constructor of een methode wordt uitgevoerd. Het wordt voornamelijk gebruikt om dubbelzinnigheid te voorkomen wanneer constructorparameters dezelfde naam hebben als de instantievelden van het object (variabele schaduw):
class User {
String username;
public User(String username) {
this.username = username; // this.username is the instance field, username is the parameter
}
}Geheugentoewijzing: stapel versus heap
Begrijpen hoe Java geheugen toewijst is essentieel:
- Stack: het is een snel en georganiseerd geheugengebied waar primitieve variabelen en objectreferenties (geheugenadressen) lokaal voor methoden worden opgeslagen.
- Heap: het is een groter en dynamisch geheugengebied waar feitelijke objecten worden toegewezen (met behulp van het trefwoord
new).
Wanneer we Dog myDog = new Dog("Fido", 3); verklaren:
- De referentie
myDogis aangemaakt op de Stack. - Het daadwerkelijke
Dogobject met zijn gegevens wordt aangemaakt op de Heap. - De variabele
myDogverwijst naar de locatie van het object op de Heap.
Probeer het zelf
Voltooi de klasse Person door de veldnaam en een geschikte constructor toe te voegen. Maak vervolgens in de hoofdmethode een Person-object met de naam p met de naam Alice.
Toon hint
Schrijf `String naam;` binnen de klasse, declareer de constructor `public Person(String name) { this.name = naam; }` en instantiëer het met `new Person('Alice')`.
Oplossing beschikbaar na 3 pogingen
Maak een Book-klasse met de velden titel (String) en pagina's (int), een volledige constructor, en instantiëer in de hoofdmethode een boek met de naam b met de titel Moby Dick en 600 pagina's.
Toon hint
Vergeet niet om beide velden in Book te definiëren, ze in de constructor toe te wijzen met `this.title = title;` en `this.pages = pagina's;`, en `new Book('Moby Dick', 600)` te gebruiken.
Oplossing beschikbaar na 3 pogingen
Maak een productklasse met de veldnaam (String) en prijs (dubbel), en een constructor die beide velden initialiseert. Maak in de hoofdmethode een Product-object met de naam p met de naam Laptop en de prijs 999,99.
Toon hint
Declareer de velden 'String name;' en 'double price;' in Product, wijs ze in de constructor toe met 'this.name = name;' en 'this.price = price;', en maak tenslotte het object in de main-methode.
Oplossing beschikbaar na 3 pogingen