I början av Januari 2014 låstes Whoa och du kan alltså ej logga in eller skriva något nytt i forumen. Innehåll i forum osv kommer finnas tillgängligt. Läs Mer »

   

2008-01-03 20:33

JAVA fråga

hejhej. Jag har en fråga ang. konstruktorn i java. Vad är den till för egentligen? 


Jag har gjort såhär i en klass: 

package övn6_2;

public class Kurs {
        
        private String kurskod;
        private String kursnamn;
        private Lärare ansvararFör;
        
    public Kurs() {
    }
    
    public Kurs(String newKurskod, String newKursnamn){
        setKurskod(newKurskod);
        setKursnamn(newKursnamn);
    }
... ... ... ...

Har jag 2 st konstruktorer där? Skiten funkar som den ska men jag förstår inte koden, ser inte det logiska. Skulle någon kunna vara snäll och förklara? Tenta om en vecka, lärare i turkiet  =/

jag har alltid rätt.

2008-01-03 21:35
du har två konstruktorer.

 public Kurs() {  en konstruktor
    }

 public Kurs(String newKurskod, String newKursnamn){ en till konstruktor
        setKurskod(newKurskod);
        setKursnamn(newKursnamn);
    }

Shuu

2008-01-03 21:39
ja jag tänkte väl det. Vad gör en konstruktor?
jag har alltid rätt.

2008-01-03 23:08
alltså, när du skapar klassen så kan du skapa den på 2 olika sätt, beroende på vad du har för data...
Denna användare har skrivit alla inlägg där användaren har tagits bort från whoa.

2008-01-07 01:34
En konstruktor är den metod som först körs när du skapar ett nytt object,
tex "Kurs minkurs = new Kurs();". Således för man in kod som man vill ska köras i samband med skapandet av objektet. Det handlar i de alldra flesta fall om initiering av objektets instansvariabler.

Som din kod ser ut nu så har du dels en tom konstruktor som gör någonting och en som sätter kurskod och kursnamn. Således kan du med säkerhet tabort den första konstruktorn och din kod blir då:


package övn6_2;

public class Kurs {
        
        private String kurskod;
        private String kursnamn;
        private Lärare ansvararFör;
    
    public Kurs(String newKurskod, String newKursnamn){
        setKurskod(newKurskod);
        setKursnamn(newKursnamn);
    }



2008-01-07 01:36
Förlåt jag menade "Som din kod ser ut nu så har du dels en tom konstruktor som gör ingenting..."

2008-01-07 03:31
Förenklat man säga att konstruktorn är en slags "metod" som skapar en instans av en klass (ett objekt). En konstruktor skiljer sig dock från en metod på flera sätt, konstruktorn kan inte returnera någon datatyp, ärva från en parent, etc..


En klass kan ha flera överlagrade konstruktorer som skiljs åt genom att de tar olika parametrar. Vi kan tex låtsas att klassen Bil har följande konstruktorer:

public Bil() { ... }
public Bil(String regNr) { ... }
public Bil(String regNr, int årsModell) { ... }
public Bil(String regNr, boolean ärTjejKörd) { ... }
public Bil(String regNr, int årsModell, boolean ärTjejKörd) { ... }
..osv, in i det oändliga

Vilken av konstruktorerna som kommer att användas beror på vilka argument du skickar med då du skapar ditt Bil-objekt.

Bil b1 = new Bil();
Bil b1 = new Bil("ABC-123");
Bil b1 = new Bil("ABC-123", 1997);
Bil b1 = new Bil("ABC-123", true);
Bil b1 = new Bil("ABC-123", 1997, true);

Jag brukar rekommendera mina elever (nu lät jag viktig ;P) att alltid skriva en defaultkonstruktor som tilldelar eventuella instansvariabler standardvärden, även om den inte används i uppgiften.
mensvärk är livets krydda.

2008-01-07 03:37
Upptäckte en grej.. Varför använder du set-metoder i konstruktorn på det sätt du gjort nu? Du bör istället tilldela instansvariablerna sina värden direkt i konstruktorn.


    public Kurs(String newKurskod, String newKursnamn){
        kurskod = newKurskod;
        kursnamn = newKursnamn;
    }
mensvärk är livets krydda.

2008-01-07 09:31
så ska vi inte göra.. man ska använda åtkomstmetoder så blir det lättare att underhålla programmet. Vet inte varför, hänger inte med riktigt haha.

Tenta på fredag. Det sjuka är att vi ska skriva koderna för ett helt program för hand med papper och penna. Borde man inte få använda dator så man kan testa skiten när man är klar. I verkligheten skriver man ju inte på papper man ska ha chans att testa programmet och ändra något om det behövs. Dessutom får vi inte ha bok.
jag har alltid rätt.

2008-01-07 22:55
Lättare att underhålla programmet my ass. Getters and setters i all ära, de är ju bra och i många fall nödvändiga i java (tex många java bibliotek kräver javabean notation för att dessa ska kunna göra någonting kul med dina fält) för att kunna ge tillgång till dina instansvariabler till kod som inte ligger innanför din klass.

Fast det blir bökigare än nödvändigt om all tillgång till klassens variabler sköts internt via getters and setters. Innanför klassen är det heller inte så mycket att underhålla (ifall det är det då kan du fundera på att flytta sån logik till en intern metod), annat blir det förstås om du skapar instanser av din klass överallt i din applikation. Då är det mkt smidigare att använda åtkomstmetoder.
There are no stupid questions, just stupid people - Mr. Garrison