Om Java C =>Java syntax variabler metoder färdiga klasser Minikurs i Java F1 Om Java C =>Java syntax variabler metoder färdiga klasser
Java C/C++ kompilering till bytekod kompilering till binärkod direkt exekvering platformsberoende varierande längd på variabler hårdvarunära, snabbt flexibel - potentiellt riskabel manuell minneshantering ingen indexkontroll multipelt arv operator overloading frivillig särfallshantering call by value OR name (&) Java kompilering till bytekod interpretering platformsoberoende fix längd på variabler jit, run time optimering restriktiv - "säker" skräpsamlare indexkontroll enkelt arv samt interface ingen operator overloading särfallshantering call by value(prim),by name (obj)
Ett javaprograms uppbyggnad Ett program består av en eller flera klasser Varje klass innehåller en eller flera metoder Varje metod består av satser Metoden main utförs allra först när programmet körs
Exempel: // Ett gratulerande program import java.io.*; class Grattis { public static void main (String[] args) { String namn = ”Fingal Olsson”; int n = 102; System.out.print(”Grattis ” + namn + ” på”); System.out.println(n + ”-årsdagen!”); }
Kompilering och interpretering Programmet måste översättas till maskinkod för den dator du använder För Javaprogram görs översättningen i två steg: Kompilering: programmet översätts till maskinoberoende bytekod Interpretering: bytekoden tolkas för den aktuella datorn och maskinkoden körs
Hur gör man? För att kompilera Grattis.java skriver du javac Grattis.java varvid filen Grattis.class (bytekod) skapas. Den interpreteras och körs när man skriver java Grattis
Reserverade ord Följande ord finns definierade i Java: abstract boolean break byte (byvalue) case (cast) catch char class (const) continue default do double else extends false final finally float for (future) (generic) (goto) if implements import (inner) instanceof int interface long native new null (operator) (outer) package private protected public (rest) return short static super switch Synchronized this throw throws transient true try (var) void volatile while
Javas API API står för Application Programmer Interface En samling klasser som man kan använda vid behov Hämtas till programmet med import, t ex import java.io.*; print och println finns i API:n java.io Se Appendix O i boken!
Kommentarer En kommentar förklarar vad programmet gör. Enradkommentar //Detta är en enradskommentar Flerradskommentarer /* Denna kommentar går över flera rader*/
Identifierare Identifierare är orden som du själv inför i ditt program Kan bestå av bokstäver, siffror, _ och $ Får inte börja med en siffra Java skiljer på VERSALER och gemena. T ex är Summa och summa olika identifierare
Litteraler En litteral är ett värde som skrivs direkt i programkoden, t ex heltal: 17 -42 4711 flyttal: 3.14159 -12.5 2.9E12 tecken: ’A’ ’?’ ’8’ strängar: ”Vad heter du?” logiska: true false
Variabler En variabel är en identifierare som representerar ett minnesutrymme för en viss typ av data Variabler måste deklareras innan dom används Exempel: int antal;
Primitiva datatyper Varje värde som lagras i minnet är av en viss datatyp Java har åtta fördefinierade typer som kallas primitiva datatyper: byte float short double int boolean long char
Heltal Det finns fyra olika heltalstyper: Namn byte short int long Storlek 8 bitar 16 bitar 32 bitar 64 bitar Min-värde -128 -32,768 -2,147,483,648 < -9 x 1018 Max-värde 127 32,767 2,147,483,647 > 9 x 1018
Flyttal Det finns två flyttalstyper: Min-värde -3.4 x 1038 Max-värde 3.4 x 1038 1.7 x 10308 Namn float double Storlek 32 bitar 64 bitar
Tecken I en variabel av typen char kan ett tecken lagras Java använder teckenkodningssystemet Unicode som lagrar tecken i 16 bitar Tecken från många olika språk finns med, däribland å, ä och ö. Se www.unicode.org Teckenkonstanter omges av apostrofer, t ex ’a’ ’&’ ’\n’ (retur) ’\’’ (apostrof)
Boolean En boolesk variabel kan endast anta värdena true och false Exempel: boolean parkering = false; Booleska variabler används ofta i villkor
Omslagsklasser (Wrapper classes) För varje primitiv datatyp finns en motsvarande klass, t ex Dessa klasser innehåller en del användbara metoder t ex för att omvandla från strängar till tal Datatyp int double char boolea n Klass Integer Double Characte r Boolean
Matematiska operatorer 2.52 + 19 blir 21.52 4.18 - 0.02 blir 4.16 3.5 * 2 blir 7.0 19 / 4.0 blir 4.75 19 / 4 blir 4 19 % 4 blir 3 % ger resten vid heltalsdivision
Logiska operatorer Villkor kan kombineras med följande tre operatorer: if (ålder <= 4 || ålder >= 21) System.out.println(”OK!”);
Jämförelseoperatorer I villkor kan följande operatorer användas: Strängar kan inte jämföras med operatorerna ovan (eftersom strängar inte är primitiva datatyper) .
Strängjämförelse För jämförelse av strängar finns metoderna public boolean equals(String s) public boolean equalsIgnoreCase(String s) För att avgöra bokstavsordning finns public int compareTo(String s) Anropet s1.compareTo(s2) ger negativt värde om s1 kommer före s2 positivt värde om s1 kommer efter s2 noll om strängarna är lika
Operatorn + Operatorn + används både för att slå ihop strängar och för att addera tal Exempel 1: ”Grattis” + namn två strängar slås ihop till en Exempel 2: ” på ” + n talet i n omvandlas till en sträng och strängarna slås ihop Exempel 3: x + y talen i variablerna x och y adderas
Flödeskontroll Boolean fortsätt; while (fortsätt) { /* Satser som upprepas */ } do { } while (fortsätt); for (int i=0; i<2; i++) {
Val if (otur != 13) /* Satser om sant */ else /* Satser om falskt */ switch (tkn) { case 'A': /* Satser om A*/ break; default: /* Satser om inget ovan */ }
Inläsning Användaren kan ge en variabel ett nytt värde om programmet läser in från tangentbordet: Se till att eventuella fel skickas vidare public static void main (String[] args) throws IOException { Tala om varifrån inläsningen ska ske BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in)); Läs in raden rad = stdin.readLine();
Inläsning av tal Metoden readLine() läser in en sträng. Vid behov kan man omvandla strängen till ett tal heltal = Integer.parseInt(rad); Inläsning och omvandling kan göras i ett steg: heltal = Integer.parseInt(stdin.readLine()); flyttal = Double.parseDouble(stdin.readLine()); I gamla versioner av Java (1.1) måste man skriva: flyttal=(new Double(stdin.readLine())).doubleValue();
StringTokenizer Kan dela upp en sträng i delar (tokens), t ex ta fram orden ur en mening. Normalt delas strängen vid mellanslag, tab och radbyte. Man kan också ange vilka tecken strängen ska delas vid. Importeras med: import java.util.StringTokenizer;
Konstruktorer StringTokenizer(String str) str är strängen som ska delas upp. StringTokenizer(String str, String skiljetecken) skiljetecken anger vilka tecken str ska delas vid. String skiljetecken, boolean rubbet) rubbet ska vara true om även skiljetecknen ska returneras.
Metoder hasMoreTokens() Returnerar true om det finns några tokens kvar att plocka fram ur strängen. nextToken() Returnerar nästa token. countTokens() Räknar ut hur många tokens det finns i strängen.
Exempel String mening; StringTokenizer orden; mening = stdin.readLine(); // Skapar en ny tokenizer orden = new StringTokenizer(mening); // Skriver ut första ordet stdout.println(orden.nextToken()); // Skriver ut andra ordet
Vector Används som en vektor men måste importeras: Fördelar: Nackdelar import java.util.Vector; Fördelar: Längden utökas automatiskt när man lägger in ett nytt element. Lätt att stoppa in element var som helst. Nackdelar Ineffektivt. Varje element blir av klassen Object så man måste omvandla framtagna element till rätt klass.
Metoder i klassen Vector addElement(Object element) Lägger till ett element. removeElement(Object element) Tar bort ett visst element. elementAt(int index) Returnerar det element som finnspå plats index firstElement() och lastElement() Returnerar första resp sista elementet. size() Returnerar antal element.
Exempel Vector balls = new Vector(); Ball b; for (int i = 0; i < 22; i++) { b = new Ball(100, 100, 5); balls.addElement(b); } b = (Ball) balls.elementAt(16); stdout.println(”Antal: ” + balls.size());
Filer Enda sättet att spara data mellan programkörningar är att lagra dessa på fil. På kursbiblioteket finns två klasser som gör det enklare att läsa från och skriva på fil. SimpleTextFileReader SimpleTextFileWriter Om du vill använda någon av klasserna kan du kopiera den från kursbiblioteket och lägga den sist i ditt program.
SimpleTextFileReader // Öppna fil för läsning SimpleTextFileReader in = new SimpleTextFileReader(”infil.txt”); String str; // Läs in alla rader och skriv ut på skärmen while ((str = in.readLine())!= null) { System.out.println(str); } in.close();
SimpleTextFileWriter // Öppna fil för utskrift SimpleTextFileWriter out = new SimpleTextFileWriter (”utfil.txt”); out.println(”Detta skrivs på filen!”); System.out.println(”Detta på skärmen”); // Stäng filen out.close();