INTRODUKTION TILL
PROGRAMMERING
Föreläsning 6 (9.1.2006)
INNEHÅLL:
-Primitiva datatyper
-Referenstyper
-Arrayer
-Strängar
-Klasser och instansvariabler
-Utmatning på bildskärmen
-Inmatning från tangentbordet
Jonny Karlsson 11.10.2005
Datatyper
Datatyperna i Java är i stora drag samma som i C.
Java definierar dock ett antal nya datatyper som inte finns i C.
I Java finns två olika slags datatyper:
•Primitiva datatyper
•Referenstyper
Jonny Karlsson 11.10.2005
Primitiva datatyper
En primitiv datatyp är en datatyp som finns definierat i språket från början.
Primitiva datatyper i Java
*
Namn
Utrymme i minnet Värden
*
byte
8 bitar (1 byte)
-27 till + 27 – 1
*
short
16 bitar (2 byte)
-215 till + 215 – 1
int
32 bitar (4 byte)
-231 till + 231 – 1
long
64 bitar (8 byte)
-263 till + 263 – 1
char
16 bitar (2 byte)
Tecken i Unicodcode tabellerna
*
8 bitar (1 byte)
true eller false
float
32 bitar (4 byte)
-3,40292347*1038 till
+3,40292347*1038
double
64 bitar (8 byte)
-1,79769313486231570*10308 till
+1,79769313486231570*10308
boolean
= Finns ej i C
Jonny Karlsson 11.10.2005
Referenstyper
En referenstyp kan vara en arraytyp, klasstyp eller gränssnittyp.
Dessa typer behandlas i vissa viktiga avseenden annorlunda än de primitiva datatyperna.
Ett värde i en referenstyp kallas för objekt
Referenstyperna kan i princip bli hur många som helst eftersom de kan skapas av
programmeraren efterhand
Jonny Karlsson 11.10.2005
Arrayer (”arrays”)
En array är en tabell/vekor som är en ändling följd av primitiva värden eller objekt
där alla ingående värden har samma typ.
Fungerar lika som tabeller i C, fast de skapas på ett lite annorlunda sätt.
Man undviker i Java att tala om vektorer för att undvika sammanblandning med
klassen vector.
Värden i en array kallas för medlemmar.
Jonny Karlsson 11.10.2005
Deklaration av Array-variabler
int [ ] a;
eller
int a [ ];
Detta deklarerar variabeln a som är en array av typen int.
Variabeln a är egentligen en referens till en array och specificerar ingen längd på
arrayen.
Jonny Karlsson 11.10.2005
Skapande av arrayer
Till skillnad från primitiva datatyper (t.ex. int) måste en array skapas (liksom andra
referenstyper) innan ett värde kan tilldelas en medlem.
a = new int[10];
En array med plats för 10 värden av typ int skapasoch a knyts till denna array.
new är ett nyckelord som används för att skapa nya objekt.
Förstå skillnaden mellan variabler av primitiv typ och referenstyp:
x = 360; //värdet 360 skrivs in i variabeln x dvs. den plats i minnet som betecknas
//med x
a = new int[10]
//En array med plats för 10 heltal skrivs ej in i a, utan a tilldelas en
//referens/pekare/handtag till arrayen som finns på en helt annan
//plats i minnet
Variablen a ovan berättar alltså på vilken plats i minnet arrayen finns.
Jonny Karlsson 11.10.2005
Skapande av arrayer
När man skapar en array med nyckelordet new initialiseras automatiskt alla medlemmar av
arrayen till ett visst värde.
Exempel:
int tab[] = new int[5];
//alla 5 medlemmarna i arrayen tab initialiseras till 0. Samma
//gäller även andra tabeller av numerisk typ.
Längden på en array kan i programkoden fås med:
a.length
För övrigt hanteras arrayer i Java på samma sätt som tabeller i C.
Jonny Karlsson 11.10.2005
Strängar
Definierar en ändling följd av tecken.
I Java ugör strängar en klass kallad String.
Klassen String innehåller en stor samling metoder för att manipulera strängar (en del av
dessa tas upp lite senare)
Till skillnad från strängar i C (char[ ]) är strängar i Java (String) oföränderliga, dvs. när
en sträng skaptats kan den ej längra förändras utan i stället måste en ny sträng skapas.
Jonny Karlsson 11.10.2005
Strängar
En sträng deklareras enligt följande:
String s;
En sträng deklareras och initialiseras:
String s2 = ”Kalle Anka”;
En sträng tilldelas ett värde:
s2 = ”Musse Pigg”;
Jonny Karlsson 11.10.2005
Strängar
Två strängar kan konkateneras/slås ihop med + operatorn:
String str1 = ”Kalle”, str2 = ”Anka”;
nystring = str1 + str2;
//innehållet i nystring blir ”KalleAnka”;
Två strängar kan jämföras m.h.a. instansmetoden equals() definierad i klassen String.
Denna metod returnerar ett värde av typ boolean. Om jämförelseträngen man ger som
parameter till metoden equals() är identisk med den sträng man jämför med, returneras
värdet true, i annat fall värdet false. Se exemplet nedan:
String s = ”pelle”;
If(s.equals(”pelle”) == true)
if(s.equals(”ville”) == true)
//denna if-sats blir ”true”
//denna if-sats blir ”false”
Jonny Karlsson 11.10.2005
Klasser
Alla värden som hanteras i Java är antingen primitiva typer eller referenstyper.
Referenstyper kallas vanligen objekt
Ett objekt kan antingen vara en array eller tillhöra någon i ett program (eller bibliotek)
definierad datatyp.
Dessa definierade typer kallas för klasser.
Ett värde (objekt) som hör till en viss klass kallas för en instans av klassen.
Jonny Karlsson 11.10.2005
Klasser
Exempel:
String s;
En ny variabel s deklareras ovan som är av typen String.
String är en klass som definierar strängar och s blir nu ett nytt objekt eller en instans av
klassen String.
String är ett exempel på en klass som finns färdigt definierad i Java.
Jonny Karlsson 11.10.2005
Att skapa egna klasser
Klasser kan även vid behov deklareras av programmeraren själv.
En ny klass kan deklareras i en skild källkodsfil eller i samma källkodsfil som innehåller
huvudklassen med tillhörande huvudfunktion (”main”-funktion).
Tillsvidare behandlar vi hur man deklarerar klasser i samma källkodsfil.
Jonny Karlsson 11.10.2005
Att skapa egna klasser
En egen klass i samma källkodsfil som huvudklassen deklareras enligt följande:
public class mittJavaProg
{
public static void main(String args[ ])
{
}
}
class Minklass
{
}
Observera att huvudklassen och endast huvudklassen skall ha nyckelordet public.
Huvudklassens namn bör vara samma som källkodsfilens namn.
Jonny Karlsson 11.10.2005
Klasser
Vår tidigare deklarerade klass ”Minklass” var för enkelhetens skull en tom klass som
varken gör någonting eller innehåller variabler.
En klass kan innehålla bl.a. instansvariabler och instansmetoder.
Tillsvidare går vi endast igenom instansvariabler.
Jonny Karlsson 11.10.2005
Klasser: instansvariabler
Exempel: Vi behöver ett program som hanterar olika egenskaper av en människa.
Dessa egenskaper kan för enkelhetens skull nu vara endast födelseår och namn.
Då skulle vi deklarera en ny klass för människa med två instansvariabler födelseår (int)
och namn (String):
class Manniska
{
int fodelsear;
String Namn;
}
Observera att klassen ovan påminner om poster i C
Jonny Karlsson 11.10.2005
Klasser: skapa klassinstans/objekt
Om vi nu från huvudklassens huvudfunktion vill skapa en ny människa och till den nya
människan tilldela ett värde för födelseår och ett värde för namn gör vi enligt följande:
public class mittJavaProg
{
public static void main(String args[ ])
{
Manniska kalle;
//Deklarerar en variabel ”kalle” av typen
//”Manniska”
kalle = new Manniska();
//skapar en instans av klassen ”Manniska”.
//Adressen/referensen till klassen tilldelas
//variabeln kalle.
}
}
Jonny Karlsson 11.10.2005
Klasser: syftningsoperator
Efter detta kan den egna klassens instansvariabler kommas åt m.h.a. punktnotation
(precis som vid användning av poster i C):
kalle.fodelsear = 1977;
kalle.namn = ”Karl Karlsson”;
Punktteknet som används här kallas i Java för syftningsoperator
Jonny Karlsson 11.10.2005
Utmatning på bildskärmen
Utmatning av data på bildskärmen kan i DOS-baserade Java program göras med:
System.out.println();
Statiska tecken matas ut enligt följande:
System.out.println(”Hej på er alla”);
Utskrift av specialtecken och radbrytstecken fungerar lika som med funktionen printf i C:
System.out.println(”\”Att vara eller icke vara\” sade Shakespear\n”);
println sätter automatiskt in ett radbrytstecken i slutet av varje sats.
Jonny Karlsson 11.10.2005
Utmatning på bildskärmen
Utmatning av variabelvärden:
int tal = 599;
String s = ”Pekka”
System.out.println(tal);
System.out.println(s);
//skriver ”599” på bildskärmen
//skriver ”Pekka” på bildskärmen
Variabler och statisk text kan slås ihop i en println-sats m.h.a. + operatorn:
System.out.println(”Namnet på gubben är: ” + s);
//skriver ”Namnet på gubben är:
//Pekka” på bildskärmen
System.out.println(s + ” är ” + tal + ” år gammal”); //skriver ”Pekka är 599 år gammal” på
//bildskärmen
Jonny Karlsson 11.10.2005
Inmatning från tangentbordet
Inte lika enkelt som utmatning till bildskärmen.
Vissa element behövs för att kunna läsa in information som man skriver in från
tangentbordet:
InputStreamReader
BefferedReader
Eftersom innebörden i ovanstående element kräver mer kunskap i programmering än vi
hittils fått, nöjer vi oss tillsvidare med att endast lära oss hur syntaxen ser ut för
att få inmatningen från tangentbordet att fungera:
Följande rad bör sättas in någonstans i början av main funktionen:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Jonny Karlsson 11.10.2005
Inmatning från tangentbordet
Klassbiblioteket java.io.* måste importeras för att få inläsningsfunktionerna att fungera.
(Detta kan jämföras med att inkludera biblioteksfiler i C). Importeringar av klassbibliotek
sker alltid först i källkodsfilen:
import java.io.*;
Efter detta kan man använda metoden readLine() via objketet/instansen in för att läsa in
data från tangentbordet:
in.readLine();
Användning av readLine() metoden kräver att metoden varifrån readLine() anropas skall
definieras att antingen hantera eller ignorera IO felmeddelanden. Se exemplet på
följande sida.
Jonny Karlsson 11.10.2005
Inläsning av strängar
Metoden readLine() returnerar det data användaren matat in från tangentbordet i String
format. Man kan således lätt läsa in data från tangenbordet till en String instans:
import java.io.*;
public class minklass
{
public stativ void main(String args[]) throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s;
s = in.readLine();
}
}
Jonny Karlsson 11.10.2005
Inläsning av numeriska värden
Är lite mer komplicerat än inläsning av heltal i C eftersom man i DOS-baserade Java
program inte direkt kan läsa in ett heltal och spara talet i en heltalsvariabel.
readLine() metoden returnerar alltid inmatat data från tangenbordet i String format.
Man måste därför konvertera datat till ett heltal innan datat kan sparas i en
heltalsvariabel.
För att konvertera data från String till int kan man utnyttja en klass som heter Integer och
en av dess instansmetoder, parseInt:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String text;
int heltal;
text = in.readLine();
int heltal = Integer.parseInt(text);
Jonny Karlsson 11.10.2005
Inläsning av numeriska värden
På samma sätt som man konverterar teckensträngar till heltal kan man konvertera
teckensträngar till flyttal (float) m.h.a.:
klassen Float och instansmetoden parseFloat.
och teckensträngar till större flyttal (double) m.h.a.:
klassen Double och instansmetoden parseFloat.
Jonny Karlsson 11.10.2005