• No results found

Klasser och Objekt i Java. C++ använder beteckningarna datamedlem resp. medlemsfunktion. Klassdefinition. Exempel: Variabler

N/A
N/A
Protected

Academic year: 2022

Share "Klasser och Objekt i Java. C++ använder beteckningarna datamedlem resp. medlemsfunktion. Klassdefinition. Exempel: Variabler"

Copied!
8
0
0

Loading.... (view fulltext now)

Full text

(1)

9/20/00

Kap J2-1

Klasser och Objekt i Java

• C++ använder beteckningarna datamedlem resp.

medlemsfunktion.

Passagerare

id

ankomsttid destination

kliverpå kliverav åker

Klassnamn

Metoder (operationer) Instansvariabler (attribut)

(Passagerare) 12

14.21 Blg

(Passagerare) 23

15.56 Fln

9/20/00

Kap J2-2

Klassdefinition

• Exempel:

public class DoubleCell { //instansvariabler private double val;

//metoder

public double readValue(){ return val;}

public void writeValue(double value){val=value;}

}

//Anv av DoubleCell

public class TestDoubleCell {

public static void main(String [] args) { DoubleCell d= new DoubleCell ();

d.writeValue(3.14);

System. out.println(”Innehåll: ” + d.readValue());

} }

Kap J2-3

Variabler

• Java har två kategorier av variabler:

– enkla variabler

• int,double,char,byte etc.

– referensvariabler

• används för att referera olika objekt.

• Variabeldeklaration

modifierare typ variabelnamn= initieringsvärde;

– T ex

int antal=0, nr=33; final double PI= 3.141;

Date d;

private int antalBarn ; //instansvariabel

• Instansvariabler initieras automatiskt till ett defaultvärde:

0 för enkla aritmetiska variabler.

null för referenser.

false för boolska variabler.

(2)

9/20/00

Kap J2-4

Enkla variabler och inbyggda typer

• Heltal

– byte 8-bitars heltal med tecken. [-128,127]

– short 16-bitars heltal med tecken. [-32768,32767]

– int 32-bitars heltal med tecken.

≈[-2*109

, 2*10

9

] – long 64-bitars heltal med tecken.

≈[-9*101 8

, 9*10

18

]

• Decimaltal

– float 32-bitars flyttal.

≈[-3*103 8

, 3*10

38

] – double 64-bitars flyttal.

≈[-2*103 0 8

, 2*10

3 0 8

]

• Logiska typer

– boolean Endast värdena true eller false .

• Tecken

– char Endast 16-bitars Unicode-tecken.

9/20/00

Kap J2-5

Omslagsklasser

• Omslagsklasser (wrapper classes) finns för var och en av de åtta inbyggda typerna. Finns i java.lang .

Byte, Character, Integer, Float, Double o s v.

• Innehåller diverse konstanter och metoder för att operera på dessa.

• Omslagsklasser är s k ”final”-klasser.

– kan expanderas inline av kompilatorn.

• Ex:

float f=Float.MIN_VALUE;

int k= Integer.MAX_VALUE;

if (Float.isInfinite(f)) …..

9/20/00

Kap J2-6

Operatorer

• Aritmetiska operatorer + - * / %

• Logiska operatorer

&& || !

• Jämförelseoperatorer

== != < <= > >=

fungerar alla ≈som i C++!

(3)

9/20/00

Kap J2-7

Referensvariabler

• new måste användas för att skapa ett objekt att referera till.

• Kopiering av objekt görs med hjälp av metoden clone() som många standardklasser har.

DoubleCell d;

d= new DoubleCell ();

DoubleCell e=d;

d

null

d

e

(d) 0.0

9/20/00

Kap J2-8

Garbage collection

• Java har inbyggd s k Garbage collection, d v s ”automatisk skräpsamling”.

• Innebär att objekt som inte längre refereras ”förstörs”. Det minnesutrymme som det upptog, frigörs och kan användas till annat.

• Systemet frigör inte ett minnesutrymme så länge det finns en referens till det!

• Obs! Finns ingen motsvarighet till delete i C++!

Kap J2-9

Textvariabler - String

• Klassen String används för att hantera texter.

– är ej en enkel (primitiv) typ.

– objekten uppträder som en referenstyp.

• Definierar operatorerna + och += för konkatenering av texter:

String m= ”Hej”;

String n=”igen!”;

System.out.println(m+ ” ” + n);

• String-objekt är konstanta, kan EJ ändras (immutable)!

String m += ” ”; //nytt objekt skapas String m += n; //nytt objekt skapas System.out.println(m);

• Operanderna till operatorerna + och += skall båda vara av

typen String.

(4)

9/20/00

Kap J2-10

Jämförelse av strängar.

• För att undersöka om två strängar är lika används metoden equals().

• För en lexikografisk jämförelse används metoden compareTo ().

String m= ”Hej”;

String n= ”igen!”;

if (m.equals(n)) System. out.println ( ”Lika ”);

else System.out.println( ”Ej lika ”);

System.out.println(m.compareTo (n));

if (m==n) System.out.println(”Refererar till samma objekt”);

else System.out.println( ” Refererar Ej till samma objekt”);

9/20/00

Kap J2-11

Andra String -metoder.

• Det finns ett antal metoder knutna till String-klassen.

String m= ”Hej igen!”;

int len= m.length() //=9 char ch= m.charAt(2);//=’j’

String s= m.subString(2,5);

System.out.println(len + ” ” + ch + s);

• För de inbyggda typerna finns automatisk omvandling till typen String. Den görs även vid anrop av metoden System.out.println ().

9/20/00

Kap J2-12

Omvandling mellan String och enkla typer, forts.

• Metoden toString() kan också användas:

System.out.println( Integer.toString (55));

• Många klasser erbjuder en implementation av toString().

Den anropas automatiskt vid omvandlingar. Förutsatt att den finns.

• Omvandlingar i den andra riktningen:

int x= Integer.parseInt(”55”);

double y= Double.valueOf (”3.141”).doubleValue();

//alt. y= Double.parseDouble(”3.141”);//JDK 1.2 ?

(5)

9/20/00

Kap J2-13

Metoder.

• Konstruktorer

– kontrollerar skapandet och initieringen av ett objekt. Överlagring möjliggör multipla konstruktorer.

– defaultkonstruktor skapas om ingen har getts.

• den initierar instansvariablerna med defaultvärden .

• (Mutators and Accessors)

– Accessmetoder avläser objektets tillstånd.

– Set-metoder ändrar ett objektets tillstånd.

• toString()

– används för att kunna skriva ut ett objekts tillstånd.

• equals()

– används för att testa om två referenser refererar till likadana objekt.

• Statiska metoder

– Klassmetoder. Kan anropas direkt utan att gå via ett objekt.

9/20/00

Kap J2-14

Klassen Date (egendef .)

//Minimal Date class, No error //checks or javadoc comments

public class Date {// Fields

private int month;

private int day;

private int year;

// Zero -parameter constructor public Date( ) {

month = 1; day = 1; year=1998;

}

// Three-parameter constructor public Date( int theMonth,

int theDay, int theYear ) {

month= theMonth; day= theDay ; year = theYear;

}

//Two equal values?

public boolean equals (Object rhs ) {

if(!(rhs instanceof Date ) ) return false;

Date rhDate = ( Date ) rhs ; return rhDate.month == month

&& rhDate.day == day

&& rhDate.year == year ; }

// Conversion to String public String toString( )

{

return day + "/" + month + " " + year;

}

Kap J2-15

Metoden main

• När Java-interpretatorn anropas, så exekveras först den main- metod som finns i den klassfil som refereras. Se föregående bild och nedan!

// Sample main public static void

main( String [] args ) { Date d1 = new Date( );

Date d2 = new Date(1,1,1998);

Date d3 = new Date(1,1,1999);

System.out. println("Date 1: ” + d1 );

System.out. println("Date 2: ” + d2 );

System.out. println("Date 3: ” + d3 );

System.out. println("Date1==Date2?: " + d1. equals (d2));

System.out. println("Date1==Date3?: " + d1. equals (d3));

}

(6)

9/20/00

Kap J2-16

Inkapsling och synlighet.

• Modifierare, vilka anger synlighet:

private, public, protected

• Utelämnad modifierare innebär – ”paketsynlighet”

• Tanken är att de klasser som ingår i samma paket skall kunna lita på varandra.

• Synlighet

Synlig i private paket protected public annan klass i

samma paket NEJ JA JA JA

i subklass i ett

annat paket NEJ NEJ JA JA

en klass i ett

annat paket NEJ NEJ NEJ JA

9/20/00

Kap J2-17

Initiering av objekt.

• Instansvariablerna kan initieras direkt!

• Konstruktorer kan överlagras.

• En konstruktor kan anropa en annan konstruktor m h a this!

• this refererar till objektet självt!

public class Date {// Fields

private int month=1; private int day=1; private int year=1998;

public Date( ) { } //Bör oftast finnas

public Date( int month, int day, int year )

{ this. month = month; this.day = day ; this.year = year; }

public Date( int theMonth, int theYear) { this( theMonth,1, theYear); }

public Date( int theYear ) { this(1,theYear); } ……...

9/20/00

Kap J2-18

Kontrollstrukturer

• Kontrollstrukturerna i Java fungerar i stort som i C++.

– Tyvärr i vissa fall.

Typ av struktur Konstruktion

======================================

Villkor if - else

switch case

a ? s : f Frågeteckensoperatorn ---

Iteration while

do - while for

---

Avbrott break

continue return

---

• Ingen operatoröverlagring i Java.

(7)

9/20/00

Kap J2-19

Klassvariabler och klassmetoder

• Kallas även statiska variabler/metoder.

• Är gemensamma för alla objekt i en viss klass.

– en klassvariabel finns bara i en instans.

• Klassvariabler kan initieras i en speciell klassinitierare, även kallad statisk initierare. Syntax:

static {

deklarationer och satser }

• Konstanter bör vara statiska.

• Klassmetoder använder ej ”vanliga” instansvariabler.

9/20/00

Kap J2-20

Litet testprogram

import java.i o.*;

public class Sample {

private int x;

private static int y;

public final static int MAX_VAL = 10;

static { y=6; }

public static void main ( String [ ] args )

{ Sample s1=new Sample(),s2= new Sample(); s1.y=4; s2.y=5;

System.out .println(” MAX_VAL ” + Sample.MAX_VAL);

System.out .println(” y= ” + y );

System.out .println(” s1.x= ” + s1.x + ” s1.y= ” + s1.y );

System.out .println(” s1.x= ” + s1.x + ” s1.y= ” + s1.y );

} }

Kap J2-21

Kompileringsfel , eller...?

import java.i o.*;

public class Sample {

private int x;

private static int y;

public final static int MAX_VAL = 10;

static { y=6;}

}

public class TestSample {

public static void main ( String [ ] args )

{ Sample s1=new Sample(),s2=new Sample(); s1.y=4; s2.y=5;

System.out .println(" MAX_VAL " + Sample.MAX_VAL);

System.out .println(" y= " + y );

System.out .println(" s1.x= " + s1.x + " s1.y= " + s1.y );

System.out .println(" s1.x= " + s1.x + " s1.y= " + s1.y );

}

(8)

9/20/00

Kap J2-22

Standardklassen Math.

• Standardklassen Math finns i paketet java.lang.

– innehåller metoder för de vanliga matematiska funktionerna.

• trigonometri, kvadratrötter, logaritmer, exponenter, min, max etc.

java.lang.math

================================================

PI E talen pi resp. e

abs(a) absolutvärdet av a

max(a,b) min(a,b) största resp. minsta av a och b --- ---

Följande returnerar värde av typ double (x och y reella tal) exp(x) log(x) sqrt(x) exln(x)

ceil(x) floor(x) minsta >=x resp. största <=x

p o w(x,y) xy

round (x) x avrundat till heltal (long )

random(x) ger slumptal [0,1]

--- --- sin(x) cos(x) tan (x) x anges i radianer

asin(x) acos(x) atan (x) ger arcsin etc.

sinh(x) cosh(x) tanh (x) hyperboliska funktionerna x

9/20/00

Kap J2-23

Standardklassen Math, forts.

• Några anrop:

z=9.9*Math.log(x);

hyp= Math.sqrt(Math.pow(x,2)+ Math.pow(y,2));

d= Math.max(a, Math.max(b,c));

A=PI * Math.pow(r,2);

9/20/00

Kap J2-24

References

Related documents

I fall där den i prostitution också är offer för människohandel får denna automatisk målsägandeställning genom brottet människohandel, men nu även i egenskap av offer

Att Stina Fors vid moderns död stod helt utan pengar är troligen också en sanning med modifikation eftersom hon av reportaget att döma bor kvar i det stora huset och dessutom

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..

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

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í

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

En del bättre ingår, huvudsakligen * och kvalitén är blandad men även felfria postfriska märken finns.. felfria ostämplade 50 öre och 1 krona

Ett objekt har förutom ett antal attribut även en samling operationer för att ändra på objektets attribut... Objekt från klassen