Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp Metodnamn Parametrar Kodsatser inom matchande klamrar En metod är åtkomlig i hela den egna klassen. Dvs den kan anropas från alla andra metoder i klassen 1
Anropa Metoder Publika metoder kan anropas Anrop görs med punktnotation p1.setnamn("kalle"); PersonTest p1 : Person main(string[]): void setnamn("kalle") Använder 1..1 1..* Person -namn : String -persnr: String + setnamn(n : String) + setpersnr(p : String) + print() : void Metoder - Anropa Exekveringen överförs till den anropade metodens första sats Return återlämnar exekveringen public class Person private String namn; private String persnr; public void setnamn(string n) namn = n; 3 1 public class PersonTest public static void main(string[] args) Person p1 = new Person(); 2 public void setpersnr(string p) persnr = p; public void print() System.out.println("Namn\t" + namn); System.out.println("Persnr\t" + persnr); 5 p1.setnamn("kalle Karlsson"); 4 p1.print(); 6 Metoder - Parametrar private String namn; Ett privat fält kan inte nås av andra objekt Publika metoder som ger objekten tillgång (set- och get-metoder) set - tilldelar fältet sitt värde get - lämnar ut fältets värde Parametrar används för att skicka information in till en metod 2
Personklassens setnamn() public class Person private String namn; public void setnamn(string n) namn = n;... PersonTest public class PersonTest public static void main(string[] args) Person p1 = new Person(); p1.setnamn( Kalle ); p1.setnamn(kalle); // ej tillåtet p1.setnamn(10); // ej tillåtet p1.setnamn(); // ej tillåtet Parametrars Räckvidd Räckvidden definierar var en metod, variabel kan användas i programmet public class Person Fält och metoder // Fält klassen private String namn; Parametrar metoden // Metoder public void setnamn(string n) namn = n; public String getnamn() return namn; 3
Metoder - Parametrar Parametrar överförs via värdeanrop d.v.s endast en kopia skickas till metoden För de primitivatyperna innebär det att kopian är skiljd från originalet För objektreferenser refererar dock kopian till samma objekt som originalet Värdeanrop - Exempel public class VardeAnrop public void nollstall(int tal) tal = 0; public static void main(string[] args) VardeAnrop v = new VardeAnrop(); int tal = 10; System.out.println("tal = " + tal); v.nollstall(tal); System.out.println("tal = " + tal); Värdeanrop - objekt public class ReferensAnrop public void bytnamn(person p, String n) p.setnamn(n); public static void main(string[] args) ReferensAnrop ra = new ReferensAnrop(); Person p1 = new Person(); p1.setnamn("kalle"); p1.setpersnr("711111-1111"); p: Person (kopia) Person namn: "Kalle" persnr: "711111-1111" p1: Person (orginal) p1.print(); ra.bytnamn(p1, "Stina"); p1.print(); 4
Konstanta Parametrar Förhindrar att en metod modifierar inskickade parametrar. Exempel: public void nollstall(final int x) x = 0; // Kompileringsfel Returvärden Returvärden används för att skicka information tillbaka från en metod Alla metoder har en returtyp, men inte alla metoder returnerar något åtkomstmodifierare returtyp metodnamn(parametrar) Returtypen kan t.ex. vara: void int double String // Returnerar ingenting // Returnerar ett heltal // Returnerar ett decimaltal // Returnerar en textsträng Returvärden När en metod returnera ett värde tilldelas metodanropet värdet. obj.settal(10); obj.gettal(); Uttrycket obj.gettal() kommer att ersättas med värdet 10 System.out.println(obj.getTal()); // eller 10 int i = obj.gettal(); // i = 10 10 public int gettal() return tal; 5
Utöka Klassen Person Förnamn Efternamn Ålder Set och get Även set och get för hela namnet Person - fornamn : String - efternamn : String - alder : int -persnr: String + setfornamn(f : String) + setefternamn(e : String) + setalder(a : int) + setpersnr(p : String) + setnamn(f : String, e : String) + getfornamn() : String + getefternamn() : String + getalder() : int + getpersnr() : String + getnamn() : String + print() : void Överlagring Av Metoder Flera metoder med samma namn Varje ny variant måste ha en egen signatur, d.v.s olika antal eller olika typer på parametrarna. Den metod som passar bäst anropas Alla varianter ska ha samma betydelse Ingen gräns i antal överlagringar Överlagring - Exempel signatur public void skrivut(string s) // kod för att skriva ut strängen s signatur public void skrivut(string s, Color c) // kod för att skriva ut strängen s i färgen c signatur public void skrivut(string s, Color c, Font f) // kod för att skriva ut strängen s // i färgen c och med fonten f 6
Konstruktorn Reglerar hur ett objekt ska skapas Är deklarerad som public eller private Saknar returtyp Har samma namn som klassen Eventuellt parametrar public Punkt() Konstruktorn är ofta överlagrad Konstruktorn (forts.) Används för att skapa en instans av en klass Är ingen medlem i klassen Används för att initiera objekt (fält) Returnerar inget värde Exempel: public Punkt(int x, int y) xkord = x; ykord = y; Defaultkonstruktorn Om ingen konstruktor anges, kommer en default-konstruktor att tillhandahållas. Tar inga parametrar Innehåller ingen kod public Punkt() Förklarar varför vi kunnat skriva: Punkt p1 = new Punkt(); 7
Anrop Av Konstruktorn En konstruktor körs bara en gång, när ett objekt skapas med nyckelordet new Argumenten i konstruktoranropet måste matcha parametrarna i konstruktordeklarationen Punkt p1 = new Punkt(); // OK p1.setx(10); Punkt p2 = new Punkt(10, 20); // Fel Punkt p3 = new Punkt(10); // Fel This Är en självreferens, dvs en referens till det egna objektet Används ofta för att: 1. Skicka en referens för det egna objektet till ett annat objekt (tvåvägs kommunikation) 2. Från en konstruktor anropa en annan konstruktor i samma klass 3. Skilja mellan fält och lokala variabler med samma namn Överlagring Av Konstruktor Även konstruktorn kan överlagras Samma regler som för metoder public class Punkt private int xkord; // Punktens x-koordinat private int ykord; // Punktens y-koordinat public Punkt(int xkord, int ykord) this.xkord = xkord; this.ykord = ykord; public Punkt() this(0, 0); 8
Konstanter (final) Modifieraren final gör ett fält till en så kallad konstant Kan sen inte förändras i programmet Värdet för fältet måste sättas direkt vid deklarationen eller i konstruktorn Finns flera konstruktorer måste konstanten få ett värde i samtliga Konstanter Exempel public class Punkt private int xkord; // Punktens x-koordinat private int ykord; // Punktens y-koordinat private final int SIZE; private final int MAX_X = 500; private final int MAX_Y = 500; public Punkt(int xkord, int ykord, int size) this.xkord = xkord; this.ykord = ykord; this.size = size; public Punkt(int xkord, int ykord) this(xkord, ykord, 10); Statiska Medlemmar Finns endast i ett exemplar för klassen, som alla objekt delar Lagras och används på klassnivå istället för på objektnivå public class Punkt... private static int antalpunkter = 0; public Punkt(int xkord, int ykord, int size) antalpunkter++;... 9
Statiska Metoder Metoder tillhör klassen och anropas med namnet på klassen public class Punkt... private int xkord; private static int antalpunkter = 0; public static getantalpunkter() // kan inte komma åt icke statiska fält i en // statisk metod xkord ej tillgänglig här!!! return antalpunkter;... // Anrop av statisk metod int antal = Punkt.getAntalPunkter(); OBS! Det behövs inget Punktobjekt för att anropa den statiska metoden. tostring() public String tostring() Alla klasser har en tostring metod Används för att skapa en strängrepresentation av aktuellt objekt Bör alltid omdefinieras // i klassen Punkt public String tostring() return "(" + xkord + ", " + ykord + ")"); // anrop av metoden ger t.ex. följande utskrift // (12, 234) eller (198, 32) Klass i en klass Väldigt ofta används andra objekt som fält i ett objekt T.e.x kan för- och efternamn i våran Person-klass flyttas till en ny klass Namn - fornamn : String - efternamn : String + Namn(f : String, e : String) + Namn() + setfornamn(f : String) + setefternamn(e : String) + setnamn(f : String, e : String) + getfornamn() : String + getefternamn() : String + getnamn() : String + tostring() : String Person - namn : Namn - antalpersoner : int + Person(n : Namn, a : int, p :String) + setnamn(n : Namn) + setnamn(f : String, e : String) + setfornamn(f : String) + getnamn() : Namn + getnamnasstring() : String + getefternamn() : String + getantalpersoner() : int + tostring() : String 10
Dokumentationskommentarer Används för att automatgenerera dokumentation Beskriver klasser, metoder och fält javadoc genererar HTML-kod /** * Dokumentation */ Klasser och fält Första meningen ska vara en summering /** * Representerar en tvådimensionell punkt. Klassen är tänkt * att användas i olika geometriska klasser såsom cirklar, * rektanglar etc. Innehåller information om punktens x- och * y-koordinat. * * @author Robert Eriksson * @version 1.0 */ public class Punkt /** Punktens x-koordinat. */ private int xkord; /** Punktens y-koordinat. */ private int ykord; Konstruktor & metod /** * Sätter för- och efternamn på personen. Utifrån det för- och * efternamn. som skickas som argument till metoden, skapas * ett nytt <code>namn</code> objekt. Referensen till detta * objekt tilldelar vi vårat fält <code>namn</code>. * @param f personens förnamn * @param e personens efternamn */ public void setnamn(string f, String e) namn = new Namn(f, e); /** * Returnerar förnamnet på personen. * @return personens förnamn */ public String getfornamn() return fornamn; 11
Javadoc Javadoc skapar HTML-filer utifrån deklarationer och dokumentations 1. Samla alla filer i en katalog 2. Öppna en DOS-prompt och skriv javadoc *.java i katalogen 3. Öppna filen index.html i en webbläsare 12