Java Notater (NOR)
Personlige Notater 1 av 2 Læring av Java og Android Oktober 2016, Java 8 =============================================================================== Kjøring av Javaprogrammer =============================================================================== Eclipse IDE for Java Developers Neon.1 Release (4.6.1): Fil > Export > Runnable JAR file Kjør med:java -jar =============================================================================== Typer =============================================================================== Primitive Typer TYPE VERDI ANTALL BITS STANDARDVERDI boolean 1-bit verdi (0) false byte 8-bit verdi (0000 0000) 0 short 16-bit verdi (0000 0000 0000 0000) 0 int 32-bit verdi (0000 0000 0000 0000 0000 0000 0000 0000) 0 long 64-bit verdi (0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000) 0 float 32-bit verdi 0.0f double 64-bit verdi 0.0d char 16-bit verdi '\u0000' MERK: - Sammenslåing gjøres med '+'. Selv mellom objekter og primitive typer. - Standardverdi for ikke-initialiserte objekter er 'null'. - Typekasting eksempel: int i = (int) variabel_av_annen_type. =============================================================================== Strenger =============================================================================== Strengbehandling Sammenslåing av strenger bør gjøres med StringBuilder eller StringBuffer. Det er en mer effektiv måte enn ved kun '+', som skaper et nytt objekt i minnet hver gang man sammenslår. StringBuffer er identisk med StringBuilder med unntak av at StringBuffer er "thread-safe". Sammenslåing Eksempel: StringBuilder sb = new StringBuilder(""); sb.append("Ole") .append("Dole") .append("Doffen"); Strengformatering F.eks. med System.out.printf( , ) %2d = La verdien bruke en total bredde på 2. %-2d = Samme, men justering av verdi skjer mot venstre. %.2f = .2 betyr visning av 2 desimaler. %5.1f = Totalt 5 tall med 1 desimal. %-5.1f = Samme, men justering av verdi skjer mot venstre. MERK: - Streng klassen kan returnere formatert streng med .format() =============================================================================== Pakker =============================================================================== MERK: - Man kan ikke ha flere klasser med like navn i samme pakke. - Klasser i pakker under default må ha pakkedefinisjon øverst. - Pakkehierarkiet er den samme som mappestrukturen. - Klasser i underpakker må ha importdefinisjon før bruk (må være etter pakkedefinisjoner). - Wildcard '*' kan brukes ved import av 'pakke.klasser'. - Navnekonvensjon for pakker: com.thronic.pakkenavn Pakkedefinisjon for tilhørighet som skrives i klassefiler - eksempel: package pakke; Importdefinisjon eksempel: import pakke.klasse; =============================================================================== Kontrollstrukturer =============================================================================== IF/ELSE if () { } else if() { } else { } SWITCH switch() { case "": break; default: } FOR for (int n=0; n<10; n++) { ... } for (int n : matrise) { ... } - Samme som 'foreach' men heter i dette tilfellet 'Enchanced For-Loop'. WHILE while (1) { ... } try { // Prøv dette. } catch (Exception e) { // Oi da. } finally { // Vi gjør uansett dette til slutt. } =============================================================================== Matriser og Samlinger =============================================================================== Matriser int[] verdier; // Deklarasjon. verdier = new int[3]; // Initialisering. int[] tall = {1,2,3} // Deklarering og initialisering samtidig. int[][] par_odde = { // Multidimensjonell matrise. {2,4,6}, {1,3,5} } Listetyper Det finnes 9 typer lister i 3 kategorier: ArrayList, LinkedList og Vector. HashSet, TreeSet og LinkedHashSet. HashMap, HashTable og TreeMap. Eksempel: ArrayList id_liste = new ArrayList (); tall.add(123); tall.add(789); tall.add(2,456); // Setter inn 456 på plass 2 i matrisen og dytter nåværende verdi nedover. HashSet, TreeSet og LinkedHashSet er lik i funksjonalitet, men godtar ikke identiske verdier. De blir ikke lagt til ved forsøk og blir ignorert. Kart opererer med nøkler og verdier (som collections i C#). Eksempel: HashMap kart1 = new HashMap (); Eksempel med nøsting: HashMap > kart2 = new HashMap >(); kart1.put("DaGonny",1234); kart1.put("Kristine",5678); kart2.put("Navneliste", kart1); =============================================================================== Funksjoner =============================================================================== Eksempelkode class Eksempel { private String s = ""; private int i = 0; public void settVerdier(String s, int i) { this.s = s; this.i = i; } public String hentVerdier() { return s + i; } } public class Test1 { public static void main(String[] args) { Eksempel e = new Eksempel(); e.settVerdier("Dette er test nr ",1); System.out.println(e.hentVerdier()); } } =============================================================================== Klasser, Objekter og Grensesnitt =============================================================================== MERK: - Klasser kan kun ha 'public' eller ingenting foran definisjonen. - Abstrakte klasser kan kun arves og tjener kun som et templat/prototype. - private : Kun synlig for klassen. - protected : Kun synlig for pakken og underklasser. - public : Synlig for alt. - Deklarasjoner uten nøkkelord ovenfor er kun synlige på pakkenivå. Konkret klasse: public class SvartStol { String farge = "Svart"; int antallBein = 4; public void Sitte() { // Bestemt kode for å sitte på en svart stol. } } Abstrakt klasse: public abstract class Stol { protected String farge; protected int antallBein; // Prototype for underklasser. public abstract void Sitte(); // Felles ferdig definert funksjon for alle underklasser. public String hvilkenFarge() { return farge; } } Bruk: public class TVStol extends Stol { @Override public void Sitte() { // Unik kode for TVStol ang. sitting. Ekstrem avslapping her! } } Konstruktbruk public class Klasse { private int i; public Klasse() { i = 0; } // Overlasting av konstrukt er lov. public Klasse(int i) { this.i = i; } } =============================================================================== Komplett Eksempelkode =============================================================================== interface Sitting { public void sittNed(); public void reisOpp(); } abstract class Stol { protected int antallStolBein; protected String farge; protected String puteType; public static void sitteAksjon(boolean b, Sitting s) { if (b) { s.sittNed(); } else { s.reisOpp(); } }; } class Godstol extends Stol implements Sitting { public Godstol() { antallStolBein = 1; farge = "Grønn."; puteType = "Lazyboy."; } public void sittNed() { System.out.println("Setter meg ned i godstolen!\nDEILIG! ZZZZzzzzz"); } public void reisOpp() { System.out.println("Reiser meg opp fra godstolen!\nUthvilt!"); } } class Drittstol extends Stol implements Sitting { public Drittstol() { antallStolBein = 4; farge = "Muggen grå og jævlig."; puteType = "Treplate med spiker i fu-området."; } public void sittNed() { System.out.println("Setter meg på drittstolen:\nHELVETE! BLOD OGSÅ!"); } public void reisOpp() { System.out.println("Reiser meg fra drittstolen:\n1 LITER BLOD. VEKK."); } } public class Test1 { public static void main(String[] args) { Godstol stol1 = new Godstol(); Drittstol stol2 = new Drittstol(); Stol.sitteAksjon(true, stol1); Stol.sitteAksjon(false, stol1); Stol.sitteAksjon(true, stol2); Stol.sitteAksjon(false, stol2); } }