OOMPAE 2000 Introduktion till Java Av Björn Eiderbäck Email: [email protected] Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: 7906277 previous next Introduktion Java Momentets uppläggning och innehåll... • Föreläsningar och övningar: introduktion till Java – På kursen 2D1360 ingår två introduktionsföreläsningar och en övning om och med Java. Resten av kursen samläses med 2D1359. • Måndag 4/9 kl 8-10 – Java introduktion. • Tisdag 5/9 kl 13-15 – Mer om Java, framförallt via exempel. • Onsdag 6/9 kl 8-10 – Första föreläsningen tillsammans med 2D1359. – Beskrivning av hela kursen och introduktion till objektorienterad programmering. • Torsdag 7/9 kl 15-17 – Java-övning. previous next 2 Introduktion Java Java • Java är konstruerat på SUN – Första versionen släpptes 1995 • Starkt typat – Dvs det går att avgöra typkompatibilitet av alla uttryck i programmet vid kompileringstillfället. • Virtuell maskin (VM) som gör det maskinoberoende – En speciell VM per plattformstyp överbryggar olikheter i plattformarnas arkitektur • Klassbibliotek – språkklasser, stränghantering, grafik, gränssnitt, fönster, Internet, händelsehantering, processer, collections, mm • Bindning till WWW – med applets och liknande • Har fått sin huvudsakliga spridning via Internet • Syntax som C. Semantik och klasser mer som Smalltalk previous next 3 Introduktion Java Virtuell maskin källkod kompilera (javac) java bytekod kör (java) en virtuell maskin per plattformstyp previous next Pc VM Mac VM Unix VM 4 Introduktion Java Java: mitt första "program" • Skapa en fil med namnet MyFirstProgram.java • Skriv följande kod i filen: import java.io.*; public class MyFirstProgram{ public static void main (String [] args){ System.out.println("Mitt första program!"); } } previous next 5 Introduktion Java ... kompilera och kör • Kompilera >javac MyFirstProgram.java • Då genereras en körbar fil MyFirstProgram.class • Kör genom att starta Javas virtuella maskin med program/klassnamnet som argument >java MyFirstProgram Mitt första program! • Regeln är att klassens static void main-metod alltid exekveras previous next 6 Introduktion Java Ett "Javaprograms" struktur • En klass ser ut på följande sätt public class KlassNamn extends SuperKlassNamn{ attribut (instans- och klassvariabler) Kallas också för metoder (instans- och klassmetoder) medlemmar konstruktörer } • En metod modifierare returtyp funktionsnamn(argument){ programsatser } previous next 7 Introduktion Java Konstruera klass • Klassnamn = filnamn – En klass skall ha samma namn som den fil den placeras i • Klassen Circle i filen Circle.java • En fil kan innehålla flera klasser men bara en av dem kan vara deklarerad public, – Det är den publika klassens namn som motsvarar filens • Definition av klass, mall instansvariabler metoder konstruktörer previous public class KlassNamn extends SuperKlassNamn{ Modifierare TypIvar1 ivar1; Modifierare MetodTyp metod1(TypArg1 arg1) {} public KlassNamn() {} } next 8 Introduktion Java Deklarera och instansiera • Deklaration av instans KlassNamn variabelNamn; • Instansiering variabelNamn = new KlassNamn(); alternativt, både deklaration och instansiering på en gång KlassNamn variabelNamn = new KlassNamn(); previous next 9 Introduktion Java Kompilera och köra • Environmentvariabel – För bekväm hantering sätt path (se systemdokumentation) så att kompilator, virtuell maskin och bibliotek enkelt hittas • Plattformsberoende hur detta går till • Kompilera med javac filnamn javac KlassNamn.java – om allt går bra skapas då en fil med namnet KlassNamn.class • Kör med java klassnamn java KlassNamn previous next 10 Introduktion Java Sammanfattning enkelt program: Hello World Det mesta i Java tillhör klasser public class Hello { Alla program måste ha en main() public static void main(String[] args) { System.out.println("Hello World!"); } } Spara i en fil med namnet Hello.java Kompilera med javac Hello.java Då skapas en binärfil Hello.class Kör med java Hello previous next 11 Introduktion Java Typer • I Java måste alla variabler och metoder deklareras med typ Typ variabel; • Det finns primitiva typer som int, char, float och boolean int x; • En variabel kan ges ett initialt värde vid deklarationen int x = 10; • Man kan också använda typer som är implementerade som vanliga klasser String course = "PIM-99"; previous next 12 Introduktion Java Modifierare • En modifierare kan användas för att ange vilka objekt som kan accessa en klass eller dess medlemmar (dvs dess attribut eller metoder), mest grundläggande är: static • indikerar att medlemmen är klassvariabel eller klassmetod public • medlemmen är accessbar överallt där dess klass är accessbar protected • medlemmen endast accessbar i klassen, dess subklasser eller i aktuellt package (vi återkommer till package vid senare tillfälle) private • medlemmen endast accessbar i den klass som definierar den ingen modifierare • accessbar av andra klasser i samma paket previous next 13 Introduktion Java Exempel public class BankAccount{ protected int balance = 0; public void deposit (int amount) { balance = balance + amount; } public void withdraw (int amount) { balance = balance - amount; } public int balance (){ return balance; } } previous next 14 Introduktion Java ... BankAccount account1, account2; int transfer; account1 = new BankAccount(); account2 = new BankAccount(); account1.deposit(200); account2.deposit(100); transfer = 75; account1.withdraw(transfer); account2.deposit(transfer); account2.balance(); // resultat 175 previous next 15 Introduktion Java Sammanfattning: Konstruera klass • Klassnamn = filnamn – En klass skall ha samma namn som den fil den placeras i • Klassen Circle i filen Circle.java • En fil kan innehålla flera klasser men bara en av dem kan vara deklarerad public, – Det är den publika klassens namn som motsvarar filens • Definition av klass, mall public class KlassNamn extends SuperKlassNamn{ attribut (instans- och klassvariabler) metoder (instans- och klassmetoder) konstruktörer } previous next 16 Introduktion Java Sammanfattning: Deklarera och instansiera • Deklaration av instans KlassNamn variabelNamn; • Instansiering variabelNamn = new KlassNamn(); alternativt, både deklaration och instansiering på en gång KlassNamn variabelNamn = new KlassNamn(); previous next 17 Introduktion Java Sammanfattning: Kompilera och köra • Environmentvariabel – Sätt path- (environment-) variabel, dvs sätt den att (också) referera Javas katalog • Kompilera med javac filnamn javac KlassNamn.java – om allt går bra skapas då en fil med namnet KlassNamn.class • Kör med java klassnamn java KlassNamn previous next 18 Introduktion Java Exempel: Klass Circle // Klassdefinition (utan extends medför subklass till Object) public class Circle { public double x, y; public double r; public double circumference(){ return 2 * 3.14 * r; } public double area(){ return 3.14 * r * r; } // för att testa det hela skriver vi en static main-metod public static void main (String args[]) { //Vi deklarerar en temporär variabel Circle circle; // och instansierar circle = new Circle(); previous next 19 Introduktion Java ... forts ... //vi ändrar några värden circle.x = 100; circle.y = 200; circle.r = 20; // vi gör några testutskrifter System.out.println("Cirkelns x-koordinat: " + circle.x + " och dess y-koordinat: " + circle.y); System.out.println("den har en radie också: " + circle.r); System.out.println( "metoden circumference ger omkretsen: " + circle.circumference()); System.out.println("och med area:" + circle.area() + " dess area"); } } previous next 20 Introduktion Java ... och så sparar vi, kompilerar och kör • Spara – Spara filen med samma namn som klassen med extension .java, dvs här Circle.java • Kompilera javac Circle.java – Skapar en fil Circle.class • Kör java Circle previous next 21 Introduktion Java Exempel: Eka argument • Skapa fil Echo.java (som ekar argumenten vid exekveringen) public class Echo { public static void main(String argv[]) { for(int i = 0; i < argv.length; i++) forloopar ser ut System.out.print(argv[i] + " "); som i System.out.print("\n"); ANSI-C } } • Kompilera javac Echo.java • Kör java Echo detta är input previous next 22 Introduktion Java In- och utmatning • Textutmatning sker via klassen System System.out.println(...); – Där: • System är en klass i java.lang • out är en klassvariabel i System • out är en instans av klassen PrintStream • PrintStream har en instansmetod println som skriver ut text på terminalen • Textinmatning sker också via klassen System char c = System.in.read() – Inmatningen måste dock ”fånga” undantag try{char c = System.in.read()} catch(IOException e){//fel har inträffat} previous next 23 Introduktion Java Exempel: ”program” med teckeninmatning package Tests; import java.io.*; class TestIO_1_1 { public static void main(String [] args) { for(;;){ int in; try {in = System.in.read();} catch(IOException e) {in = -1;} if ((char) in == '0') return; System.out.println(in); } } } previous next 24 Introduktion Java Exempel: dialog med stränginmatning package Tests; import java.io.*; class TestIO { public static void main(String [] args) throws IOException { System.out.println("TEST OF INTERACTION/1"); BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); for(;;) { System.out.print(">"); String line = in.readLine(); if (line.equalsIgnoreCase("quit")) break; if (line.equalsIgnoreCase("help")) System.out.println("To quit: write 'quit'"); else System.out.println("\teko: " + line); } } } previous next 25 Introduktion Java Java: läsa argumenten som ges via terminalen public class ShowArgs { public static void main(String[] args) { main for(int i=0; i<args.length; i++) for-loop System.out.println("Arg " + i + " is ” + args[i]); } } Testa med tex java ShowArgs arg1 arg2 arg3 previous next 26 Introduktion Java … “använd” syntax for • I föregående exempel använde vi en for-loop – Syntaxen är följande: for(initialvärde; villkor; uppdatera) sats • Andra loopkonstruktioner while do – while-loop while(villkor) sats – do-loop do sats while(villkor) • Där en sats antingen är – enstaka sats som System.out.println(“Test”); – eller flera satser inom måsvingar som { x += 10; System.out.println(“X: “ + x); } previous next 27 Introduktion Java Java: exempel med bla villkor och modulo % är modulo previous public class FizzBuzz { public static void main(String[] args) { for(int i = 1; i <= 100; i++) { if (((i % 5) == 0) && ((i % 7) == 0)) System.out.print("fizzbuzz"); else if ((i % 5) == 0) System.out.print("fizz"); else if ((i % 7) == 0) System.out.print("buzz"); else System.out.print(i); System.out.print(" "); } System.out.println(); } } next 28 Introduktion Java Villkor • Villkor kan skrivas if (uttryck) sats – eller if (uttryck) sats else sats • Man kan ibland också använda ?: uttryck ? omSantVärde : annarsVärde • Eventuellt switchar switch(heltal) { case värde1 : sats1; break; case värde2 : sats2; break; … default: satsN; } previous next 29 Introduktion Java Java: fler exempel, Fibonacci public class Fibonacci { public static void main(String[] args){ int current, prev = 1, prevprev = 0; for(int i = 0; i < 20; i++) { current = prev + prevprev; System.out.print(current + " "); prevprev = prev; prev = current; } System.out.println(); } } previous next 30 Introduktion Java Java: ännu fler exempel public class Reverse { public static void main(String[] args) { // Loopa baklänges genom orden som ges som argument for(int i = args.length-1; i >= 0; i--) { // Loopa baklänges genom tecknen i varje argument for(int j=args[i].length()-1; j>=0; j--) { // Skriv ut tecken j i i:te argumentet. System.out.print(args[i].charAt(j)); } System.out.print(" "); } System.out.println(); } } previous next 31 Introduktion Java Java: exempel, iterativ fakultetsfunktion public class Factorial { public static int factorial(int x) { int fact = 1; for(int i = 2; i <= x; i++) fact *= i; return fact; } } previous next 32 Introduktion Java Java: exempel, rekursiv fakultetsfunktion public class Factorial2 { public static long factorial(long x) { if (x == 1) return 1; else return x * factorial(x-1); } } previous next 33