Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2. Hur vi jobbar med ett program. 1. Vad vi skriver (med hjälp av redigeringsprogrammet Emacs) på datorn: // Fig. 2.1: Welcome1.java // A first program in Java public class Welcome1 { public static void ( String args[]){.out.println( "Welcome to Java!" ); } } 2. Vi beordrar Emacs lagra denna text på en fil Welcome1.java. (En fil är ett minnesutrymme på den dators skivminne, "hård disk") 3. Kör javakompilatorn javac på datorn och dvs låtkompilatorn översätta texten som finns på filen Welcome1.java....>javac Welcome1.java OM kompilatorn inte finner några fel blir resultatet blir en översättning på filen Welcome1.class typfel syntaxfel tills komp. OK 4. Kör översättningen:...>java Welcome1 Exekveringsfel gör att programmet avslutas på ett onormalt sett. Logiska fel leder till felaktiga resultat exekveringsfel, logiska fel tills körningen ger avsett resultat
Semantiken för programmet Welcome1 ALU (styrning ) CPU (aritmetik) statiska (klass).out metoder Översatt -metod (Kod som styr datorn) println-metod (Kod som styr datorn) inenhet utenhet sekundärminnen Welcome to Java programmeing! Welcome1.java Welcome1.class En fil. Data finns kvar så länge man vill 1234567890+ qwertyuiopå asdfghjklöä <zxcvbnm,.- Skivminne (hard disc, "hård disk") kommunikation med användare yttre enheter (periferienheter).out.println("welcome to Java programming!"); -metoden anropar (calls, invokes ).out-ets println-metod..out-et kommer att finnas automatiskt om man nämner det i Java.programmet.
Semantiken för programmet Welcome4 ALU (styrning ) CPU (aritmetik) statiska (klass) metoder (översattkod som styr dator inenhet utenhet JOptionPane showmessagedialog exit sekundärminnen Welcome4 Skivminne (hard disc, "hård disk") Welcome to Java programmeing! Welcome4.java Welcome4.class En fil. Data finns kvar så länge man vill javax swing JOptionPane.class 1234567890+ qwertyuiopå asdfghjklöä <zxcvbnm,.- kommunikation med användare yttre enheter (periferienheter) java.lang importeras automatiskt java lang.class Joptionpane.showMessageDialog(null, "Welcome\n to\n Java\n programming!"); -metoden anropar (calls, invokes ) den statiska metoden showmessagedialog i klassen Joptionpane med två argument ( pane betyder ruta, det som är inne i ett fönster).
Semantiken för programmet Addition Efter nedanstående rad ( rad 17 och 18 i DD fig 2.8) : firstnumber = JOptionPane.showInputDialog( "Enter first integer" ); ALU (styrning ) CPU (aritmetik) statiska Lokala firstnumber secondnumber number1 number2 sum "45" metoder (översattkod som styr dator Addition JOptionPane showmessagedialog showinputdialog exit inenhet utenhet sekundärminnen Enter first integer 45 Welcome4.java Welcome4.class En fil. Data finns kvar så länge man vill javax 1234567890+ qwertyuiopå asdfghjklöä <zxcvbnm,.- Har egentligen just försvummit java.lang importeras automatiskt swing JOptionPane.class java lang.class
Minnet efter nedanstående rad ( rad 20 och 21 i DD fig 2.8) : secondnumber = JOptionPane.showInputDialog( "Enter second integer" ); statiska Lokala firstnumber secondnumber number1 number2 sum "45" "72" metoder (översattkod som styr datorn) Addition JOptionPane showmessagedialog showinputdialog exit Minnet efter nedanstående rad ( rad 24i DD fig 2.8) : number1 = Integer.parseInt( firstnumber ); statiska Lokala metoder (översattkod som styr datorn) firstnumber secondnumber number1 number2 sum 45 "45" "72" Addition JOptionPane showmessagedialog showinputdialog exit
Minnet efter nedanstående rad ( rad 25 i DD fig 2.8) : number2 = Integer.parseInt( secondnumber ); statiska Lokala metoder (översattkod som styr datorn) firstnumber secondnumber number1 number2 sum 45 72 "45" "72" Addition JOptionPane showmessagedialog showinputdialog exit Minnet efter nedanstående rad ( rad 28 i DD fig 2.8) : sum = number1 + number2; statiska Lokala metoder (översattkod som styr datorn) firstnumber secondnumber number1 number2 sum 45 72 117 "45" "72" Addition JOptionPane showmessagedialog showinputdialog exit
Några olika sorters primitiva typer. Hittils har vi bara definierat (lokala för metoden ) med heltalsvärden, t ex int k = 5; // k "plats" i minnet för heltal första innnehåll talet 5 Detta sätt att både deklarera en variabel och ge den ett första värde används inte i DD redan i kap 2, utan introduceras senare. Det finns flera primitiva datatyper än int i Java. Man kan med dessa datatyper deklarera som skall innehålla andra sorters värden, t ex: double x = 5.5; // x plats för flyttal första innnehåll talet 5.5 double y = 5.5E2; // x plats för flyttal första innnehåll talet 550.0 double z = x+y; // z plats för flyttal första innnehåll 5505.5 Uttryck kan bildas på likande sätt som i matematiken. T ex har olika operatorer har olika prioritet eller presedens, som kan upphävas med paranteser z = 3.0*x+7.1; // z liten del av minnet fylls med fylls med 23.6 z = 3.0*(x+7.1); // z liten del av minnet fylls medfylls med 37.8 Att man kan "räkna med" sanningsvärden (boolean) och tecken (char) käns ovant i början men är inte konstigt när man vant sig, fast man gör lätt fel med && och : boolean b = k+k > 7 k <3 // b plats fylls med true && och är "lata", dvs den högra operanden beräknas ej om det inte behövs. ( I uttryck som 3+5 eller b && c kallas + och && för operatorer, 3 och b för vänsteroperander och 5 och c för högeroperander). Man kan också förvandla värden mellan olika typer, kallas "cast". int k = (int) 5.4; // k platsför heltal första innnehåll talet 5 Övning2: int i = 5; int j = 2;double x = 4.5;double y = 1.0E2; char l = a ; char d = 2 ; boolean b= true; boolean bb, cc; Vad blir i+j i/j i% j i+x x/y i>5 (l < a ) && b (l < a ) b 3 < i < 7? Betyder!(bb && cc) samma sak som (!bb!cc)? Mer detaljer och övningar i böckerna.
Översikt av de viktigaste primitiva datatyperna och de viktigaste operatorerna med vars hjälp vi kan bilda uttryck : % (rest vid heltalsdivision) / (heltalsdivision) + - * (32 bit) int 2 12-67 2356789-976543 + - / * + - / * (64 bit) double 23.67-890.78-45.89 56.34E23 && (logiskt och, båda true) < <= > >= ==!= boolean true false < <= > >= ==!= < <= > >= ==!= (lika med, inte lika med) char A a 7! /u0040 (16 bit) (8 bit?)! (logiskt inte) Det finns fler primitiva datatyper än int för heltal, det som skiljer är hur många bitar som krävs för platsen i minnet och därmed vilka tal som "får plats". Det finns förutom double ytterligare en primitiva datatyp float för flyttaltal ("decimaltal"), det som skiljer är att bara 32 bit tilldelas sådan i minnet i stället för 64 bitar och att antalet signifikanta siffror och största och minsta exponent är därför är mindre. Typen String är ej en primitiv typ Att två strängar a, b är lika skrivs så här: a.equals(b).
Sammanfattning. I mallarna nedan skall det som är skrivit med - typsnittet Courier skrivas av. ( reseverade ord och teckn i Javas syntax) - typsnittet Courier ersattas med det du själv hiitar på. - typsnittet Palantino är förklaringar som förstås inte skall skrivas av. Mall för en enkel klassdeklaration Klassens rubrik (heading, "huvud") "publik", offentlig allmän klass. 1 publik klass/ fil. Klassnamnet på publika klassen klassens namn = Filnamnet.java Vi deklarerar en klass Klassinnehållet (body, "kropp") public class klassnamn { Inleder klassinnehållet I kapitel 2 deklaration av -metoden } Avslutar klassinnehållet
Mall deklaration av -metod Metodens rubrik (heading, "huvud") Kopiera -metodens rubrik helt och hållet. Du behöver inte förstå allt än "publik", offentlig allmän metod. klassmetod metoden returnerar inget metodens namn public static void (String [] arg) { Metodinnehållet (body, "kropp") Inleder metodinnehålle } följd (sekvens) med variabeldeklarationer och kommandon (satser) Avslutar metodinnehållet Mall deklaration av lokal variabel i metod: Namn på variabel avslutar deklaration typnamn variabelnamn ; Exempel deklaration av lokala : Typnamn med liten initialbokstav: variabeln innehåller ett värde av en primitv typ. I detta fall innehåller i ett heltal. int i; String text; Typnamn med Stor Initalbokstav: variabeln innehåller en referens till ett, i dett fall refererar text till ett String- (tecknsträng + metoder för att pulera stängar)
Mall tilldelningskommando Namn på variabel, del av minnet som kommer att få ett nytt innehåll som blir värdet på uttrycket till höger om = tilldelning uttryck som datorn räknar ut och ger ett värde avslutar kommanot variabelnamn = uttryck (nåt som har värde) ; Exempel tilldelningskommando k = i + j; Mallar och exempel för uttryck literal variabelnamn 5 k Namn på variabel, datorn ser efter vilket värde som finns i den del av minnet som har detta vaiabeln uttryck operator uttryck i + j; i + j uttrycken kallas operander ( uttryck ) (5*(i + j)) returnerandemetodanrop Math.sqrt(16.0) Mer om anrop nedan
Mall anrop av klassmetod i annan klass: Namn på klass. OBS STOR INITIALBOKSTAV. Genetiv-s rätt antal uttryck (argument) som ger klassmetoden infomation som den bearbetar.datorn räknar först ut uttryckens värde som sänds till klassmetoden. Klassnamn. klassmetodnamn ( uttryck, uttryck,..., uttryck ) Paranteserna gör att java-kompilatorn ; förstår att den skall översätta ett anrop. (engelska call, invocation). Även anrop av argumentlösa metoder måste ha paranteser, som då inte har något uttryck mellan sig. Exempel anrop av (void) klassmetod i annan klass: Att metoden är "void" innebär att den inte sänder tillbaka något. Sådana anrop bildar ett eget kommando (sats) avslutar kommanot JOptionPane.showMessageDialog(null, "Welcome"); Exempel anrop av returnerande klassmetod i annan klass: Att metoden är retunerande innebär att från den anropade metoden får den anropande metoden ett värde som den använder som ett uttryck. firstnumber = JOptionPane.InputDialog("Input first integer: "); Att metoden är returnerar en teckensträng som bildar uttrycket till höger om = i en tilldelningsats.
Mall anrop av metod i i annan klass: Namn på (referens till). obs liten initalbokstav. Genetiv-s rätt antal uttryck (argument) som ger metoden infomation som den bearbetar.datorn räknar först ut uttryckens värde som sänds till klassmetoden. (referens)namn. metodnamn( uttryck, uttryck,..., uttryck ) Paranteserna gör att java-kompilatorn ; förstår att den skall översätta ett anrop. (engelska call, invocation). Även anrop av argumentlösa metoder måste ha paranteser, som då inte har något uttryck mellan sig. Exempel anrop av (void) metod i ett : Att metoden är "void" innebär att den inte sänder tillbaka något. Sådana anrop bildar ett eget kommando (sats).out.println("welcome"); Objektet out finns i annan klass (som finns i java lang) avslutar kommanot