Zoals u weet, levert een klasse de blauwdruk voor objecten; je creëert een object vanuit een klasse. Elk van de volgende instructies uit het programma CreateObjectDemo
maakt een object aan en wijst het toe aan een variabele:
De eerste regel maakt een object van het Point
class, en de tweede en derde regel creëren elk een object van de Rectangle
class.
Elk van deze instructies bestaat uit drie delen (hieronder in detail besproken):
- Declaratie: de vetgedrukte code zijn alle declaraties van variabelen die een variabelenaam associëren met een objecttype.
- Instantiatie: het nieuwe trefwoord is een Java-operator die het object maakt.
- Initialisatie: de nieuwe operator wordt gevolgd door een aanroep naar een constructor, die het nieuwe object initialiseert.
Een variabele declareren naar een object verwijzen
Eerder leerde u dat u, om een variabele te declareren, schrijft:
type name;
Dit laat de compiler weten dat u naam gaat gebruiken om te verwijzen naar gegevens waarvan het type type is. Met een primitieve variabele reserveert deze declaratie ook de juiste hoeveelheid geheugen voor de variabele.
U kunt ook een referentievariabele declareren op een eigen regel. Bijvoorbeeld:
Point originOne;
Als u originOne
op deze manier declareert, zal zijn waarde onbepaald zijn totdat een object daadwerkelijk is gemaakt en eraan is toegewezen. Door simpelweg een referentievariabele te declareren, wordt geen object gecreëerd. Daarvoor moet u de new
operator gebruiken, zoals beschreven in de volgende sectie. U moet een object toewijzen aan originOne
voordat u het in uw code gebruikt. Anders krijg je een compileerfout.
Een variabele in deze toestand, die momenteel naar geen enkel object verwijst, kan als volgt worden geïllustreerd (de variabelenaam, originOne
, plus een verwijzing die naar niets wijst):
Een klasse instantiëren
De nieuwe operator instantieert een klasse door geheugen toe te wijzen aan een nieuw object en een verwijzing naar dat geheugen terug te sturen. De nieuwe operator roept ook de objectconstructor aan.
De nieuwe operator vereist een enkel, postfix-argument: een aanroep naar een constructor. De naam van de constructor geeft de naam van de klasse die moet worden geïnstantieerd.
De operator new geeft een verwijzing terug naar het object dat het heeft gemaakt. Deze verwijzing wordt gewoonlijk toegewezen aan een variabele van het juiste type, zoals:
De verwijzing die wordt geretourneerd door de nieuwe operator is niet moeten aan een variabele worden toegewezen. Het kan ook rechtstreeks in een uitdrukking worden gebruikt. Bijvoorbeeld:
int height = new Rectangle().height;
Deze verklaring zal in de volgende sectie worden besproken.
Een object initialiseren
Hier is de code voor de Point-klasse:
public class Point { public int x = 0; public int y = 0; //constructor public Point(int a, int b) { x = a; y = b; }}
Deze klasse bevat een enkele constructor. Je kunt een constructor herkennen omdat de declaratie dezelfde naam gebruikt als de klasse en geen retourtype heeft. De constructor in de klasse Point accepteert twee integer-argumenten, zoals gedeclareerd door de code (int a, int b). De volgende instructie geeft 23 en 94 als waarden voor die argumenten:
Point originOne = new Point(23, 94);
Het resultaat van het uitvoeren van dit verklaring kan worden geïllustreerd in de volgende afbeelding:
Hier is de code voor de klasse Rectangle, die vier constructors bevat:
Elke constructor laat je initiële waarden opgeven voor de oorsprong, breedte en hoogte van de rechthoek, met behulp van zowel primitieve als referentietypes. Als een klasse meerdere constructors heeft, moeten ze verschillende handtekeningen hebben.De Java-compiler onderscheidt t hij constructors op basis van het aantal en het type argumenten. Wanneer de Java-compiler de volgende code tegenkomt, weet hij de constructor in de klasse Rectangle aan te roepen die een Point-argument vereist, gevolgd door twee integer-argumenten:
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Dit roept een van de Rectangle
“s constructors aan die origin
initialiseert naar originOne
. Ook stelt de constructor width
in op 100 en height
op 200.Nu zijn er twee verwijzingen naar hetzelfde Point-object: een object kan er meerdere verwijzingen naar hebben, zoals weergegeven in de volgende afbeelding:
De volgende regel code roept de Rectangle
constructor aan die twee integer-argumenten vereist, die de initiële waarden voor breedte en hoogte. Als je de code in de constructor inspecteert, zul je zien dat het een nieuw Point-object maakt waarvan de x- en y-waarden worden geïnitialiseerd op 0:
Rectangle rectTwo = new Rectangle(50, 100);
De constructor Rectangle die in de volgende instructie wordt gebruikt, “accepteert geen argumenten, dus wordt hij een constructor zonder argument” genoemd:
Rectangle rect = new Rectangle();
Alle klassen hebben minstens één constructor. Als een klasse er niet expliciet een declareert, biedt de Java-compiler automatisch een constructor zonder argument, de standaardconstructor genaamd. Deze standaardconstructor roept de constructor zonder argument van de class parent aan, of de constructor Object
als de klasse geen andere parent heeft. Als de parent geen constructor heeft (Object
heeft er wel een), zal de compiler het programma afwijzen.