Gå til innhold

Anbefalte innlegg

nå lanserer jeg enda et "dumt" spørsmål i min dumme-spørsmål-serie her på Java-delen av forumet.

 

jeg har ikke funnet ut hva en konstruktør er; definisjonen om hvorfor den 'skal' være med i en klasse. på Sun sine sider har jeg funnet endel info om hvordan en finner ut informasjon om konstruktøren men ike hva det er og hvorfor den er med...

Lenke til kommentar
Videoannonse
Annonse

En konstruktør ligner på en metode ved at den har hode og kropp. Hodet består av klassenavn og parameterliste. Klienten bruker konstruktøren sammen med det reserverte ordet new for å skape et objekt av klassen.

 

 

Konstruktøren er den som kjøres når et objekt blir opprettet.

 

public Kunde {
   private String navn;

// Konstruktør - Start
   public Kunde ( String pnavn ) {
          navn = pnavn;
   }
// Konstruktør - Slutt

   public String finnNavn() {
          return navn;
   }
}

Lenke til kommentar
  • 4 uker senere...

En konstruktør, brukes for når det skal lages et nytt objekt av en klasse.

 

Du har for eksempel laget en database med videoer, og vil legge til en ny video.

 

Kostruktoren i videoklassen brukes så for å fylle inn all informasjon du har spesifisert er nødvendig i et videoobjekt.

 

F.eks

Navn

lengde

dvd eller VHS

osv..

Lenke til kommentar

Vi har to forskjellige typer konstruktører - Parametrisk (setter inn standard verdier selv) og Standard (standardverdier er satt). Du trenger ikke ha begge to.

 

class Kunde{
 private String navn;

// Konstruktør - Parametrisk
  public Kunde ( String pnavn ) {
         navn = pnavn;
  }

// Standard konstruktør
  public Kunde() {
         navn = "Per";  //eller navn = "";
  }
}

Endret av EZAccess
Lenke til kommentar
  • 9 år senere...

Hvordan skriver du det hvis du har flere parametere du ønsker å få satt i konstruktøren?
Går grunnkurs i programmering (java), og jobber med en oppgave om å lage et system for et enkelt spill. Jeg ønsker at konstruktøren også skal sette karakterens spillertype, på samme måte som name. Hvordan skriver jeg det? På forhånd takk.

 

Her er det jeg har skrevet av fields og constructor.

    // Spillernavn, karaktertype og karakterhelse
    private String name;
    private String type;
    private int health;

    /**
     * Oppretter spiller med navn
     */

    public Player(String username)
    {
        name = username;
        health = 100;
    }
Endret av Camorra
Lenke til kommentar

Hvordan skriver du det hvis du har flere parametere du ønsker å få satt i konstruktøren?

Går grunnkurs i programmering (java), og jobber med en oppgave om å lage et system for et enkelt spill. Jeg ønsker at konstruktøren også skal sette karakterens spillertype, på samme måte som name. Hvordan skriver jeg det? På forhånd takk.

 

Her er det jeg har skrevet av fields og constructor

 

Sånn, trenger du flere kan du bare legge til det akkurat slik jeg gjorde, uavhengig av om det er string eller int osv:

 

    // Karakterens navn
    private String name;
 
    // Karakterens spillertype
    private String type;
 
    // Karakterens helse
    private int health;
 
    /**
     * Oppretter spiller med navn
     */
 
    public Player(String username, String usertype)
    {
        name = username;
        type = usertype;

        health = 100;
    }

 

Men jeg anbefaler å heller gjøre det slik, sånn at du slipper å bruke forskjellig navn:

 

    // Karakterens navn
    private String name;
 
    // Karakterens spillertype
    private String type;
 
    // Karakterens helse
    private int health;
 
    /**
     * Oppretter spiller med navn
     */
 
    public Player(String name, String type)
    {
        this.name = name;
        this.type = type;
 
        health = 100;
    }

og bare for ordens skyld, skal du opprette en new Player() nå, du altså sende med 2 strings.

 

Før: Player spiller1 = new Player("Navn");

Nå: Player spiller1 = new Player("Navn", "Type");

Endret av MrLG
Lenke til kommentar
  • 2 uker senere...

Konstruktører brukes hovedsaklig til å initialisere et objekt til et minimum før man begynner å bruke objektet. En vanlig praksis i Java er å bruke konstruktøren til å initialisere lister og andre datastrukturer til å peke på en tom datastruktur i stedet for at de peker på null.

 

I Java har man den luksusen med at variabler blir satt til null/false/0 av kompilatoren når de blir definert, men i språk som C++ hvor dette ikke er standardoppførsel, bruker man ofte konstruktøren til å initialisere slike variabler til noe fornuftig, null/false/0, eller hva man måtte ønske. C++-standarden sier ingenting om hva som burde ligge i minnet til en ikke-initialisert variabel, så her ligger det ofte hva som helst, avhengig av hva som tilfeldigvis lå i den delen av minnet fra før (garbage).

 

Konstruktører kom tradisjonelt fra erfaringen i C hvor man ikke hadde konstruktører (eller objekter på samme måte), men enkle data structures:

 

 

struct Vector
{
    double x, y, z;
};
 
int main()
{
    struct Vector direction;
    direction.x = 0.0; direction.y = 0.0; direction.z = 0.0;
}

 

I praksis skrev utviklere i C svært ofte funksjoner for å bygge opp structs:

 

 

struct Vector* emptyVector() {
    struct Vector* v = malloc(sizeof struct Vector);
    v->x = 0.0; v->y = 0.0; v->z = 0.0;
    return v;
}
 
struct Vector* newVector(double x, double y, double z) {
    struct Vector* v = malloc(sizeof struct Vector);
    v->x = x; v->y = y; v->z = z;
    return v;
}

 

Dette ble så vanlig praksis at senere objektorienterte språk som C++ og Java bygget slike konstruktører inn som en del av språket:

 

 

class Vector {
    double z, y, z;
    public Vector(double x, double y, double z) {
        this.x = x; this.y = y; this.z = z;
    }
    public Vector() {
        this(x, y, z);
    }
}
Lenke til kommentar

Litt avhengig av hva man ønsker å oppnå kan man bruke en Factory og/eller en Builder for å opprette instanser (dvs. kapsle inn konstruktøren, den vil jo fortsatt være i bruk). Factory gir muligheten til å abstrahere vekk hvilken implementasjon som brukes, mens Builder gir bedre kontroll på initialiseringen (ryddigere alternativ til å ha utallige konstruktører med ulik parametersignatur).

 

http://en.wikipedia.org/wiki/Factory_pattern

http://en.wikipedia.org/wiki/Builder_pattern

 

(artig at det ble liv i denne tråden igjen etter ti år ... :o)

Endret av quantum
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...