Java Konventionella program Java Virtual Machine Varför java

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