Konstruktør
Sådan forenkles initialisering af klasser
Det kan være besværligt at initialisere hvert felt hver gang. Til dette formål har klasser konstruktører. Syntaksen for en konstruktør er som følger:
Main.java
1234modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }
Gennemgang af hvert ord anvendt her:
modifier: Dette refererer til adgangsmodifikatoren, som ofte erpublicfor konstruktører. Tilfælde hvor en konstruktør kan have en anden adgangsmodifikator, vil blive behandlet i et andet kursus;ClassName: Dette er blot navnet på den klasse, hvor du opretter denne konstruktør;ParameterType: Dette er typen af parameter, der skal bruges i konstruktøren. Det er vigtigt at være opmærksom her, da denne parameter skal være samme type som feltet i klassen; For eksempel: Hvis klassen har to parametre,String nameogint age, skal konstruktøren have de samme parametre (hvis vi ønsker at initialisere alle felter gennem konstruktøren). Hvis vi kun ønsker at initialisere et specifikt klassefelt gennem konstruktøren, for eksempelname, skal vi kun bruge én parameter med samme type og navn som feltet i klassen;- Dernæst tildeles værdier til klassefelterne i konstruktørens krop ved hjælp af de værdier, der er angivet i parameteren.
"this"-nøgleordet
Ved hjælp af this-nøgleordet kan vi referere til klassefeltet, hvor vi skriver værdien af dette nøgleord. For eksempel, når vi har en klasse med to felter: name og age, kan vi skrive this.name inde i konstruktøren eller en metode, og det vil specifikt referere til klassefeltet, ikke den lokale variabel, der sendes som parameter til konstruktøren eller metoden. På denne måde kan vi initialisere klassefelter gennem konstruktøren ved at bruge syntaksen: this.name = name;.
Eksempel
Lad os se på et eksempel på en konstruktør i en klasse, der hjælper os med at initialisere alle felterne for at gøre det tydeligere:
Person.java
1234567891011class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }
Vi har en klasse kaldet Person med tre felter. Hvert af disse felter er blevet tilføjet til konstruktøren ved hjælp af nøgleordet this. Derfor initialiserer konstruktøren felterne med værdierne fra parametrene. Lad os bruge denne konstruktør i main-metoden, så du kan se, at felterne initialiseres med det, vi sender som parametre:
Main.java
123456789101112131415161718192021package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }
Vi initialiserede Person-objektet bob ved hjælp af konstruktøren ved at videregive name, age og gender som parametre. Derefter udskrev vi dets parametre på skærmen og ser, at objektet har feltværdier som angivet i konstruktørens parametre.
Konstruktøroverbelastning
Konstruktøren kan også overbelastes og behøver ikke at dække initialisering af alle klassens felter. For eksempel, hvis vi ikke ønsker at angive Alices køn, kan vi overbelaste konstruktøren til kun at acceptere 2 parametre og initialisere felterne med dem:
Main.java
12345678910111213141516171819202122232425262728package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }
Det kan konkluderes, at en konstruktør, ligesom en metode, kan overbelastes og acceptere forskellige antal og typer af parametre.
Standardkonstruktør
En standardkonstruktør er en konstruktør, der ikke tager nogen parametre og initialiserer ikke nogen felter. Den findes i alle klasser som standard, hvis de ikke har nogen anden type konstruktør, hvilket er grunden til, at den kaldes standardkonstruktøren. Hver gang vi opretter et objekt af en hvilken som helst klasse, bruger vi en konstruktør. For at kunne bruge standardkonstruktøren, når vi allerede har en konstruktør, der accepterer parametre, skal vi også skrive en tom konstruktør:
Main.java
123456789101112131415161718192021222324252627282930313233package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }
Vi bruger 3 forskellige konstruktører til at initialisere hver af Person-objekterne. Som vi kan se i det sidste eksempel, har John hverken navn eller alder, fordi disse felter ikke er initialiseret for objektet. Dermed kan vi overbelaste konstruktøren så mange gange, som vi har brug for, og oprette objekter gennem den.
1. Hvilke af følgende udsagn om konstruktører er korrekte?
2. Hvad er formålet med en konstruktør i Java?
3. Hvilket af følgende kodeeksempler viser den korrekte måde at oprette en parameteriseret konstruktør på?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Can you explain more about how constructor overloading works?
What happens if I don't define any constructor in my class?
Can you give more examples of using the "this" keyword in constructors?
Awesome!
Completion rate improved to 2.63
Konstruktør
Stryg for at vise menuen
Sådan forenkles initialisering af klasser
Det kan være besværligt at initialisere hvert felt hver gang. Til dette formål har klasser konstruktører. Syntaksen for en konstruktør er som følger:
Main.java
1234modifier ClassName(ParameterType parameter1, ParameterType parameter2) { this.parameter1 = parameter1; this.parameter2 = parameter2; }
Gennemgang af hvert ord anvendt her:
modifier: Dette refererer til adgangsmodifikatoren, som ofte erpublicfor konstruktører. Tilfælde hvor en konstruktør kan have en anden adgangsmodifikator, vil blive behandlet i et andet kursus;ClassName: Dette er blot navnet på den klasse, hvor du opretter denne konstruktør;ParameterType: Dette er typen af parameter, der skal bruges i konstruktøren. Det er vigtigt at være opmærksom her, da denne parameter skal være samme type som feltet i klassen; For eksempel: Hvis klassen har to parametre,String nameogint age, skal konstruktøren have de samme parametre (hvis vi ønsker at initialisere alle felter gennem konstruktøren). Hvis vi kun ønsker at initialisere et specifikt klassefelt gennem konstruktøren, for eksempelname, skal vi kun bruge én parameter med samme type og navn som feltet i klassen;- Dernæst tildeles værdier til klassefelterne i konstruktørens krop ved hjælp af de værdier, der er angivet i parameteren.
"this"-nøgleordet
Ved hjælp af this-nøgleordet kan vi referere til klassefeltet, hvor vi skriver værdien af dette nøgleord. For eksempel, når vi har en klasse med to felter: name og age, kan vi skrive this.name inde i konstruktøren eller en metode, og det vil specifikt referere til klassefeltet, ikke den lokale variabel, der sendes som parameter til konstruktøren eller metoden. På denne måde kan vi initialisere klassefelter gennem konstruktøren ved at bruge syntaksen: this.name = name;.
Eksempel
Lad os se på et eksempel på en konstruktør i en klasse, der hjælper os med at initialisere alle felterne for at gøre det tydeligere:
Person.java
1234567891011class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } }
Vi har en klasse kaldet Person med tre felter. Hvert af disse felter er blevet tilføjet til konstruktøren ved hjælp af nøgleordet this. Derfor initialiserer konstruktøren felterne med værdierne fra parametrene. Lad os bruge denne konstruktør i main-metoden, så du kan se, at felterne initialiseres med det, vi sender som parametre:
Main.java
123456789101112131415161718192021package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); } }
Vi initialiserede Person-objektet bob ved hjælp af konstruktøren ved at videregive name, age og gender som parametre. Derefter udskrev vi dets parametre på skærmen og ser, at objektet har feltværdier som angivet i konstruktørens parametre.
Konstruktøroverbelastning
Konstruktøren kan også overbelastes og behøver ikke at dække initialisering af alle klassens felter. For eksempel, hvis vi ikke ønsker at angive Alices køn, kan vi overbelaste konstruktøren til kun at acceptere 2 parametre og initialisere felterne med dem:
Main.java
12345678910111213141516171819202122232425262728package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); } }
Det kan konkluderes, at en konstruktør, ligesom en metode, kan overbelastes og acceptere forskellige antal og typer af parametre.
Standardkonstruktør
En standardkonstruktør er en konstruktør, der ikke tager nogen parametre og initialiserer ikke nogen felter. Den findes i alle klasser som standard, hvis de ikke har nogen anden type konstruktør, hvilket er grunden til, at den kaldes standardkonstruktøren. Hver gang vi opretter et objekt af en hvilken som helst klasse, bruger vi en konstruktør. For at kunne bruge standardkonstruktøren, når vi allerede har en konstruktør, der accepterer parametre, skal vi også skrive en tom konstruktør:
Main.java
123456789101112131415161718192021222324252627282930313233package com.example; class Person { String name; int age; String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public Person(String name, int age) { this.name = name; this.age = age; } public Person() { } } public class Main { public static void main(String[] args) { Person bob = new Person("Bob", 20, "Male"); System.out.println("Bob's name: " + bob.name + ", Bob's age: " + bob.age + ", Bob's gender: " + bob.gender); Person alice = new Person("Alice", 17); System.out.println("Alice's name: " + alice.name + ", Alice's age: " + alice.age); Person john = new Person(); System.out.println("John's name: " + john.name + ", John's age: " + john.age); } }
Vi bruger 3 forskellige konstruktører til at initialisere hver af Person-objekterne. Som vi kan se i det sidste eksempel, har John hverken navn eller alder, fordi disse felter ikke er initialiseret for objektet. Dermed kan vi overbelaste konstruktøren så mange gange, som vi har brug for, og oprette objekter gennem den.
1. Hvilke af følgende udsagn om konstruktører er korrekte?
2. Hvad er formålet med en konstruktør i Java?
3. Hvilket af følgende kodeeksempler viser den korrekte måde at oprette en parameteriseret konstruktør på?
Tak for dine kommentarer!