Programmering med Java Grunderna Game.java Fil med källkod: class Game { ... } Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Kompilering: javac Game.java Game.class Fil med byte-kod: ¶W*¶±@"I%N&* *´¶·µ**´» Y· ... Tolkning (exekvering): java Game Erik Forslin [email protected] Rum 1445, plan 4 på Nada 08-7909690 Minne med maskinkod: Begin Game... 0110101110101 1010110101110 ... 1 2 Programspråket Java Källkodsexempel • Som programmerare skriver du ditt program i en eller flera Javafiler, t ex i filen Game.java // Schema.java • Texten i Javafiler kallas källkod public class Schema { public static void main(String[] args) { int startperiod; startperiod = 1; • Javaprogram beskrivs alltid med klasser, varpå källkoden i Javafilen får strukturen: class Game { // innehåll i klassen: // variabler // metoder() } System.out.println("V programmerar under " + "perioderna " + startperiod + " och " + (startperiod + 1) + "!"); } // main() } // Schema datorn> javac Schema.java datorn> java Schema V programmerar under perioderna 1 och 2! datorn> • En klass kan innehålla variabler och metoder 3 4 Källkod i Java Kommentarer En programmerare skriver källkod i Java. Källkoden består av: • En kommentar beskriver vad en del i programmet gör • Kommentarer • Reserverade ord • Enradskommentarer: • Litteraler // Detta är en enradskommentar • Identifierare • Flerradskommentarer: • Satser /* Denna kommentar går över flera rader */ • Klasser • Variabler • Flerradskommentarer kan utnyttjas för att ”kommentera bort” delar av källkoden som misstänks innehålla fel • Metoder • Javas API (Application Programmer Interface) 5 6 Litteraler Reserverade ord abstract default (goto) (operator) synchronized boolean do if (outer) break double implements package throw byte else import private throws (byvalue) extends (inner) protected transient case false instanceof public true (cast) final int (rest) try catch finally interface return (var) char float long short void class for native static volatile (const) (future) new super while continue (generic) null this • En litteral är ett värde som skrivs direkt i källkoden, t ex • heltal: 17 -42 4711 • flyttal: 3.14159 -12.5 • tecken: 'A' • strängar: • logiska: switch 7 '?' 2.9E-12 '8' "Vad heter du?" true false 8 Identifierare Satser • Identifierare är namn på klasser, variabler och metoder som du själv inför i din källkod • En sats är den minsta körbara delen i ett Javaprogram • En sats avslutas alltid med ’;’ (semikolon) • Kan bestå av bokstäver, siffror, _ och $ • En sats skrivs ofta på en egen rad • Får inte börja med en siffra • Exempel med kommentarer: • Java skiljer på STORA och små tecken. T ex är Bil och bil två olika identifierare • En klass börjar med stor bokstav, t ex Game // Deklaration av ett flyttal double x; // Tilldelningar (OBS! Högerled körs först!) x = 3.14; y = (x + 1.57) / 6.28; z = Math.sin(1.5 * x); // Med metodanrop svar = indata.readLine(); // Med metodanrop • En variabel börjar med liten bokstav, t ex hastighet // if-sats if (z < 0.0) z = -z; • En metod börjar med liten bokstav och har metodparenteser, t ex main() eller starta() // Metodanrop System.out.println("Slumpade: " + Math.cos(Math.random())); 9 10 Klasser Variabler En klass är något som kan innehålla variabler och metoder. En klass kan ha två innebörder: • En – – – – klass samlar ihop ”bra-att-ha”-saker. Innehåll: Föregås av ordet static Finns alltid i endast en uppsättning Exempel på variabel: PI i klassen Math Exempel på metoder: sin() i klassen Math, main() i de flesta huvudklasser • En klass beskriver ett föremål (objekt). Innehåll: – Föregås ej av ordet static – Finns i en uppsättning för varje skapat objekt. Objekt skapas med new – Exempel på variabel: hastighet hos ett Bilobjekt – Exempel på metod: starta() hos ett Bilobjekt 11 • En variabel är en identifierare som representerar ett litet minnesutrymme för en viss typ av data. • Variabler måste deklareras innan de används • Variabler ritar vi som en ”liten låda” • Deklarationsexempel: int x; int x • Användningsexempel (tilldelning): x = 3; x int 3 12 Metoder • En metod används för att ”gömma” detaljer om hur något löses • En metod kan ses från två olika sidor: deklarationssidan och anropssidan. • Deklarationssidan ses från konstruktören som skriver källkoden till metoden. Konstruktören känner till alla detaljer • Anropssidan eller användarsidan ses från den som vill utnyttja en skriven metod. Användaren är inte intresserad av detaljer • Användningsexempel: utskrift med hjälp av metoden println() hos datorsystemets utmatningsenhet System.out: Metodens huvud • Då en metod kan ses från två olika sidor behövs något som länkar ihop dessa. Detta gör metodens deklarationshuvud • Deklarationshuvudet beskriver metodens namn (som också antyder vad metoden gör), vilka typer av värden som kan skickas till metoden samt vilken typ av värde som kommer tillbaka från metoden • Exempel på deklarationshuvud: metoden println() hos ett PrintStream-objekt: public void println(String x) System.out.println("Hej"); System.out är ett PrintStream-objekt med meto- Se även klassen PrintStream i Javas API. der som alltså underlättar utskrifter 13 Javas API 14 Java API: Exempel • API står för ”Application Programmer Interface” • En samling klasser (redan skriven och kompilerad källkod) med variabler och metoder som man kan använda vid behov • Klasserna med tillhörande variabler och metoder finns beskrivna på webben • Kan användas efter de importerats med import. import måste stå i början av Javafilen. Exempel: import java.io.*; som importerar alla klasser i paketet java.io • Observera att alla klasser i paketet java.lang importeras automatiskt till alla Javaprogram 15 16 In- och utmatning In- och utmatningsexempel • Då inmatning från tangentbordet är ganska knöligt utnyttjas hjälpobjektet BufferedReader. Detta görs genom att skapa och lagra BufferedReaderobjektet i variabeln indata: BufferedReader indata = new BufferedReader(new InputStreamReader(System.in)); Med indata ovan kan nu en hel rad enkelt läsas in och lagras i variabeln svar: String svar = indata.readLine(); och t ex göras om till ett heltal: int tal = Integer.parseInt(svar); Inmatning kan ge upphov till fel, IOException, vilket Java kräver att programmeraren tar hand om alternativt påpekar att det kan inträffa • Utmatning till skärmen är enklare och utnyttjar System.out som är ett PrintStream-objekt. I likhet med indata kan man lagra PrintStream-objektet i variabeln utdata: PrintStream utdata = System.out; Med utdata blir utskrift en enkel match: utdata.println("Du svarade: " + tal); 17 // InOchUtmatning.java // Klasserna BufferedReader och PrintStream // ligger i paketet java.io import java.io.*; public class InOchUtmatning { /* main() är huvudmetoden som körs (exekveras). I main() kan in- och utmatningsfel (IOException) inträffa vilket java kräver att programmet tar hand om. */ public static void main(String[] args) throws IOException { // indata är hjälpobjektet för inmatning BufferedReader indata = new BufferedReader(new InputStreamReader(System.in)); // utdata är hjälpobjektet för utmatning PrintStream utdata = System.out; utdata.print("Ange ett tal: "); String svar = indata.readLine(); int tal = Integer.parseInt(svar); utdata.println("Du svarade: " + tal); } // main() } // InOchUtmatning datorn> javac InOchUtmatning.java datorn> java InOchUtmatning Ange ett tal: -17 Du svarade: -17 datorn> 18