Java Konventionella program • Utformades av James Gossling (SUN) och släpptes 1995 • Konstruerat för att vara plattformsoberoende. Dvs ett program skrivet i java skall gå att köra på olika datorplattformar utan att man behöver göra några förändringar. Mac kod Mac PC kod PC Unix kod Unix Källkod Mac lib PC lib Unix lib 253 254 Java Virtual Machine Varför java? Varför inte? • Maskinoberoende Källkod – Virtuell maskin Bytecode • Säkerhet – Ingen direkt tillgång till systemet • Storlek • Prestanda lib vm Mac os lib vm PC os lib – Just-in-time vm UNIX 255 256 Java och C++ Olika typer av program • Bygger mycket på C++ – Inget äkta superset av C eller C++ • Applications (Apps) • Rensat up i C/C++ – ”Vanliga” program – – – – • Applets – Bytecod i/på webbsidor • Javascript ≠ Java Inga pekare Ingen variabel argumentlista (a la printf) Ingen preprocessor Inga enum/struct/union • Garbage Collection • Alltid dynamisk bindning Inga templates (ännu) • Inga default värden för parametrar – Källkod direkt på webbsidor 257 258 1 Ett litet javaprogram Datatyper public class App1 { public static void main(String[] args) { System.out.println(”Hellow world”); } } • • • • • • • • • boolean byte char short int float double String Type Cast nödvändigt ibland 8 bitar 8 16 (Unicode) 16 32 32 64 259 260 Kontrollstrukturer Klasser • Jämförelser ger boolean som resultat • En klass per .java – fil • Enda sättet att skapa en ny typ • Alla funktioner måste vara medlemmar i någon klass – Har inget med heltal att göra • if • while – Inga argument -> tom parameterlista – Kan ha labels för uthopp ur nästade loopar • Alla funktioner måste deklareras i klassen • for • switch 261 262 Exempel Access Control class BankAccount { private double balance; } • Default är friendly – Åtkomst i samma paket (package) public void deposit(double amount) { if(amount >=0.0) balance= balance + amount; } • public public double getBalance() { return balance; } • private – Åtkomst från alla paket • protected – Åtkomst från samma paket – åtkomst endast inom samma klass 263 264 2 Referenser Konstruktorer/destruktorer • Inga pekare, referenser istället • Garbage collection • Variabler initieras automatiskt till 0, null eller false • Copy constructor behövs sällan • Finalizer – Reference counts • Arrays – Objekt i java – int vector[]; Storleken behöver ej specificeras vid deklarationen; – Använd new – Koll av index – Array of array – Anropas när objektet återlämnas, inte när det försvinner – Låt garbage collection göra jobbet! int [][] matrix= new int[2][]; – Kolumner inte nödvändigtvis lika långa matrix[0]=new int[2];matrix[1]=new int[3]; 265 266 Arv Packages • En grupp av klasser • Har endast enkelt arv • Extends – package namn1.namn2… – import namn1.*; – Unnamed – class CheckingAccount extends BankAccount • Interface • Klasserna lagras i olika kataloger – Något en klass måste implementera – ”lättviktstyp” • Implements – Inte ett riktigt arv – Används för att simulera multipelt arv 267 268 srd/math/ComplexNumber.class • Deklaration package srd.math; public class ComplexNumber { …} • Användning srd.math.ComplexNumber c1; • Eller import srd.math.*; ComplexNumber c1; Java class library • Java.lang – Fundamentala klasser • Object • String • Class Wrappers – Automatiskt importerad • Java.applet – www applets 269 270 3 Klassbibliotek forts. Multithreading • Java.awt • Flera ’trådar’ samtidigt • Ett slags lättviksprocesser – Maskinoberoende fönsterverktyg • Java.io – Filhantering – Delar samma minne • Java.net • Direkt stöd i språket för att hantera konflikter mellan olika trådar – Internet i/o • Java.util – blandat exempelvis – synchronized • Datum • Osv. 271 272 Abstract Window Toolkit class MyClass implements Runnable { private Thread mThread; public void run() { // Här kan det vara en oändlig loop } public void startNewThread(viod) { mThread=new Thread(this); mThread.start(); } } 273 274 275 276 Events/Händelser • Hanteras av lyssnare • Följer i stort design mönstret Observer • addActionListener(myListener) 4 Java Beans Java på internet • • • • • Komponenter som kan manipuleras vid designen – Knappar – Listor – ”radiobuttons” www.javasoft.com/docs/books/jls/html/index.html www.javasoft.com/Series/Tutorial/book.html www.javasoft.com/docs/books/vmspec/ http://www.developer.com/java/ • Motsvarar en klass i AWT • Jmf VBX, OCX i Visual Basic, Delphi 277 278 5