1. Oprettelse af et objekt
Nå, vi er nået frem til at skabe objekter. Du har allerede stødt på dette før, men nu vil vi analysere dette emne mere detaljeret. Det er faktisk meget nemt at skabe objekter.
For at oprette et objekt skal du bruge den nye operator. Oprettelse af et objekt ser omtrent sådan ud:
new Class(arguments)
Efter at have oprettet et objekt, gemmer vi oftest straks en reference til det i en variabel, som meget ofte deler samme type som det oprettede objekt. Det betyder, at når du opretter et objekt, ser du normalt kode som denne:
Class name = new Class(arguments)
Hvor er oprettelsen af en ny variabel, og koden til højre for lighedstegnet er oprettelsen af et nyt objekt, hvis type er .Class name
Class
Eksempler:
Kode | Bemærk |
---|---|
|
Opret et Object objekt |
|
Opret et Cat objekt |
|
Opret et Scanner objekt |
Programmører navngiver ofte variabler efter deres klasser, men med et lille bogstav. For en nybegynder programmør kan sådan kode være forvirrende:
Kode |
---|
|
|
|
Der er intet galt med denne kode - dette er den mest almindelige kode, hvor en variabel oprettes og derefter straks initialiseres af et objekt af samme type.
Til venstre for lighedstegnet har vi oprettelsen af en variabel. Til højre, skabelsen af et objekt. Det er det.
2. Konstruktør
Du har sikkert set, at nogle argumenter ofte sendes, når du opretter et objekt. Hvad mere er, argumenter sendes for nogle objekter, men ikke andre. Hvordan fungerer hele denne mekanisme med argumenter?
Alt er også enkelt her: hver klasse har en speciel metode (eller metoder), der er ansvarlige for at håndtere argumenter, der sendes, når du opretter et objekt. Disse metoder kaldes konstruktører . Eller når vi kun taler om én: konstruktøren .
Det er let at skelne en konstruktørmetode fra en almindelig metode. Denne metode har to kendetegn:
- navnet på en konstruktør er det samme som navnet på dens klasse (og starter med et stort bogstav)
- en konstruktør har ingen returtype.
Generelt ser det sådan ud som regel:
modifiers Class(arguments)
{
Code
}
Eksempel:
Kode | Bemærk |
---|---|
|
Point klasse Point klasse konstruktør |
|
Opret et objekt af Point klassen. Klassekonstruktøren vil blive kaldt. |
Bemærk, hvordan konstruktøren ser ud: den har ingen returtype, og dens navn er det samme som klassenavnet.
Og en ting mere: Tag et kig på koden inde i konstruktøren. Konstruktørens parametre har samme navne som felterne i klassen: x og y. Det er standardpraksis at undgå at lave nye parameternavne. Navnene er de samme som på klassens felter. Navnekonflikten løses ved at bruge dette nøgleord.
3. Kald en konstruktør
Når du bruger den nye operator og en kommando som "ny klasse ( argumenter )" til at oprette et nyt objekt, sker der to ting:
- Java-maskinen opretter et objekt, hvis type er Klasse
- Java-maskinen kalder objektets konstruktør og sender dine argumenter
Som programmør kan du bestemme, hvilke konstruktører din klasse skal have, og hvilke parametre disse konstruktører skal have.
Antag, at du beslutter dig for at oprette en klasse for at holde styr på katte på et dyreinternat. Så Cat
kan din klasse se sådan ud:
|
|
|
Dette er tilladt |
|
Men dette er ikke tilladt. Denne kode vil ikke kompilere. |
|
Og dette er ikke tilladt. Denne kode vil ikke kompilere. |
Klassen Cat
har kun én konstruktør med navn og aldersparametre. Fordi der ikke er andre konstruktører, skal du videregive kattens navn ( name
) og alder ( age
) som argumenter, når du opretter et objekt. Det er ikke valgfrit at sende argumenter til konstruktøren .
4. Flere konstruktører
Men hvis du har brug for det, kan du tilføje flere konstruktører til klassen. Der er ingen begrænsning på antallet af konstruktører eller deres parametre. Når du opretter et objekt, vælger compileren automatisk den konstruktør, der matcher parametrene
Kode | Bemærk |
---|---|
|
|
|
Dette er tilladt: den første konstruktør vil blive kaldt |
|
Dette er tilladt: den anden konstruktør vil blive kaldt |
|
Men dette er ikke tilladt. Denne kode vil ikke kompilere. |
Vi besluttede at tage højde for det faktum, at en kats alder måske ikke kendes. For at håndtere denne sag tilføjede vi den særlige konstant UNKNOWN
sammen med en konstruktør, der kun har én parameter - navnet på katten.
Bemærk, at vi stadig initialiserer begge variabler i begge konstruktører. Vi erstatter de ukendte/manglende parametre med konstanten UNKNOWN
.
Hvis der ikke tildeles nogen værdi til aldersvariablen, vil den have standardværdien 0. En killing fundet på gaden kan trods alt godt være 0 hele år. Det betyder, at et nul i aldersvariablen ikke nødvendigvis betyder "ukendt alder".
5. Standard konstruktør
Hvis du ønsker, at dine objekter skal instantieres uden nogen parametre, skal din klasse erklære en no-argument constructor.
En konstruktør uden parametre er ikke nødvendigvis en konstruktør uden kode. En sådan konstruktør kan indeholde kode, der initialiserer variabler med startværdier:
Kode | Bemærk |
---|---|
|
|
|
Dette er tilladt: den første konstruktør vil blive kaldt |
|
Dette er tilladt: den anden konstruktør vil blive kaldt |
Standard konstruktør
Der er en meget vigtig pointe, som du bør kende og huske.
Hvis din klasse ikke erklærer én konstruktør , tilføjer compileren en standardkonstruktør, som er en konstruktør uden argumenter med den offentlige modifikator.
Men hvis din klasse erklærer blot én konstruktør , vil der ikke blive tilføjet nogen standardkonstruktør , og du bliver nødt til at tilføje den selv, hvis du ønsker det.
Kode | Bemærk |
---|---|
|
|
|
Dette er tilladt: standardkonstruktøren vil blive kaldt |