Variabler, klassevariabler, identitet og lighed, collections Stort og småt om Java Variabler, klassevariabler, identitet og lighed, collections
Oversigt Variabler Klassevariabler og -metoder Identitet vs lighed feltvariabler, parametre, lokale variabler Klassevariabler og -metoder static Identitet vs lighed identitet: samme som (==) lighed: magen til (equals) Array Statisk særudgave af List Collections a closer look dIntProg, E08
Variabler Feltvariabler Lokale variabler Parametre tilstand for objekter levetid er den samme som objektets Lokale variabler hjælpevariabler i en metode levetid er metodekaldet Parametre parametrisering af metoder lokale variabler hvis startværdi leveres af kalderen dIntProg, E08
Klassevariabler og –metoder (static) Instansvariabler og –metoder Ethvert objekter har egen version af ikke-static attributter Kald af en ikke-static metode er en besked sendt til et objekt Klassevariabler og –metoder Attributter og metoder kan erklæres static En static-komponent tilhører klassen, ej objekter af denne (klassemetode og –variabel) En klassemetode kan kun tilgå klassevariabler og kalde andre klassemetoder Benyttes til at modellere klasseegenskaber Eksempel: myndighedsalder for personer, fælles rentesats for alle konti dIntProg, E08
Eksempel public class Account { private static double interestRate; private int balance; private Person owner; public static void setInterestRate (double rate) { interestRate = rate; } public void addInterest() { balance = (int) (balance * interestRate); ... dIntProg, E08
Eksempler fra java.lang.Math public class Math { public static final double PI = 3.141592653589793 ... /** 0.0 ≤ random() < 1.0 */ public static double random() {...} /** sqrt(a) == a */ public static double sqrt(double a) {...} /** pow(a, b) == ab */ public static double pow(double a, double b) {...} } dIntProg, E08
Undlad dette: interestRate ændres for alle konti Kald af klassemetoder Klassemetoder kaldes via klassen Kan kaldes via objekt, men det er dårlig stil Math.PI Math.random() Account.setInterestRate(1.10); Math mathObject = new Math(); double d= mathObject.random() Account myAccount = new Account(...); myAccount.setInterestRate(1.10); Undlad dette: interestRate ændres for alle konti dIntProg, E08
Static vs. non-static Tilgang Variabel / Metode static ej static + – + + dIntProg, E08
Identitet vs. lighed (1) Identitet Samme som (==) Lighed Magen til (equals) dIntProg, E08
Identitet vs. lighed (2) person1 == person2 ? :Person :Person “Fred” “Jill” person1 person2 == is not true here (of course) person1 == person2 ? dIntProg, E08
Identitet vs. lighed (3) person1 == person2 ? :Person :Person “Fred” == is still not true here (different objects, == tests identity) person1 == person2 ? dIntProg, E08
Identitet vs. lighed (4) person1 == person2 ? :Person :Person “Fred” == is still not true here (different objects, == tests identity) person1 == person2 ? dIntProg, E08
Identitet vs. lighed (Strings) String input = reader.getInput(); if(input == "bye") { ... } == tester identitet :String :String == ? "bye" "bye" == is still not true here (different objects, == tests identity) input (kan være) falsk! dIntProg, E08
Identitet vs. lighed (Strings) String input = reader.getInput(); if(input.equals("bye")) { ... } equals tester lighed :String :String ? .equals( ) "bye" "bye" == is still not true here (different objects, == tests identity) input sand! dIntProg, E08
Array List af fast størrelse T[] var; var = new T[number]; //størrelse er altid number t: [4,1] int[] t; t = new int[2]; t[0] = 4; t[1] = 1; d: [ , ] Die[] d; d = new Die[2]; d[0] = new Die(); d[1] = new Die(); dIntProg, E08
Interfaces (specifikation) Klasser (implementation) Collections Interfaces (specifikation) H V A D class CE { Collection<Integer> c; public CE(...) { ... } public void execute() { c.add(1); c.add(3); ... int sum = 0; for ( int i : c ) { sum += i; } HashSet impl Set TreeSet impl SortedSet ArrayList impl List LinkedList HashMap impl Map TreeMap impl SortedMap Klasser (implementation) H V O R D A N dIntProg, E08