Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java Fil med källkod: class Game { } Game.class Fil med byte-kod: W* ±@"I%N&* * µ**» Y Minne med maskinkod: 0110101110101 1010110101110 Kompilering: javac Game.java Tolkning (exekvering): java Game Begin Game 1 2 Programspråket Java Källkodsexempel Som programmerare skriver du ditt program i en eller flera Javafiler, t ex i filen Game.java. Texten i Javafiler kallas källkod. Javaprogram beskrivs alltid med klasser, varpå källkoden i Javafilen får strukturen: class Game // innehåll i klassen: // variabler // metoder() } // Schema.java public class Schema public static void main(string[] args) int startperiod; startperiod = 2; System.out.println("K programmerar under " + "perioderna " + startperiod + " och " + (startperiod + 1) + "!"); } // main() } // Schema datorn> javac Schema.java datorn> java Schema K programmerar under perioderna 2 och 3! datorn> En klass kan innehålla variabler och metoder. 3 4
Källkod i Java En programmerare skriver källkod i Java. Källkoden består av: Kommentarer En kommentar beskriver vad en del i programmet gör. Enradskommentarer: Kommentarer. Reserverade ord. Litteraler. Identifierare. Satser. Klasser. Variabler. Metoder. Java API (Application Programmer Interface). // Detta är en enradskommentar Flerradskommentarer: /* Denna kommentar går över flera rader */ Flerradskommentarer kan utnyttjas för att kommentera bort delar av källkoden som misstänks innehålla fel. Flerradskommentarer för javadoc: /** Denna kommentar går över flera rader och kan utnyttjas av javadoc */ Sådana kommentarer används för att skapa automatisk dokumentation om programmet. 5 6 Reserverade ord Litteraler abstract default (goto) (operator) synchronized boolean do if (outer) this break double implements package throw byte else import private throws En litteral är ett värde som skrivs direkt i källkoden, t ex heltal: 17-42 4711 (byvalue) extends (inner) protected transient case false instanceof public true flyttal: 3.14159-12.5 2.9E-12 (cast) final int (rest) try catch finally interface return (var) tecken: 'A' '?' '8' char float long short void class for native static volatile strängar: "Vad heter du?" (const) (future) new super while continue (generic) null switch logiska: true false 7 8
Identifierare Identifierare är namn på klasser, variabler och metoder som du själv inför i din källkod. Kan bestå avbokstäver, siffror, _ och $. Får inte börja med en siffra. Java skiljer på STORA och små tecken. Tex är Bil och bil två olika identifierare. En klass börjar med stor bokstav, t ex Game. En variabel börjar med liten bokstav, t ex hastighet. En metod börjar med liten bokstav och har metodparenteser, t ex main() eller starta(). Satser En sats är den minsta körbara delen i ett Javaprogram. En sats avslutas alltid med ; (semikolon). Undantag: block. En sats skrivs ofta på en egen rad. Exempel med kommentarer: // 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 // if-sats if (z < 0.0) z = -z; // Metodanrop System.out.println("Slumpade: " + Math.cos(Math.random())); 9 10 Klasser 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. Variabler En variabel är en identifierare som representerar ett litet minnesutrymme för en viss typ av data. En variabel behövs för att datorn ska kunna komma ihåg data. Variabler ritar vi som en liten låda. En variabel består av tre delar: en datatyp, ett namn och ett värde. datatyp namn = värde; namn datatyp värde Variabler måste deklareras innan de används. Deklarationsexempel: int x; int x Användningsexempel (tilldelning): x = 3; int x 3 11 12
Metoder Vanliga datatyper 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. Innehåll Datatyp Användningsexempel Heltal int int i = 3; Flyttal double double d = 3.14; Logiska boolean boolean b = true; Tecken char char c = 'A'; Sträng/text String String s = "Pelle"; 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: System.out.println("Hej"); System.out är ett PrintStream-objekt med metoder som alltså underlättar utskrifter. 13 14 Metodens huvud Java API API står för Application Programmer Interface. 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) 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å ibörjan av Javafilen. Exempel: import java.io.*; som importerar alla klasser i paketet java.io. Se även klassen PrintStream i Java API. Observera att alla klasser i paketet java.lang importeras automatiskt till alla Javaprogram. 15 16
Java API: Exempel In- och utmatning 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 tex 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 18 In- och utmatningsexempel // 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> 19