Exempel atriangle.changesize (100, 50); // OK atriangle.changesize (100); // fel antal atriangle.changesize ( 1, 50); // fel datatyp char c = atriangle.getarea (); // fel datatyp Parameteröverföring I Java överförs alla parameter by value Värdet på den aktuella parametern kopieras till den formella parametern (motsvarar tilldelningssats) När en referens överförs blir den formella parametern ett alias för aktuell parameter Return-satsen anger vilket värde som returneras (dvs överförs tillbaka) Överförs också by value Metodkropp Innehåller lokala deklarationer & exekverbara satser Lokala deklarationerna gäller bara internt i metoden De formella parametrar betraktas som lokala deklarationer Om resultattyp är inte void måste minst en return-sats finnas Exempel public float getarea () Lokal variabel { float temp = 0.0; temp = height * width / 2; return temp; } 1
Konstruktordeklaration En konstruktor är en speciell metod Samma namn som klassen Ingen explicit resultattyp Används för att initialisera objektets attribut Får ha parameter, t ex för att påverka initialiseringen Exempel: public Triangle () { } Abstraktion En abstraktion är en förenklad men trogen modell av någonting som kan vara väldigt komplicerat En objekt/klass är abstrakt i den meningen att vi inte behöver känner till alla detaljer för att kunna använda det Vi behöver t ex inte känna till koden till move Information hiding och inkapsling Med information hiding menas att viss information görs oåtkomlig för användaren T ex för att säkerställa att xposition och yposition bara förändras på ett kontrollerad sätt (genom move) Med inkapsling menas att abstraktion och information hiding används för att definierar meningsfulla klasser Abstraktionen görs offentlig (public) Känslig och oväsentlig data görs oåtkomlig (private) Programmeringsfel En dator gör inte det programmeraren menade, den gör precis det ett programs semantik föreskriver. Man kan skiljer tre typer av fel Kompileringsfel När kompilatorn upptäcker att syntaxreglerna ej har följts eller att vissa typer ej är kompatibla (t ex int i = c ;) Run-time fel När programmet kraschar när det körs, t ex pga division med noll eller att typer ej är kompatibla Logiska fel När programmet verkar fungera bra, men levererar fel resultat 2
Primitiva datatyper: Hel- och flyttal De olika heltals och flyttals typerna har olika storlek Typ byte short int long float double Storlek 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits Minimum -128-32,768-2,147,483,648 < -9 x 10 18 +/- 3.4 x 10 38 +/- 1.7 x 10 308 Maximum 127 32,767 2,147,483,647 > 9 x 10 18 med 7 signifikanta siffror med 15 signifikanta siffror Primitiva datatyper: Tecken En variabel av datatypen char sparar precis ett s k Unicode tecken Värdemängden är en ordnad uppräkning av tecken Det finns 65,536 unika Unicode tecken (16 bit) med tecken och symboler från olika språk, t ex 'å' och 'ö' Alla tecken är ordnade och varje tecken motsvarar en siffra (detta underlättar att kolla om ett tecken ligger t ex mellan 'a' och 'z') Se t.ex. http://www.unicode.org/ för detaljer Primitiva datatyper: Boolean En variabel av datatypen boolean innehåller antingen värdet eller värdet Används ofta för att definiera villkor logik Det finns tre logiska operatorer i Java inte (!), och (&&) och eller ( ) a!a a b a && b a b Konstanter Variabler som får inte ändras Markeras med reserverade ordet final Guideline: Använd bara stora bokstäver Exempel: final double PI = 3.14159; final char NEWLINE = \n ; Fördelar Vettiga namn istället för konstiga siffror eller tecken Lättare att förstå koden Enklare att uppdatera 3
Uttryck 1 Ett uttryck är en programkonstruktion som producerar (evalueras till) ett resultatvärde av en viss datatyp. Ett uttryck kan (bl a) vara: Ett primitivt värde (literal) -5, 1.23e2, c, En variabel smallbluerectangle, PI En metodanrop atriangle.changesize(50, 100); En tilldelning height = newheight Uttryck 2 Ett uttryck är en syntaktiskt korrekt kombination av literaler, variabler, metodanrop, tilldelningar och operatorer. Typiska exempel på operatorer: Aritmetiska, t ex +, -, *, /, Logiska:!, &&, Relationala, t ex ==,!=, <, >=, Uttryck kan vara komplexa Priotitetsordning för att bestämma hur det ska evalueras Se http://java.sun.com/docs/books/tutorial/java/nutsandbolts/expressions. html för en fullständig lista Relations operatorer == Identiskt lika!= Inte identiskt lika < Mindre än <= Mindre än eller lika med > Större än >= Större än eller lika med Prioritetsordning Operatorer med högre prioritet evalueras först Vid samma prioritet avgör associativiteten hos operatorerna (vänster-höger / höger-vänster) Uttryck: Evalueringsordning: Resultat: 5 + 12 / 5-10 % 3 6 3 1 4 2 Använd parenteser för att vara på säkra sidan (5 + (12 / 5)) - (10 % 3) 4
Exempel Uttryck 2 + 3 * 4 / 2 3 * 13 + 2 (3 * 13) + 2 3 * (13 + 2) 4 * (11-6) * (-8 + 10) (5 * (4-1)) / 2 Resultat 8 41 41 45 40 7 Uttryck 3 Resultatvärdets datatyp hos ett uttryck beror på operatorn och datatyperna hos operanderna. Uttryck 17 / 5 17.0 / 5 17 / 5.0 9 / 12 9 / 12.0 6 % 2 7 % 2.5-7 % 2.5 Resultat 3 3.4 3.4 0 0.75 0 2.0-2.0 int dollar = 25; float money; money = dollar; // OK, money blir 25.0 dollar = money; // FEL, typerna är // icke kompatibla 5