Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Programmering i Java versjon 2001-05-16 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.

Liknende presentasjoner


Presentasjon om: "Programmering i Java versjon 2001-05-16 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik."— Utskrift av presentasjonen:

1 Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8 Java API’et og unntakshåndtering Å bruke Java API’etside 2 Å bruke on-line dokumentasjonenside 3-6 Å tilpasse et program til lokale forholdside 7 Utskrift av desimaltallside 8-9 Generelt om unntakside Exceptions / unntakside 13-20

2 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 2 Å bruke Java API’et Eksempler på klasser som følger med SDK: –java.lang.String: for å håndtere tekster –java.swing.JApplet: for å lage appleter –java.awt.Component, java.awt.Graphis, java.awt.Color, java.awt.Font: for å lage grafikk Det finnes mange flere klasser! En viktig del av det å programmere i Java består i å kunne bruke disse klassene. Du må venne deg til å bruke de ferdige klassene uten å skjønne absolutt alt som ligger under. Du må venne deg til å bruke den dokumentasjonen som beskriver disse klassene. Bare noen svært få klasser, og noen få metoder i hver av disse klassene er beskrevet i denne boka. Det er bedre å bruke on-line-dokumentasjonen!

3 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 3 Dokumentasjonen av SDK-klassene Dokumentasjonen lastes ned fra Sun sine sider. Installeres i katalogen docs under jdk1.3. Dokumentasjonen består av en mengde html-filer som dere navigerer i ved hjelp av en nettleser. index-filen ser slik ut:

4 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 4 Et par klikk videre... oversikt over klassene oversikt over pakkene

5 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 5 Klassen String, begynnelsen... sammenhengen mellom klassen String og andre klasser her kan du enkelt skifte til en annen klasse indeks over alle offentlige metoder og variabler i alle klasser

6 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 6 Klassen String, fortsettelsen... Klassen String, enda mer...du må prøve selv!

7 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 7 Å tilpasse et program til lokale forhold Med formatering mener vi hvordan for eksempel et tall vises fram på skjermen eller på annen utskriftsenhet. Formatering berører ikke verdien i seg selv. Anta at variabelen tall inneholder verdien 35645,4. Tallverdien kan skrives ut (formateres) på flere måter: –35,645.4 –35 645,4 –35 645,40 –35645 Formatering av tall er en liten del av det vi kaller ”tilpasning til lokale forhold”. Andre tilpasninger er myntenhet og datoformat. I Windows setter vi dette i ”Regionale innstillinger”. I Java kan vi la programmet følge det miljøet programmet kjører i (dvs. regionale innstillinger), eller vi kan selv sette lokasjon (= språk og land). Klassen java.util.Locale hjelper oss med dette: Locale norsk = new Locale("no", "NO"); Locale.setDefault(norsk); Kun bestemte klasser tar hensyn til lokasjon. Eksempel på setning som ikke tar hensyn til lokasjon: System.out.println(tall);

8 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 8 Utskrift av desimaltall Vi bruker klassen java.text.DecimalFormat. Eksempel: DecimalFormat formatet = new DecimalFormat("###0.00"); String tekst = formatet.format(13.4); System.out.println(tekst); tekst = formatet.format( ); System.out.println(tekst); gir utskriften (merk desimalkomma!) 13, ,40 Formatet bygges opp av koder, én kode for hver posisjon: 0 null: Skriv alltid ett siffer på denne plassen. # skigard: Skriv ett siffer på denne plassen, men ikke dersom dette sifferet er en null i begynnelsen eller slutten av tallet.. punktum: Her skal desimalskillet være. Vis minst ett siffer til venstre for desimalskillet, og alltid akkurat to sifre til høyre for desimalskillet.

9 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 9 Å skrive ut tall i kolonner Eksempel: 8,50 85,00 850, , ,00 Det finnes ingen kode som setter inn en blank i stedet for en ledende null. Klassen mittBibliotek.MittTallformatUt kan brukes for å lage utskriften over: MittTallformatUt formatet = new MittTallformatUt(5, 2); double tall = 8.5; for (int i = 0; i < 4; i++) { System.out.println(formatet.format(tall)); tall *= 10; } antall posisjoner før komma, ledende nuller erstattes med blanke antall sifre etter komma

10 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 10 Unntak Et unntak er en tilstand som kan opptre under kjøring, men som er avvik fra det mest normale. Eksempler: –divisjon med null, å finne kvadratrota eller logaritmen til et negativt tall, eller andre matematiske “umuligheter” –å hente ut et tegn på en ugyldig posisjon i en streng. Eksempel: I strengen “Eksempel” er 0, 1, 2, 3,..,7 gyldige posisjoner, men posisjon 8 ikke er gyldig. –brukeren skriver ”yes” som svar når programmet forventer ”ja” eller ”nei” Så langt det er mulig, må vi lage programmene slik at denne typen unntak håndteres. Vi må unngå at brukeren får en melding på skjermen, og programmet stopper, eller at programmet gjør andre feil. Eksempel på kontroll av inndata (fra kap. 6): char operator; do { String valg = gui.lesTekst("Kalkulator", "Velg operator, skriv operatoren + - * / "); valg = valg.trim(); // fjerner blanke i begynnelsen og slutten av strengen operator = valg.charAt(0); // henter ut første tegn } while (operator != '+' && operator != '-' && operator != '*' && operator != '/');

11 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 11 Hva hvis et tjenerobjekt ikke klarer å utføre oppgaven sin? En klient sender en melding til et tjenerobjekt. Dersom ting går galt, skal vanligvis ikke tjeneren selv skrive ut en feilmelding, men i stedet sende en melding tilbake til klienten, eksempelvis –returnere en tallverdi som ikke er blant de som returneres ved normale forhold –returnere false dersom data ellers ikke skal returneres fra metoden På denne måten bestemmer klienten hva som skal skje videre. Eksempel, klassen Karakter til høyre. Klient: class Karakter { private int poeng; public Karakter(int startPoeng) { poeng = startPoeng; } public int finnKarakter() { // returnerer negativ // verdi hvis ugyldig poengsum if (poeng > 100) return -2; else if (poeng >= 96) return 1; else if (poeng >= 86) return 2; else if (poeng >= 71) return 3; else if (poeng >= 46) return 4; else if (poeng >= 0) return 5; else return -1; } Karakter kar1 = new Karakter(antPoeng); int karakter = kar1.finnKarakter(); if (karakter == -1) System.out.println("Negativ poengsum ikke tillatt"); else if (karakter == -2) System.out.println("Maks poengsum er 100"); else System.out.println(antPoeng + " poeng gir karakteren " + karakter);

12 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 12 Hvorfor er ikke metoden beskrevet foran god nok? Av og til kan ikke feilhåndteringsmetoden beskrevet foran brukes: –Hva hvis alle mulige tall er gyldige returverdier fra metoden finnKarakter()? Andre ganger er det svært tungvindt å håndtere feil ved hjelp av returverdier. Eksempel: Et program som leser data fra en fil. Feil kan inntreffe hver gang programmet skal ha kontakt med filen: opprett kontakt med filen if dette gikk bra les litt data fra filen while dette gikk bra og mere data les data fra filen (sjekk om det gikk bra etter hver eneste lesing) bryt forbindelsen med filen

13 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 13 Exceptions En exception er et objekt som inneholder informasjon om feilen. Dersom noe går galt inne i en metode, kastes et exception-objekt ut av metoden. Dette objektet kommer ikke via returverdien fra metoden. Klienten kan ta i mot dette objektet eller kaste det videre. Programskissen foran vil nå se slik ut: prøv opprett kontakt med filen (exception-objekt kan kastes) les litt data fra filen (exception-objekt kan kastes) while mere data les data fra filen (exception-objekt kan kastes) bryt forbindelsen med filen (exception-objekt kan kastes) fang eventuelle exception-objekt felles håndtering av feil prøv – kast – fang try – throw - catch

14 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 14 main() fanger et exception-objekt som er generert i hentData() public static void main() { try { …setninger som gjør noe… filobjekt.hentData(); …setninger som gjør noe... } catch (Exception e) {..gjør noe fornuftig, parameteren e er en referanse til objektet som inneholder informasjon om feilen... } public …. hentData() throws Exception { …setninger som gjør noe... hvis feil oppstått throw new Exception …setninger som gjør noe... } nytt objekt blir laget, det inneholder informasjon om feilen

15 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 15 metodeX() mottar et exception-objekt fra hentData(). metodeX() kaster dette videre til main(). public... metodeX() throws Exception { …setninger som gjør noe… filobjekt.hentData(); …setninger som gjør noe... } public …. hentData() throws Exception { …setninger som gjør noe... hvis feil oppstått throw new Exception …setninger som gjør noe... } nytt objekt blir laget, det inneholder informasjon om feilen public static void main() { try { …setninger som gjør noe… etObjekt.metodeX(); …setninger som gjør noe... } catch (Exception e) {..gjør noe fornuftig, parameteren e er en referanse til objektet som inneholder informasjon om feilen... }

16 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 16 Det finnes tre ulike typer exceptions (eller unntak, som vi kaller det på norsk…) ExceptionError RuntimeException 1. Disse unntakene må håndteres med try og catch, eller kastes ut av metoden 3. Bør skrive programmet slik at disse unngås 2. Interne feil, kan ikke gjøre noe med disse Object AritmeticExceptionNullPointerException... IOExceptionSQLException... VirtualMachineError... Throwable

17 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 17 Unntakshåndtering for nybegynnere Dersom kompilatoren sier at unntaket må fanges eller kastes videre, er det enklest å kaste det videre. Skriv throws Exception i metodehodet. Dersom det ikke går (for eksempel i metoden init() i en applet), omslutt blokken som inneholder den problematiske metoden med try og catch. Dersom unntaket viser seg ved at programmet stopper under kjøring, bør du prøve å endre programmet slik at det ikke inntreffer. Eksempler, se “Unntak type 3”. Online API-dokumentasjonen viser alle unntak som kan kastes av en metode.

18 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 18 Unntak type 1: Subklasser til Exception unntatt RuntimeException Disse unntakene må vi gjøre noe med, ellers får vi kompileringsfeil. Eksempel (fra side 29): public static void main(String[] args) throws Exception {...innlesing fra konsollet med mere... } Hvis vi ikke tar med throws Exception får vi kompileringsfeil: unreported exception java.io.IOException; must be caught or declared to be thrown: String tekst = fraTastaturet.readLine(); I stedet for å kaste unntaket videre, kan vi fange det: public static void main(String[] args) { try {...innlesing fra konsollet med mere... } catch (Exception e) { System.out.println("Programmet avbrutt på grunn av feil: " + e); } } Når fange (try-catch) et unntak, og når kaste det videre (throws)? –main() bør fange alle unntak for å unngå ”stygge” meldinger og programstopp. –Andre metoder fanger de unntakene som de kan behandle på en fornuftig måte. Øvrige unntak kastes videre.

19 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 19 Unntak type 2: Subklasser til Error Eksempel: Minnet blir fullt. Svært sjelden. Kan ikke gjøre noe annet enn å skrive om programmet i de situasjonene der disse unntakene inntreffer.

20 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 8, side 20 Unntak type 3: Subklasser til RuntimeException Vi må skrive programmene våre slik at unntak av denne typen ikke inntreffer. Kjente eksempler: ArithmeticException kastes dersom vi forsøker å dividere et heltall med null. –Test at nevneren ikke er null før divisjonen utføres. (if (nevner != 0)…) NullPointerException kastes dersom en referanse brukes før den er satt til å peke til et konkret objekt. –Pass på at alle referanser peker til objekt før de brukes. StringIndexOutOfBoundsException kastes av charAt() i klassen String dersom argumentet er ugyldig. –Test at argumentet har gyldig verdi før du sender meldingen charAt() til en streng. (if (pos >= 0 && pos < tekst.length())….


Laste ned ppt "Programmering i Java versjon 2001-05-16 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik."

Liknende presentasjoner


Annonser fra Google