Klasser 1 Plan Typer Stninger Klasser Pakker Strenge

  • Slides: 80
Download presentation
Klasser 1

Klasser 1

Plan • Typer • Sætninger • Klasser • Pakker • Strenge • Undtagelser 2

Plan • Typer • Sætninger • Klasser • Pakker • Strenge • Undtagelser 2

Typer En type er en mængde af lovlige værdier. En variabel betegner et sted

Typer En type er en mængde af lovlige værdier. En variabel betegner et sted i lageret, hvor en værdi er lagret. Enhver variabel er tilknyttet en type. I Java skelnes imellem to slags typer: (1) Primitive typer (2) Referencetyper 3

Primitive typer størrelse char 16 bit byte 8 bit short 16 bit int 32

Primitive typer størrelse char 16 bit byte 8 bit short 16 bit int 32 bit long 64 bit float 32 bit double 64 bit boolean ? værdiområde u 0000 til u. FFFF -128 til 127 -32768 til 32767 -2147483648 til 2147483647 -9223372036854775808 til 9223372036854775807 6 betydende cifre (± 1036, ± 10 -34) 15 betydende cifre (± 10308, ± 10 -324) false og true byte, short, int og long kaldes heltalstyper. float og double kaldes flydendetalstyper. 4

Konstanter (literaler) Heltalskonstanter kan angives med decimal notation: 23 oktal notation: 027 heksadecimal notation:

Konstanter (literaler) Heltalskonstanter kan angives med decimal notation: 23 oktal notation: 027 heksadecimal notation: 0 x 17 Flydendetalskonstanter angives som decimaltal med en optionel eksponentdel: 3. 24 e 5 3. 24 e-5 3. 24 f 3. 24 d Tegnkonstanter omsluttes af to apostroffer: 'z' 'u 007 A' '712' ' n ' ' t ' ''' ' " ' '\' 5

Erklæring og initialisering Enhver variabel erklæres ved at angive dens type, dens navn og

Erklæring og initialisering Enhver variabel erklæres ved at angive dens type, dens navn og eventuelt dens startværdi. Eksempler: int num 1; double minimum = 4. 50; int x = 0, num 2 = 2; int num 3 = 2 * num 2; 6

Basale operatorer public class Operator. Test { public static void main(String[] args) { int

Basale operatorer public class Operator. Test { public static void main(String[] args) { int a = 12, b = 8, c = 6; 12 8 6 System. out. println(a + " " + b + " " + c); a = c; System. out. println(a + 686 " " + b + " " + c); c += b; System. out. println(a + " " + 6 8 14 b + " " + c); a = b + c; System. out. println(a + " " + b 22 8 14 + " " + c); a++; ++b; System. out. println(a + " " + b + " " + c); c = a++ + ++b; System. out. println(a + " " + b + " " + c); } 23 9 14 24 10 33 } 7

Præcedens og associativitet Kategori Referenceoperatorer Monadisk Typificering Multiplikativ Additiv Bitvis skift Sammenligning Lighed Bitvis

Præcedens og associativitet Kategori Referenceoperatorer Monadisk Typificering Multiplikativ Additiv Bitvis skift Sammenligning Lighed Bitvis AND Bitvis XOR Bitvis OR Logisk AND Logisk OR Betinget Tildeling Operatorer Associativitet. [] Venstre-mod-højre ++ -- + - ~ ! Højre-mod-venstre new (type) Højre-mod-venstre */% Venstre-mod-højre +Venstre-mod-højre << >> >>> Venstre-mod-højre < <= > >= instanceof Venstre-mod-højre == != Venstre-mod-højre & Venstre-mod-højre ^ Venstre-mod-højre | Venstre-mod-højre && Venstre-mod-højre || Venstre-mod-højre ? : Højre-mod-venstre = += -= *= /= %= Højre-mod-venstre <<= >>>= &= ^= |= 8

Typekonvertering er konvertering af en værdi af en type til en værdi af en

Typekonvertering er konvertering af en værdi af en type til en værdi af en anden type. Eksplicit typekonvertering (casting) bruges for at skabe en temporær værdi af en ønsket type. Eksempel: int x = 6, y = 10; double quotient = x / y; // sandsynligvis forkert! Erstat med: double quotient = (double) x / y; 9

Indsnævring og udvidelse af typer Konvertering af en type fra et mindre værdiområde til

Indsnævring og udvidelse af typer Konvertering af en type fra et mindre værdiområde til en type af et større værdiområde kaldes for typeudvidelse (widening). Konvertering af en type fra et støre værdiområde til en type af et mindre værdiområde kaldes for typeindsnævring (narrowing). Eksempel: int i = 10; long m = 10000; double d = Math. PI; i = (int) m; // indsnævring (cast nødvendig) m = i; // udvidelse m = (long) d; // indsnævring (cast nødvendig) d = m; // udvidelse 10

Sætninger Simple sætninger: Udtrykssætninger (tildeling, metodekald, inkrementering, dekrementering) Erklæringssætninger break-sætninger continue-sætninger return-sætninger Sammensatte sætninger:

Sætninger Simple sætninger: Udtrykssætninger (tildeling, metodekald, inkrementering, dekrementering) Erklæringssætninger break-sætninger continue-sætninger return-sætninger Sammensatte sætninger: sætningsblokke valgsætninger løkkesætninger try-catch-sætninger (sætninger omkranset af {} ) (if, switch) (for, while, do) 11

Udtrykssætninger Eksempler: x = y; x = y = 3; x++; y += x;

Udtrykssætninger Eksempler: x = y; x = y = 3; x++; y += x; p. move(x, y); 12

Erklæringssætninger Placeringen af en erklæring er bestemmende for variablens virkefelt (scope). Eksempel: {. .

Erklæringssætninger Placeringen af en erklæring er bestemmende for variablens virkefelt (scope). Eksempel: {. . . int i; // Her begynder i’s virkefelt i = 10; int j = 20; // Her begynder j’s virkefelt i += j; . . . } // Her ender både i og j’s virkefelt 13

if-sætninger if (Condition) Statement eller: if (Condition) Statement 1 else Statement 2 Condition skal

if-sætninger if (Condition) Statement eller: if (Condition) Statement 1 else Statement 2 Condition skal være et udtryk af typen boolean 14

switch-sætninger switch (Expression) { case Case. Label 1: Statement 1. . . case Case.

switch-sætninger switch (Expression) { case Case. Label 1: Statement 1. . . case Case. Labeln: Statementn default: Statementn+1 } Expression skal være et udtryk af typen int, short, byte eller char 15

Eksempel på switch-sætning switch (some. Character) { case '(': case '[': case '{': //

Eksempel på switch-sætning switch (some. Character) { case '(': case '[': case '{': // Kode til at behandle startparenteser break; case ')': case ']': case '}': // Kode til at behandle slutparenteser break; default: // Kode til at behandle alle andre tegn } 16

Løkkesætninger while (Condition) Statement do Statement while (Condition); for (Init. Expr; Condition; Incr. Expr)

Løkkesætninger while (Condition) Statement do Statement while (Condition); for (Init. Expr; Condition; Incr. Expr) Statement 17

Typisk anvendelse af do-sætning do { prompt user; read value; } while (value is

Typisk anvendelse af do-sætning do { prompt user; read value; } while (value is no good); 18

Brug af break i løkker while (. . . ) {. . . if

Brug af break i løkker while (. . . ) {. . . if (something) break; . . . } outer: while (. . . ) { if (disaster) break outer; } } 19

Brug af continue i løkker for (int i = 1; i <= 100; i++)

Brug af continue i løkker for (int i = 1; i <= 100; i++) { if (i % 10 == 0) continue; System. out. println(i); } 20

Referencetyper En referencetype er en klasse-type, en grænseflade-type eller en array-type. Referencevariable kan indeholde

Referencetyper En referencetype er en klasse-type, en grænseflade-type eller en array-type. Referencevariable kan indeholde henvisninger til objekter eller arrays. Faktisk er arrays også objekter. Internt repræsenteres henvisninger ved lageradresser (32 bit). En referencevariabel kan indeholde den specielle referenceværdi null, hvilket angiver, at variablen ikke henviser til noget objekt. 21

Simple typer contra referencetyper Point p; int i; i = 123; p = new

Simple typer contra referencetyper Point p; int i; i = 123; p = new Point(); 123 Hob (med spildopsamling) p: Point x = 0; y = 0; 22

Ønskværdige egenskaber ved programmel • Brugbart • Rettidigt • Korrekt • Robust • Brugervenligt

Ønskværdige egenskaber ved programmel • Brugbart • Rettidigt • Korrekt • Robust • Brugervenligt • Effektivt • Let at vedligeholde • Genbrugeligt Normalt kan alle egenskaber ikke opfyldes samtidigt 23

Objektorienteret programmering Fokus på • Genbrug • Vedligeholdelse forenkles ved • Fleksibilitet • Modularitet

Objektorienteret programmering Fokus på • Genbrug • Vedligeholdelse forenkles ved • Fleksibilitet • Modularitet 24

Programmeludvikling Programsystem Verden Abstraktion Model System Algoritmer Fortolkning Abstrahere: at se bort fra noget

Programmeludvikling Programsystem Verden Abstraktion Model System Algoritmer Fortolkning Abstrahere: at se bort fra noget 25

Grundlæggende begreber i objektorienteret programmering Objekt: Fortolkning i den virkelige verden: Et objekt kan

Grundlæggende begreber i objektorienteret programmering Objekt: Fortolkning i den virkelige verden: Et objekt kan repræsentere alt, hvad der tydeligt kan identificeres Repræsentation i model: Et objekt har en identitet, en tilstand og en adfærd 26

Tilstand og adfærd Tilstanden for et objekt defineres ved felter med tilhørende værdier. Adfærden

Tilstand og adfærd Tilstanden for et objekt defineres ved felter med tilhørende værdier. Adfærden for et objekt defineres ved metoder, der kan aflæse eller ændre objektets tilstand. 27

Klasser Klasse: Fortolkning i den virkelige verden: Et klasse repræsenterer en mængde af objekter

Klasser Klasse: Fortolkning i den virkelige verden: Et klasse repræsenterer en mængde af objekter med fælles karakteristika. Objekterne kaldes for instanser af klassen Repræsentation i model: En klasse beskriver den struktur af tilstande og adfærd, der er fælles for alle klassens instanser 28

Eksempel på en klasse class Point { int x, y; // Klassenavn // Felter

Eksempel på en klasse class Point { int x, y; // Klassenavn // Felter void move(int dx, int dy) { // Metode x += dx; y += dy; } } En klasse er en skabelon til brug for skabelse af objekter. 29

Tre vigtige begreber i tilknytning til programmeringssprog • Syntaks (notation) • Semantik (betydning) •

Tre vigtige begreber i tilknytning til programmeringssprog • Syntaks (notation) • Semantik (betydning) • Pragmatik (anvendelse) 30

Klasseerklæringer [Class. Modifiers] class Class. Name [extends Super. Class] [implements Interface 1, Interface 2.

Klasseerklæringer [Class. Modifiers] class Class. Name [extends Super. Class] [implements Interface 1, Interface 2. . . ] { Class. Member. Declarations } 31

Klassemodifikatorer public Tilgængelig overalt. Kun én offentlig klasse per fil. Filen skal hedde Class.

Klassemodifikatorer public Tilgængelig overalt. Kun én offentlig klasse per fil. Filen skal hedde Class. Name. java private Kun tilgængelig inden for samme fil. Hverken public eller private Tilgængelig inden for samme pakke. abstract Indeholder abstrakte metoder. final Må ikke have underklasser. 32

Klassemedlemmer Medlemmer af en klasse udgøres af felter (attributter, klasse- og instansvariable) metoder indre

Klassemedlemmer Medlemmer af en klasse udgøres af felter (attributter, klasse- og instansvariable) metoder indre klasser Deres rækkefølge er ligegyldig. 33

Felt- og metodeerklæringer [Field. Modifiers] Type Field. Name 1 [= Initializer 1], Field. Name

Felt- og metodeerklæringer [Field. Modifiers] Type Field. Name 1 [= Initializer 1], Field. Name 2 [= Initializer 2]. . . ; [Method. Modifiers] Return. Type Method. Name ([Parameter. List]) { Statements } 34

Felt- og metodemodifikatorer public Tilgængelig overalt. private Kun tilgængelig i klassen selv. protected Kun

Felt- og metodemodifikatorer public Tilgængelig overalt. private Kun tilgængelig i klassen selv. protected Kun tilgængelig i klassen selv, dens underklasser og klasser i samme pakke. Hverken public, private eller protected Kun tilgængelig i samme pakke. Et final felt har en konstant værdi. En final metode kan ikke overskrives. final static Et static felt deles af alle instanser af klassen En static metode må kun tilgå klassens statiske felter. 35

Øvrige metodemodifikatorer • Kun for metoder: abstract Implementeringen er udsat (og overladt til underklasser)

Øvrige metodemodifikatorer • Kun for metoder: abstract Implementeringen er udsat (og overladt til underklasser) synchronized Udføres atomisk i et flertrådet program native Er implementeret i C eller C++ 36

Øvrige feltmodifikatorer • Kun for felter: volatile Må modificeres af usynkroniserede metoder. transient Er

Øvrige feltmodifikatorer • Kun for felter: volatile Må modificeres af usynkroniserede metoder. transient Er ikke del af klasseinstansernes persistente tilstand. 37

Metodeerklæringer [Method. Modifiers] Return. Type Name ([Parameter. List]) { Statements } Returtypen er påkrævet.

Metodeerklæringer [Method. Modifiers] Return. Type Name ([Parameter. List]) { Statements } Returtypen er påkrævet. Hvis metoden ikke returnerer en værdi, benyttes void. Parameterlisten kan være tom. Hver parameter erklæres på formen [final] Type Parameter. Name 38

Skabelse og initialisering af objekter Initialisering af felter: Eksplicit: double x = 3. 14;

Skabelse og initialisering af objekter Initialisering af felter: Eksplicit: double x = 3. 14; Felter, der ikke initialiseres eksplicit, initialiseres med deres standardstartværdi. Med konstruktører: En konstruktør er en metode uden returværdi og med samme navn som klassen. Med en initialiseringsblok: En sætningsblok, der er placeret i klassens definition, uden for enhver metode og konstruktør. 39

Konstruktører public class Point { double x, y; public Point() { // no-arg contructor

Konstruktører public class Point { double x, y; public Point() { // no-arg contructor x = 0. 0; y = 0. 0; } } public Point(double x 0, double y 0) { x = x 0; y = y 0; } Konstruktører kan overlæsses: En klasse kan have mange konstruktører, blot de har et forskelligt antal parametre, eller deres parametertyper er forskellige. 40

Skabelse af Point-objekter Point p 1 = new Point(); Point p 2 = new

Skabelse af Point-objekter Point p 1 = new Point(); Point p 2 = new Point(13. 0, 17. 0); En klasse uden brugerdefineret konstruktør forsynes med en konstruktør, der er uden parametre og ikke foretager sig noget. 41

Initialiseringsblok public class Point { public double x, y; public Point() { x =

Initialiseringsblok public class Point { public double x, y; public Point() { x = 0. 0; y = 0. 0; } public Point(double x 0, double y 0) { x = x 0; y = y 0; } { } } System. out. println("new point"); En initialiseringsblok udføres før enhver konstruktør. 42

Statisk initialiseringsblok public class Point { public double x, y; static int points; public

Statisk initialiseringsblok public class Point { public double x, y; static int points; public Point() { x = 0. 0; y = 0. 0; } public Point(double x 0, double y 0) { x = x 0; y = y 0; } } static { points++; } En statisk initaliseringsblok kan kun referere til klassens statiske medlemmer. 43

Tilgang til medlemmer Tilgang til felter og metoder sker med priknotation: object. Reference. field

Tilgang til medlemmer Tilgang til felter og metoder sker med priknotation: object. Reference. field object. Reference. method(Arguments) Point p = new Point(); double x 1 = p. x; p. move(10. 0, 20. 0); 44

Implementering af metoder Hvis returtypen er void, må en eventuel return-sætning i metoden ikke

Implementering af metoder Hvis returtypen er void, må en eventuel return-sætning i metoden ikke returnere en værdi. Hvis returtypen ikke er void, må enhver vej i metoden afsluttes med en return-sætning med et udtryk, der matcher metodens returtype. Lokale variable i en metode initialiseres ikke til deres standardstartværdi. Lokale variable skal initialiseres eksplicit, inden de bruges. 45

Parameteroverførsel Alle parametre i Java overføres by value. Eventuelle ændringer af en parametervariabel udføres

Parameteroverførsel Alle parametre i Java overføres by value. Eventuelle ændringer af en parametervariabel udføres på en kopi af den aktuelle parameter. void inc(int i) { i++; } int i = 0; inc(i); // i er stadig 0 46

Statiske felter og metoder Som standard er felter i en klasse instansfelter. Hvert objekt

Statiske felter og metoder Som standard er felter i en klasse instansfelter. Hvert objekt har sin egen kopi af feltet. Et felt, der er erklærer static, deles af af alle instanser af klassen. Der en kun én kopi af et statisk felt. En metode, der er erklærer static, kan kun anvende klassens statiske felter og statiske metoder. Ikke-statiske metoder kaldes instansmetoder. Statiske metoder kaldes klassemetoder. 47

Tilgang til statiske felter og metoder object. Reference. static. Field object. Reference. static. Method(Parameters)

Tilgang til statiske felter og metoder object. Reference. static. Field object. Reference. static. Method(Parameters) eller bedre Class. Name. static. Field Class. Name. static. Method(Parameters) Math. PI Math. sqrt(2. 0); 48

Konstanter erklæres som final static. public class Font { public final static int PLAIN

Konstanter erklæres som final static. public class Font { public final static int PLAIN = 0; public final static int BOLD = 1; public final static int ITALIC = 2; //. . . } 49

Konstante referencer public class Color { public final static Color black = new Color(0,

Konstante referencer public class Color { public final static Color black = new Color(0, 0, 0); public final static Color blue = new Color(0, 0, 255); public final static Color gray = new Color(128, 128); public final static Color white = new Color(255, 255); public final static Color yellow = new Color(255, 0); //. . . } 50

Objektreferencen this Nøgleordet this kan bruges i en instansmetode til at referere til det

Objektreferencen this Nøgleordet this kan bruges i en instansmetode til at referere til det objekt, som er modtager af kaldet. Eksempel på anvendelse: public class Point { double x, y; public Point(double x, double y) { this. x = x; this. y = y; } } Tillader tilgang til “skyggede” felter. 51

Overførsel af this som parameter class Line { Point p 1, p 2; public

Overførsel af this som parameter class Line { Point p 1, p 2; public Line(Point p 1, Point p 2) { this. p 1 = p 1; this. p 2 = p 2; } } public class Point { y; public Line connect(Point other. Point) { return new Line(this, other. Point); } double x, } 52

Håndtering af aliaser public class Point { public Line connect(Point other. Point) { if

Håndtering af aliaser public class Point { public Line connect(Point other. Point) { if (this == other. Point) return null; return new Line(this, other. Point); } } 53

Undtagelser En undtagelse (exception) repræsenterer en uventet begivenhed, f. eks. en fejlsituation. I mange

Undtagelser En undtagelse (exception) repræsenterer en uventet begivenhed, f. eks. en fejlsituation. I mange situationer er det hverken muligt eller hensigtsmæssigt at håndtere en fejl i umiddelbar nærhed af det sted, hvor fejlen opstod. Gennem sit udtagelsesbegreb tillader Java adskillelse af fejldetektering og fejlhåndtering. 54

Kast af undtagelser Når en undtagelse forekommer, kastes en udtagelse. En undtagelser kan stamme

Kast af undtagelser Når en undtagelse forekommer, kastes en udtagelse. En undtagelser kan stamme fra to kilder: (1) Køretidssystemet (JVM), ved udførelse af en ulovlig operation (bl. a. null. Pointer. Exception, array. Out. Of. Bound. Exception) (2) Java-programmet (inklusiv Javas klassebibliotek), såfremt der kastes en eksplicit undtagelse. 55

throw-sætningen En undtagelse repræsenteres som et objekt og kastes med en throwsætning: throw exception;

throw-sætningen En undtagelse repræsenteres som et objekt og kastes med en throwsætning: throw exception; hvor exception er en instans af en klasse, der er en underklasse af Throwable. 56

Hierarkiet af undtagelser Throwable Exception Error Runtime. Exception My. Exception Undtagelser af typen Error

Hierarkiet af undtagelser Throwable Exception Error Runtime. Exception My. Exception Undtagelser af typen Error og Runtime. Exception er ucheckede. Alle øvrige er checkede. 57

Checkede undtagelser Enhver metode skal specificere, hvilke checkede undtagelser, den kaste. [Method. Modifiers] Return.

Checkede undtagelser Enhver metode skal specificere, hvilke checkede undtagelser, den kaste. [Method. Modifiers] Return. Type Method. Name ([Parameter. List]) throws Exception 1, Exception 2. . . { Statements } void method() throws My. Exception {. . . throw new My. Exception(); . . . } 58

try-catch-sætningen Sætninger, der kan kaste en undtagelse, kan placeres i en catch-sætning: try- try

try-catch-sætningen Sætninger, der kan kaste en undtagelse, kan placeres i en catch-sætning: try- try { //. . . throw new My. Exception(); //. . . } catch (My. Exception e) { // handle the exception e } Hvis method kan kaste en undtagelse af typen My. Exception: try { method(); } catch (My. Exception e) { // handle the exception e } 59

Fangst af undtagelser try { // statements that may throw exceptions } catch (Exception

Fangst af undtagelser try { // statements that may throw exceptions } catch (Exception 1 e 1) { // exception handler 1 } catch (Exception 2 e 2) { // exception handler 2 } finally { // finish up } Hvis en undtagelse kastes, søges sekventielt i den nærmest omkringliggende trycatch-sætning. Hvis der findes en parametertype, der matcher undtagelses-typen, udføres den tilsvarende catch-blok. Finally-blokken er optionel. Den udføres altid som det sidste, inden try-catch- sætningen afsluttes. 60

Behandling af undtagelser Der er principielt 3 måder, hvorpå en undtagelse kan behandles: (1)

Behandling af undtagelser Der er principielt 3 måder, hvorpå en undtagelse kan behandles: (1) Den kan ignoreres (2) En ny undtagelse kan kastes (3) Programmet kan stoppes try { // statements that may throw exceptions } catch (Exception 1 e 1) { // ignore } catch (Exception 2 e 2) { throw new My. Exception(); } catch (Exception 3 e 3) { System. exit(0); } 61

Tekststrenge En streng er en sekvens af tegn. I Java repræsenteres strenge som objekter

Tekststrenge En streng er en sekvens af tegn. I Java repræsenteres strenge som objekter fra en af følgende to klasser: String: konstante (immutable) strenge String. Buffer: ikke-konstante (mutable) strenge 62

Klassen String To særlige egenskaber: (1) Objekter kan skabes ved hjælp af strengkonstanter String

Klassen String To særlige egenskaber: (1) Objekter kan skabes ved hjælp af strengkonstanter String s = "Dette er en streng"; (2) Operatorerne + og += kan bruges til at sammensætte strenge String s 1 = "Dette er "; String s 2 = "en streng"; String s = s 1 + s 2; De enkelte tegn i en streng er indekseret fra 0 til n-1, hvor n er længden af strengen. 63

Operationer på strenge s. length() s. char. At(i) s. index. Of(c, i) s 1.

Operationer på strenge s. length() s. char. At(i) s. index. Of(c, i) s 1. index. Of(s 2, i) s. substring(i, j) s. to. Lower. Case() s. to. Upper. Case() s. trim() s 1. ends. With(s 2) s 1. starts. With(s 2) s 1. equals. Ignore. Case(s 2) s 1. compare. To(s 2) 64

to. String-metoden tillader en klasse at definere en String-repræsentation af sine objekter. public class

to. String-metoden tillader en klasse at definere en String-repræsentation af sine objekter. public class Point { double x, y; public String return "(" + x + ", " + y + ")"; to. String() { } } Hvis str en String-objekt, og obj er et objekt, vil udtrykket obj fortolket som str + blive str + obj. to. String() 65

Indlæsning og udskrivning af strenge Standardstrømme er erklæret i klassen System: public class System

Indlæsning og udskrivning af strenge Standardstrømme er erklæret i klassen System: public class System { public static final Input. Stream in; public static final Print. Stream out; public static final Print. Stream err; } 66

Kopiering fra System. in til System. out import java. io. *; public class Copy

Kopiering fra System. in til System. out import java. io. *; public class Copy { public static void main(String[] args) { try { Buffered. Reader in = new Buffered. Reader( new Input. Stream. Reader( System. in)); String line; while ((line = in. read. Line()) != null) System. out. println(line); } catch (IOException e) {} } } 67

Kopiering af en tekstfil import java. io. *; public class Copy. Text. File {

Kopiering af en tekstfil import java. io. *; public class Copy. Text. File { public static void main(String[] args) { if (args. length >= 2) { try { Buffered. Reader in = new Buffered. Reader( new File. Reader(args[0])); Print. Writer out = new Print. Writer( new Buffered. Writer( new File. Writer(args[1]))); String line; while ((line = in. read. Line()) != null) out. println(line); out. close(); } catch (IOException e) {} } 68

Klassen String. Buffer public final class String. Buffer implements Serializable { public String. Buffer();

Klassen String. Buffer public final class String. Buffer implements Serializable { public String. Buffer(); public String. Buffer(int length); public String. Buffer(String str); public String. Buffer append(. . . ); public char. At(int i); public String. Buffer delete(int start, int end); public delete. Char. At(int i); public String. Buffer set. Char. At(int i, char c); public String. Buffer insert(int offset, . . . ); public String. Buffer replace(int start, int end, String str); public int length(); public String sub. String(int start, int end); public String. Buffer reverse(); public String to. String(); //. . . } 69

Opdeling af en tekst i dens grundbestandele (tokens) Klassen String. Tokenizer: package java. util;

Opdeling af en tekst i dens grundbestandele (tokens) Klassen String. Tokenizer: package java. util; public class String. Tokenizer { public String. Tokenizer(String str); public String. Tokenizer(String str, String delim, boolean return. Delims); public boolean has. More. Tokens(); public String next. Token(); public int count. Tokens(); } 70

Opdeling af en indlæst tekst i ord import java. io. *; import java. util.

Opdeling af en indlæst tekst i ord import java. io. *; import java. util. *; public class Words { public static void main(String[] args) { Buffered. Reader in = new Buffered. Reader( new Input. Stream. Reader(System. in)); try { String line; String delim = " tn. , : ; ? !-/()[]"'"; while((line = in. read. Line()) != null) { String. Tokenizer st = new String. Tokenizer(line, delim); while(st. has. More. Tokens()) System. out. println(st. next. Token()); } } catch(IOException e) {} } } 71

Endimensionale arrays Erklæring Type[] Identifier Eks. int[] a; Type Identifier[] Eks. int a[]; eller

Endimensionale arrays Erklæring Type[] Identifier Eks. int[] a; Type Identifier[] Eks. int a[]; eller Skabelse med new: new. Type[n] Eks. int[] a = new int[10]; Point[] p = new Point[20]; eller ved initialisering (initializer): { v 0, v 1, . . . , vn-1 } Eks. int[] a = { 7, 9, 13 }; 72

Dynamisk udvidelse af array String[] resize(String[] arr, int new. Size) { String[] original =

Dynamisk udvidelse af array String[] resize(String[] arr, int new. Size) { String[] original = arr; arr = new String[new. Size]; int num. To. Copy = Math. min(original. length, new. Size) for (int i = 0; i < num. To. Copy; i++) arr[i] = original[i]; return arr; } original arr 73

Flerdimensionale arrays (array af arrays) Erklæring Type[]. . . [] Identifier Eks. Type Identifier[].

Flerdimensionale arrays (array af arrays) Erklæring Type[]. . . [] Identifier Eks. Type Identifier[]. . . [] Eks. int[][] a eller int a[][] Skabelse med new: new. Type[n 1][n 2]. . . [nk] Eks. int[][] a = new int[2][3]; Point[][] p = new Point[4][5]; Eks. int[][] a = {{3, 1, 7}, {6, 3, 2}}; eller ved intialisering: { I 0, I 1, . . . , Ik-1 } 74

Matematiske konstanter og funktioner Tilgængelige som statiske felter og metoder i klassen Math: E,

Matematiske konstanter og funktioner Tilgængelige som statiske felter og metoder i klassen Math: E, PI sin, cos, tan, asin, acos, atan 2 to. Degrees, to. Radians exp, pow, log sqrt rint, ceil, floor, round random abs min, max Flere af metoderne er overlæssede. 75

Pakker En pakke er en samling af relaterede klasser, grænseflader eller andre pakker. Pakker

Pakker En pakke er en samling af relaterede klasser, grænseflader eller andre pakker. Pakker bruges til at organisere store programmer, så de bliver håndterbare. Alle klasser i samme fil tilhører den samme pakke. Pakkens navn kan angives således i starten af filen: package. Name; 76

Eksempel på konstruktion af en pakke Filen Point. java: package geometry; public class Point

Eksempel på konstruktion af en pakke Filen Point. java: package geometry; public class Point { public double x, y; //. . . } Filen Line. java: package geometry; public class Line { Point p 1, p 2; } 77

Eksempel på anvendelse af pakken (1) Anvendelse ved fuldt kvalificeret navn: import geometry; geometry.

Eksempel på anvendelse af pakken (1) Anvendelse ved fuldt kvalificeret navn: import geometry; geometry. Point p = new geometry. Point(3, 4); (2) Anvendelse ved importering af en specifik klasse: import geometry. Point; Point p = new Point(3, 4); (3) Anvendelse ved importering af alle pakkens klasser: import geometry. *; Point p 1 = new Point(3, 4), p 2 = new Point(6, 9); new Line(p 1, p 2); Line l = 78

Organisering af Javas klassebiblioteker java. applet java. awt java. beans java. io java. lang

Organisering af Javas klassebiblioteker java. applet java. awt java. beans java. io java. lang java. math java. net java. rmi java. security java. sql java. text java. util java. vecmath javax. activation javax. mail javax. media javax. naming javax. servlet javax. swing org. omg. CORBA Mere end 1900 klasser 79

Ugeseddel 1 18. september - 25. september • Læs kapitel 4 • Løs følgende

Ugeseddel 1 18. september - 25. september • Læs kapitel 4 • Løs følgende opgaver fra lærebogen Opgave 1: Opgave 2: Opgave 3: Opgave 4: Opgave 5: 1. 13 (1 point) 1. 22 (2 point) 2. 13 (2 point) 3. 13 (1 point) 3. 15 (3 point, ikke obligatorisk) Afleveringsfrist: tirsdag den 9. oktober. 80