Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Tabeller av objekter Klassen ArrayList
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Samarbeid mellom objekter
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
Oblig4 - forklaringer Arne og Ole Christian.
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 11 Applet’s Hva karakteriserer applet’sside.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Objektorientert programmering
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
Høgskolen i Oslo Web-programmering Feilhåndtering i PHP.
Java 11 Programmering med og uten objekter: hva er forskjellen?
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Programmering i Java tilpasset undervisning våren 2009 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Kapittel 4 Skriving av klasser. 4.1 Anatomien til ein klasse Så langt har vi brukt ferdige klasser frå klassebiblioteket i Java Vi lagar objekt og brukar.
Kapittel 10 Exceptions Handtering av exceptions Ein exception er eit objekt som representerer ein feil eller eit unntak Exceptions blir kasta av.
Variabler, datatyper og uttrykk
Utskrift av presentasjonen:

Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 11 Unntakshåndtering Unntak, genereltside 2-4 Unntaksobjektside 5 Programflyt når unntaksobjekt blir lagetside 6-7 Tre typer unntaksobjektside 8 Unntakshåndtering for nybegynnereside 9 Unntakssituasjoner som ikke bør inntreffe Subklasser til RunTimeExceptionside 10 Unntakssituasjoner som ikke tillates av kompilatorenside 11 try-setningenside 12 Eksemplerside 13 throws og throwside 14 Å lage egne unntaksobjekterside 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 Kapittel 11, side 2 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): String tekst = JOptionPane.showInputDialog(ledetekst); while (tekst == null || tekst.trim().equals("")) { JOptionPane.showMessageDialog(null, "Du må oppgi data."); tekst = JOptionPane.showInputDialog(ledetekst); }

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 11, side 3 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);

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 11, side 4 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

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 11, side 5 Unntaksobjekt Et unntaksobjekt er et objekt som inneholder informasjon om feilen. Dersom noe går galt inne i en metode, kastes et unntaksobjekt 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

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

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

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

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 11, side 9 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 unntaket viser seg ved at programmet stopper under kjøring, bør du prøve å endre programmet slik at det ikke inntreffer.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 11, side 10 Unntakssituasjoner som ikke bør inntreffe i et program (subklasser til RuntimeException, gruppe 1 foran) 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())….

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 11, side 11 Unntakssituasjoner som ikke tillates av kompilatoren Kompilatoren sjekker at vi gjør noe med disse, de kalles ”sjekkede unntak”. Subklasser til Exception, men ikke til RuntimeException (gruppe 3 på figuren foran) Eksempel (fra programliste 12.1): public static void main(String[] args) throws Exception {... filhåndtering... } Hvis vi ikke tar med throws Exception får vi kompileringsfeil: C:\Temp\HandterNavneregister.java:13: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown FileReader leseforbTilFil = new FileReader(filnavn); I stedet for å kaste unntaket videre, kan vi fange det: public static void main(String[] args) { try {... filhåndtering... } catch (Exception e) { System.out.println(“Programutførelsen er avbrutt: “ + e); // toString() underforstått } 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.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 11, side 12 try-setningen try { setninger } catch (parameter) { setninger } catch (parameter) { setninger } finally { setninger } // utføres alltid Ingen unntak kastes utfør finally-blokken utfør setningene etter try-setningen Unntak kastes Hvis catch-blokk passer, utfør den, utfør finally-blokk utfør setningene etter try-setningen ellers utfør finally-blokk hopp ut av metoden med unntaksobjektet

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 11, side 13 Eksempler // Programliste 12.2 public static void main(String[] args) { String filnavn = "tallfil.txt"; try {... opprett forbindelse til datafilen, FileNotFoundException kan f.eks. bli kastet... int sum = 0; try {... les tekst fra filen, IOException kan bli kastet omform til tall, og oppdater sum, NumberFormatException kan bli kastet... } catch (IOException e) { System.out.println("IO-Feil ved lesing fra fil: " + filnavn); } catch (NumberFormatException e) { System.out.println("Feil ved omforming fra tekst til tall."); }... lukk filen, IOException kan bli kastet skriv ut sum... } catch (FileNotFoundException e) { System.out.println("Fil ikke funnet: " + filnavn); } catch (IOException e) { // andre IO-feil enn FileNotFoundException fanges her System.out.println("IO-Feil ved åpning/lukking av fil: " + filnavn); } // Programliste 20.2 public ArrayList finnAlle() throws SQLException {... diverse initieringer... try {... søk i databasen, unntaksobjekt kan bli kastet ut av metoden... } finally {... denne blokken utføres uansett, også dersom unntaksobjekt kastes database-ressurser frigjøres... }

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 11, side 14 throws og throw throws-spesifikasjonen i et konstruktør- eller metodehode throw-setningen public static void main(String[] args) throws Exception { // kaster et unntaksobjekt videre String filnavn = "tallfil.txt"; try {... knytt forbindelse til datafilen, FileNotFoundException kan f.eks. bli kastet les tekst fra filen, IOException kan bli kastet... } catch (FileNotFoundException e) { System.out.println("Fil ikke funnet: " + filnavn); } public char charAt(int index) { if ((index = count)) { throw new StringIndexOutOfBoundsException(index); // lager et nytt unntaksobjekt } return value[index + offset]; }

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 11, side 15 Å lage egne unntaksobjekter - Vis programliste 11.1 side Kan også lage egen unntaksklasse class UgyldigAnsattdataException extends Exception { public UgyldigAnsattdataException() { super("Ugyldige ansattdata"); // kaller konstruktøren i superklassen } public UgyldigAnsattdataException(String melding) { super(melding); // kaller konstruktøren i superklassen } Endrer i konstruktøren public Ansatt(int startNr, String startNavn, double startLønn) throws UgyldigAnsattdataException { if (startLønn < minLønn) { throw new UgyldigAnsattdataException("Lønn: " + startLønn + "\nLønnen skal være minst " + pengeformat.format(minLønn)); } else if (startNr øvreGrenseNr) { throw new UgyldigAnsattdataException("Nummer: " + startNr + "\nAnsatt-nummeret må ligge i intervallet [" + nedreGrenseNr + ", " + øvreGrenseNr + "]."); } else …. Og i klientprogrammet try {... } catch (UgyldigAnsattdataException e) {...