• No results found

(Man brukar säga att) Java är...

N/A
N/A
Protected

Academic year: 2021

Share "(Man brukar säga att) Java är..."

Copied!
10
0
0

Loading.... (view fulltext now)

Full text

(1)

Denna föreläsning

• Allmänt om Java

• Javas datatyper, arrayer, referenssemantik

• Klasser

• Strängar

Objectorienterad programmering Sida 1

Java, grunder Sven-Olof Nyström

Historik: Java

• Hette från början OAK (James Gosling, 1991).

Utvecklades vid SUN Microsystems.

• Från början avsett för inbyggda system (tex

tvättmaskiner, mobiltelefoner, TV/video, spel, mm).

• (Storlek och pålitlighet var viktiga)

• Med WWW fick projektet en annan inriktning

• Java blev ett programspråk för web-applikationer

(Man brukar säga att) Java är...

• enkelt

• “baserat på C/C++”

• objekt-orienterat “från början”

• dynamiskt utbyggbart

• robust, säkert

• oberoende av hårdvaruarkitektur (portabelt)

• web-anpassat: applets, div bibliotek

Objectorienterad programmering Sida 3

Java, grunder Sven-Olof Nyström

Kompilering av Java

• Traditionella kompilatorer översätter programtexten till maskinkod.

• De flesta Java-kompilatorer översätter till en slags maskinkod; Javabytekod (JVM).

• Det finns inga maskiner som kör Javabytekod (nja, nästan inga).

• Därför måste JVM-koden vid körning antingen – översättas till maskinkod, eller

– interpreteras.

(2)

Utvecklingsverktyg för Java

• Senaste versioner är – J2SE 1.4.2 samt – J2SE 5.0

• J2SE 5.0 (även känt som Java 1.5) innehåller viktiga utökningar, inte helt bakåtkompatibelt.

• Vi fokuserar på Java 5.

Objectorienterad programmering Sida 5

Java, grunder Sven-Olof Nyström

On-line dokumentation

• När man arbetar med Java behöver man dokumentation av alla standardklasser.

http://java.sun.com/j2se/1.5.0/docs/api

• Suns tutorial

http://java.sun.com/docs/books/tutorial

Verktyg

Arbetsgången är:

• man redigerar sina filer (klasser) med något redigeringsverktyg (tex Emacs),

• kompilerar dem med javac och

• kör den med java (applikationer) eller appletviewer.

Objectorienterad programmering Sida 7

Java, grunder Sven-Olof Nyström

Verktyg (forts)

• Applets kan också visas i webbläsare som t.ex.

Explorer, Netscape eller Mozilla.

• Kompilator, interpretator och appletviewer startas – från ett terminalfönster (Unix) eller

– från ett MS-DOS-fönster (Windows).

• Om filen heter MinTest.java skriver man alltså:

javac MinTest.java java MinTest

(3)

Ett första exempel

• Klassen Hej implementerar ett klassiskt exempel: en applikation som skriver ut ett meddelande.

• Filen ska heta Hej.java, samma namn som klassen

• public class Hej {

public static void main(String[] args) { System.out.println("Hej hopp");

} }

Objectorienterad programmering Sida 9

Java, grunder Sven-Olof Nyström

Enkelt exempel (testkörning–Unix)

harpo$ javac Hej.java harpo$ java Hej Hej hopp

harpo$

harpo$ java -Djava.compiler=NONE Hej Hej hopp

Datatyper i Java: Tre slag

• Primitiva: Sanningsvärden, tecken, heltal, flyttal (8 stycken)

• Arrayer (nästan inte alls som i C)

• Objekt

Objectorienterad programmering Sida 11

Java, grunder Sven-Olof Nyström

De åtta primitiva typerna

Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit

char Tecken \u000 16 bit

byte Heltal 0 8 bit

short Heltal 0 16 bit

int Heltal 0 32 bit

long Heltal 0 64 bit

float Flyttal 0

.0 32 bit

double Flyttal 0

.0 64 bit

(4)

Typen boolean

1. representerar ett sanningsvärde 2. genereras av relationsoperatorer

(tex ==, <)

3. if och while-satser kräver att alla sanningsvärden representeras som boolean

Objectorienterad programmering Sida 13

Java, grunder Sven-Olof Nyström

Typen char

Ett tecken i Unicode.

16 bitar.

Unicode omfattar alla levande och utdöda språk.

Hur får dessa plats i 16 bitar?

Typkonvertering heltal & flyttal

• Ett tal kan automatiskt omvandlas till ett tal av en vidare representation.

(Exempel: int->long, int->double, float->double)

Ett heltal kan omvandlas till en mindre representation via en uttrycklig omvandling,

• Aritmetiska operatorer (tex +) returnerar alltid ett värde av type int eller long.

b = b + 1 är ej korrekt om b är en byte.

Objectorienterad programmering Sida 15

Java, grunder Sven-Olof Nyström

Arrayer i Java: Inte som i C

• arrayer skapas explicit

• storlek anges dynamiskt

• index testas

int[] a = new int [10];

a[-1] och a[10] ger felmeddelande!

• inititiering

int[] a = {1, 2, 3};

men även

int[] a = {1, n+1, 2*n, n*n};

(5)

Inte som i C (forts)

• Tilldelning

int[] a = new int [10]; int[] b = a;

a och b refererar till samma array!

• Storlek på array ges av .length.

int[] a = new int[10];

int x = a.length;

a = new int[100];

int y = a.length;

Objectorienterad programmering Sida 17

Java, grunder Sven-Olof Nyström

Inte som i C (forts)

• “null” står för ingen array.

int[] a = null;

betyder samma sak som int[] a;

Exempel: Byt värde på två array-variabler

static void main (String args[]) { int[] a = {1,2,3};

int[] b = {99, 98, 97, 93, 92, 91};

int[] temp;

temp = a;

a = b;

b = temp;

System.out.println("b[0] = " + b[0]);

}

Objectorienterad programmering Sida 19

Java, grunder Sven-Olof Nyström

Lite om strängar

• I Java är strängar objekt av en speciell klass “String”;

inte en primitiv datatyp och inte heller en array.

• Tecknen i en sträng är av “char”-typ, dvs Unicode-tecken.

• Objekt av typ String är konstanta—man kan inte ändra i en sträng. (Det finns en klass StringBuffer som tillåter ändringar.)

• Man kan skapa ett nytt sträng-objekt med syntaxen

"En sträng".

(6)

Strängar (forts)

• Strängar slås ihop (konkateneras) med “+”.

Om a och b är strängar så returnerar uttrycket a + b

en ny sträng som är konkateneringen av a och b.

• Om det ena argumentet till + är ett String-objekt, så omvandlas det andra till en sträng.

• Exempel:

int x = 42;

System.out.println("Shoesize: " + x);

Resultat: “Shoesize: 42”.

Objectorienterad programmering Sida 21

Java, grunder Sven-Olof Nyström

Strängar, jämförelse

• Notera att två strängar kan ha samma innehåll utan att vara identiska.

• Operatorn == testar om två referenser är till samma objekt.

• För att testa om två strängar har samma innehåll, skriv (tex)

s1.equals(s2)

Vad är en klass?

• En klass är ett sätt att beskriva en mängd objekt och deras gemensamma egenskaper.

• En klassdefinition innehåller datafält ...

• ... och metoder (= “funktioner” i C).

• Man kan också säga: En klassdefinition beskriver kod och data.

• Ett Javaprogram består av en eller flera

klassdefinitioner (och ingenting kan finnas utanför en klassdefinition).

Objectorienterad programmering Sida 23

Java, grunder Sven-Olof Nyström

Klasser och objekt

• Varje objekt tillhör en viss klass. (Objektets klass är detsamma som objektets typ.)

Vi säger att objektet är en instans av klassen.

• Alla objekt av en viss klass kan användas på samma sätt–de har samma “gränssnitt”.

• En definition av en viss klass kan ses som en mall för objekt av den typen.

(7)

Klassdefinition: Exempel class Person {

int ålder;

String namn;

}

• Konvention: Namnet på en klass skrivs med stor bokstav.

’namn’ och ’ålder’ är fält i objekt av typen Person.

• Skansholm: instansvariabler

• Engelska: field

Objectorienterad programmering Sida 25

Java, grunder Sven-Olof Nyström

Klassdefinition: Körexempel

Person x;

x = new Person ();

x.ålder = 42;

x.namn = "Kalle Karlsson";

System.out.println(

"Personen " + x.namn + " är " + x.ålder + " år gammal");

Referensvariabler och referenssemantik

Person x;

Person y;

x = new Person ();

y = x;

x.ålder = 42;

x.namn = "Kalle Karlsson";

Vilken ålder har y?

Objectorienterad programmering Sida 27

Java, grunder Sven-Olof Nyström

Referensvariabler och referenssemantik(forts)

• Givet en klassdefinition class X { ... }

• och en variabeldeklaration X a;

Variabeln a lagrar en referens.

(8)

Referensvariabler (forts)

• Exempel:

X a, b;

a = new X();

b = a;

• Nu refererar a och b till samma objekt.

Objectorienterad programmering Sida 29

Java, grunder Sven-Olof Nyström

Referensvariabel, regel

Variabler av klasstyp har referenssemantik.

• Nya objekt skapas med new.

• Tilldelning kopierar referensen, inte objektet.

Metoder

public class Person { int age;

void incrementAge() { age = age + 1;

} }

En klassdefinition även innehålla definitioner av metoder.

Liknar funktioner i C, men en metod kan referera till objektets instansvariabler.

Objectorienterad programmering Sida 31

Java, grunder Sven-Olof Nyström

Referensvariabler i metodanrop

• Med en metoddefinition void f(X c) { ... }

och ett anrop f(a)

kommer variabeln c inom metodkroppen att referera till samma objekt som a

Regel: Objekt kopieras aldrig (om man inte ber uttryckligen om det).

(9)

Konstruktorer: Att skapa nya objekt

Exempel:

class Person { [...]

Person (String n, int å) { ålder = å;

namn = n;

} }

Skapa en ny person:

Person x = new Person("Kalle", 42);

Objectorienterad programmering Sida 33

Java, grunder Sven-Olof Nyström

Konstruktorer (forts)

• En konstruktor har alltid samma namn som klassen

• En konstruktor deklareras utan resultattyp (inte ens void)

• En konstruktor ska initialisera objektets fält (instansvariabler)

• Om en klass inte har någon konstruktor, kommer Javakompilatorn att definiera en parameterlös konstruktor (defaultkonstruktorn)

Namns räckvidd

• Instansvariabler och metoder kan kommas åt direkt inom hela den egna klassen

• Namn på lokala variabler inom ett block (metodkropp) kan bara kommas åt inom blocket (metodkroppen).

• Om samma namn används för flera olika saker gäller den användning som är "närmast".

• Instansvariabler och metoder kan alltid kommas åt med this:

this.namn ger instansvariabeln i nuvarande klassen även om namn har andra betydelser.

Objectorienterad programmering Sida 35

Java, grunder Sven-Olof Nyström

Referenssemantik, repetition

Vad händer om. . .

• man tilldelar två variabler samma objekt?

K x = new K();

K y = x;

• passar ett objekt som parameter?

void m(K x) { ... } K y = new K();

m(y);

(10)

Referenssemantik (forts)

• en metod returnerar ett objekt?

K m() {

K x = new K();

return x;

}

• om variabeln redan är bunden?

K x = new K();

K y = new K();

y = x;

Objectorienterad programmering Sida 37

References

Related documents

Det som har framkommit är vad förskolecheferna anser att förskolläraryrket har för specifika kunskaper och hur förskollärare genom att ta ansvar över sin yrkesroll kan stärka sin

Om man specificerar detta objekt till aktiviteten att skriva ett brev står skrivpulpeten även i re- lation till Centralposthuset och föremål som associeras till denna byggnad..

• Man kan även låta destruktorn vara privat då förhindras allokering på

Objekt Vinařství v sobě spojuje několik funkcí - trvalé bydlení pro majitele a jeho sestru, výrobu vína, místo pro degustace a ubytování pro turisty.. Pro uspořádání

Flygtrafikledningstjänst för luftrummet i anslutning till andra flygplat- ser än sådana som ägs eller drivs av staten eller av en juridisk per- son där staten har ett

för verksamhet som står under tillsyn av Finansinspektionen, men i remissen föreslås att det undantaget inte ska gälla de företag som omfattas av den föreslagna lagen om

Faktorerna som påverkar hur lätt vagnen är att manövrera är vikten, val av hjul och storleken på vagnen. Val av material påverkar vikten i stor utsträckning och då vagnen ska

Området hyser ett visst biotopvärde, främst genom förekomst av grov ek och asp, samt ett visst artvärde vilket motiverar ett påtagligt