Dagens föreläsning, kap 2-4 Inte allt i kapitlen men lite blandat Metoder Åtkomstmodifierare Parametrar Konstruktorer Karlstads universitet, Johan Öfverberg Funktionsanrop i Java (vid static) Samma modul Annan modul Metodnamn(uttryck,…); Modulnamn.metodnamn(uttryck,…); class Test{ public static void main(String args[]){ int i=2,j=4,k,res; k=metod(i); System.out.println(k); res=Math.max(i,j); System.out.println(res); } public static int metod(int i){ return i*i; } } Karlstads universitet, Johan Öfverberg Metodanrop i Java Vad är fel? public class Test{ public int metod(int i){ System.out.println("metod i Test körs"); return i*i; } public static void main(String args[]) { int i=2,j=4,k,res; k=metod(i); System.out.println(k); res=Math.max(i,j); System.out.println(res); } } Lösningen är inte att göra metod static! Karlstads universitet, Johan Öfverberg Karlstads Universitet, Johan Öfverberg 1 Åtkomstmodifierare till fält och metoder private – inkapsling, åtkomst enbart i objektet protected – inkapsling, åtkomst enbart i objektet, kan ärvas public – ej inkapsling, åtkomst ’överallt’ Paket åtkomst Karlstads universitet, Johan Öfverberg Metodmodifierare final – Metoden går inte att omdefiniera i subklasser synchronized – Metoden innehåller synkroniseringslås, används vid flertrådade applikationer native – Metoden är implementerad i annat programmeringsspråk Karlstads universitet, Johan Öfverberg Metodmodifierare abstract – Metoden saknar implementation, måste implementeras i subklasss static – Metoden är en klassmetod som kan anropas direkt via klassnamnet, har endast tillgång till static deklarerade metoder och attribut (existerar fristående av objekt) public, private och protected – inkapslingskontroll Karlstads universitet, Johan Öfverberg Karlstads Universitet, Johan Öfverberg 2 Inkapslade datatyper De primitiva datatyperna finns även representerade som Java-klasser Heter samma som datatypen fast inleds med versal – int är undantag, klassen heter Integer – char är undantag, klassen heter Character Objekt ur dessa datatyper skall inte förväxlas med variabler ur de primitiva datatyperna Karlstads universitet, Johan Öfverberg Konstruktormetoden Då ett Javaobjekt skapas görs det mha. nyckelordet new KlassNamn(); – KlassNamn() är ett anrop till en metod med samma namn som klassen (kallas konstruktor) – denna metod måste anropas vid tillverkning av objekt – går att definiera en egen konstruktor, används isf. – om ingen egendefinierad används en defaultkonstruktor Om en egendefinierad konstruktor finns måste den användas Karlstads universitet, Johan Öfverberg Konstruktor i Java (1/2) public class Klocka { private int tim, min, sek; public Klocka(){ this (0);//this är en referens till objektet } public Klocka(int t){ this(t,0); } public Klocka(int t, int m){ this(t,m,0); } public Klocka(int t, int m, int s){ tim=t; min=m; sek=s; } public String getTid(){ return (tim+":"+min+":"+sek); Karlstads universitet, Johan } Öfverberg Karlstads Universitet, Johan Öfverberg 3 Konstruktor i Java (2/2) public static void main(String[] args) { Klocka t1 = new Klocka(10, 59, 59); System.out.println("t1 är nu "+t1.getTid()); t1 = new Klocka(10,59); System.out.println("t1 är nu "+t1.getTid()); t1 = new Klocka(10); System.out.println("t1 är nu "+t1.getTid()); t1 = new Klocka(); System.out.println("t1 är nu "+t1.getTid()); } } Karlstads universitet, Johan Öfverberg Konstruktoranrop Vid egendefinierad konstruktor i superklass – i subklass måste ett anrop till superklassens konstruktor ske manuellt super(param..); Vid användande av defaultkonstruktor i superklass – anrop kommer att ske automatiskt innan subklassens konstruktor körs Karlstads universitet, Johan Öfverberg Metodanrop i Java Nu funkar det! public class Test{ public Test(){ int i=2,j=4,k,res; k=metod(i); System.out.println(k); res=Math.max(i,j); System.out.println(res); } public int metod(int i){ System.out.println("metod i Test körs"); return i*i; } public static void main(String args[]) { Test t=new Test(); } } Karlstads universitet, Johan Öfverberg Karlstads Universitet, Johan Öfverberg 4