Konstruktor i Java: Instansiera objekt


Nyckelord: konstruktor, objekt, klass

Konstruktor Java

Den här artikeln kommer visa hur man använder en konstruktor i Java för att skapa ett objekt från en klass. Vi kommer se att det är med hjälp av en konstruktor som man ger objektet de värden som man önskar att det ska ha.

Vad är en konstruktor i Java?

En konstruktor beskrivs ofta som en speciell metod som används för att instansiera ett objekt från en klass. Det som händer är att när man kallar på en konstruktor från en klass så skapar konstruktorn ett objekt från motsvarande klass. Det är med hjälp av konstruktorn som man anger de inparametrar, det vill säga, vilka attribut som objektet ska ha.

Hur fungerar en Konstruktor i Java?

I Java har alla klasser en konstruktor som standard, även om man inte har skapat en själv. Men för att kunna ange specifika attribut för ett objekt måste man först skapa en egen konstruktor. En konstruktor har alltid samma namn som klassnamnet den tillhör.

Konstruktorn i Java använder man för att skapa ett objekt från en klass.

När man har en klass som man vill skapa ett objekt från så anropar man konstruktorn. Man säger att man instansierar ett objekt från en klass. Det som händer är att när man skapar ett objekt så utför konstruktorn sina operationer först innan resterande delar av klassen exekveras. Konstruktorn är alltså det första som blir anropat när man skapar ett objekt.

Vidare, viktigt att notera är att en konstruktor inte returnerar något. Till skillnad från en metod där vi kan välja om den ska returnera något eller ej, så kommer en konstruktor alltid vara av typen void, alltså att den inte returnerar något värde.

Kortfattat så är en konstruktor:

  • En metod som instansierar objekt från en klass.
  • Används för att ge specifika attribut till ett objekt.
  • Har samma namn som klassen den tillhör.
  • Returnerar inga värden.
  • Finns i alla klasser som standard, men behövs om man vill ge specifika attribut till ett objekt.

Tre typer av konstruktor i Java

Man brukar säga att det finns tre typer av konstruktor i Java. Det som skiljer dem åt är antalet inparametrar och ifall det finns ett tillhörande kodblock till konstruktorn eller ej.

Konstruktor Java
Figur 1: Konstruktor i Java
  • Standard konstruktor: Om du inte skapar någon konstruktor i din klass så sätter kompilatorn in en så kallad default konstruktor i din kod åt dig. Det är inget vi ser källkoden eftersom den infogas i koden under kompileringen. Om du själv implementerar en konstruktor så kommer du inte längre få en standard konstruktor från kompilatorn.
  • No-arguments konstruktor: Det är en konstruktor som inte har några input argument, som namnet tydligt antyder. En no-arguments konstruktor är lik en standard konstruktor, med skillnaden att den kan ha vilken kod som helst, vilket inte en standard konstruktor kan ha som är tom.
  • Parameteriserad konstruktor: En konstruktor som har en eller flera inparametrar och därför använder man en parameteriserad konstruktor när man vill tilldela värden till de olika objekten.

Hur skapar man en konstruktor i Java?

Först och främst, det är viktigt att komma ihåg att namnet på konstruktorn måste vara exakt samma som namnet på klassen, och kom ihåg, java är skiftlägeskänsligt. Vidare, viktigt att understryka att en konstruktor inte kan returnera något.

Syntax: Deklarera en konstruktor i Java

I Java, använder man följande syntax för att ange en konstruktor som hanterar invärden (parameterized):

// Klassnamet måste vara densamma som klassnamnet
// namn1 och namn2 är inparametrarna till konstruktorn av en viss datatyp
Klassnamnet(datatyp namn1, datatyp namn2){  

    // "this" syftar till nuvarande objektets klassvariabel
    this.namn1 = namn1;                     
    this.namn2 = namn2;
    // osv..
}
  • Observera att konstruktorns namn måste vara detsamma som namnet för klassen.
  • Inparametrarna (namn1 och namn2) är typiskt detsamma som de klassvariabler man definierar när man skapar klassen, det vill säga, de attribut man vill ge till objektet man skapar.
  • Kommandot “this” syftar alltid till det nuvarande objektet. Det innebär att genom att skriva “this”, så tilldelar man klassvariabeln värdet från konstruktorn. Detta värdet blir alltså objektets unika värde.

Exempel: Konstruktor i Java

Låt oss fortsätta på vårt exempel med klassen Dog. Vi bygger vidare på koden från föregående sida och lägger till konstruktorn för Dog.

//Skapar klassen "Dog". Praxis är att klassnamn har stor bokstav
class Dog {

    //Definierar tillstånden/attributen för klassen hund
    String name;
    int age;
    String breed;
    String color;

    //Definiera konstruktorn
    Dog(String name, int age, String breed, String color){
        this.name = name;
        this.age = age;
        this.breed = breed;
        this.color = color;
    }

    //Definierar metoderna för klassen hund
    void bark(){
        //Innehåller information om hur hunden gör när den skäller
    }

    void eat(){
        //Innehåller information om hur hunden gör när den äter
    }

    void sleep(){
        //Innehåller information om hur hunden gör när den sover
    }

}

Vi tar och tittar lite närmare på själva konstruktorn.

//Definiera konstruktorn
    Dog(String name, int age, String breed, String color){
        this.name = name;
        this.age = age;
        this.breed = breed;
        this.color = color;
    }

På den översta raden i konstruktorn (rad 11 i editorn) så har vi namnet på konstruktorn, som självklart också är Dog, följt av de inparametrar vi vill att konstruktorn ska ha. Som du ser så är inparametrarn densamma som de klassvariabler som vi definierade när vi skapade klassen (rad 5-8 i editorn).

Dog(String name, int age, String breed, String color){

Det vi säger är alltså; för att skapa objektet hund, krävs fyra stycken inparametrar som heter: name, age, breed och color. Inparametrarna kan förstås heta vad som helst, men för att inte blanda ihop dem med någon annan variabel, är det lämpligt att döpa inparametrarna till samma namn som klassvariablerna.

I de resterande fyra raderna

this.name = name; 
this.age = age; 
this.breed = breed; 
this.color = color;

tilldelar vi parametrarna till klassvariablerna. Genom att skriva this. framför parametrarna, vet vi att det är klassvariablerna för detta objekt som vi kommer att använda.

Vad är det för skillnad mellan en konstruktor och en metod?

Även om det kan uppfattas som att en konstruktor och en metod är nästan identiska – och som vi nämnde tidigare så beskrivs en konstruktor ibland som en ”speciell metod” – så finns det ett par huvudsakliga skillnader: 

  • En konstruktor returnerar inget, vilket en metod kan göra. Med andra ord, en konstruktor är alltid void.
  • Syftet med en konstruktor är att initialisera objektet i en klass medan syftet med en metod är att utföra en uppgift genom att utföra ett kodblock.
  • En konstruktor måste ha samma namn som klassen, medans namnet på en metod bör inte vara samma namn som för klassen.
  • Om vi inte skapar en konstruktor så tillhandahålls en standard-konstruktor av den kompilator vi använder, men när det gäller en metod så tillhandahålls ingen standardmetod.

Sammanfattning: Konstruktor i Java

När man har en klass som man vill skapa ett objekt från så anropar man konstruktorn, så det är alltså konstruktorn som används för att instansiera ett objekt från en klass. Vi skapar en konstruktor genom att ange klassens namn – eftersom en konstruktor alltid måste ha samma namn som klassen – följt av de inparametrar vi vill att konstruktorn ska ha. Avslutningsvis, det är viktigt att komma ihåg att en konstruktor inte kan returnera något.

Vanliga frågor och svar: Konstruktor i Java

Måste en konstruktor ha samma namn som klassen den tillhör?

Ja det måste den. En konstruktor måste ha samma som klassen den tillhör.

Vad betyder nyckelordet this som står framför variablerna i konstruktorn?

Nyckelordet this hänvisar till det aktuella objektet i en metod eller konstruktor. Vad det innebär är att om man använder this så tilldelar man klassvariablerna de värdena som kommer från konstruktorn.

Vad händer om jag glömmer att skapa en konstruktor?

Det som händer är att om en konstruktor inte är skapad så tillhandahålls en standard-konstruktor av den kompilator vi använder

Vad tyckte du om sidan?

Lämna gärna feedback och hjälp oss göra sidan bättre

Feedback gör oss bättre!

Lämna gärna feedback om vad du tyckte om avsnittet!