Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avPer Hermansson
1
Chapter 11: Exception Handling F Exceptions and Exception Types F Claiming Exceptions F Throwing Exceptions F Catching Exceptions F Creating Your Own Exception Classes The finally Clause F Cautions When Using Exceptions
2
Undantag F Under programkörning uppstår det ibland fel, sk exekveringsfel. När ett exekveringsfel inträffar så genereras, kastas, ett undantag, en s.k. exception. Man kan även själv signalera att något olämpligt inträffat genom att kasta ett undantag. F När ett undantag kastas så avbryts exekveringen av programmet. Man kan i detta läge: Låta bli att ta hand om det undantag som genererats. I detta fall avbryts programkörningen (tråden i vilken undantaget inträffat) och systemet skriver ut dumpning av stacken. Ta hand om undantaget, dvs. fånga undantaget. I detta fall så vidtar man lämpliga åtgärder och låter därefter programmet fortsätta exekvera.
3
Undantagklasser F Throwable F ErrorException F Diverse kontrollerade RuntimeException, undantagsklasser okontrollerade undantagsklasser F Om man definierar egna undantag så ska de använda Exception som basklass: F public class RitException extends Exception { public RitException() {} public RitException(String meddelande) { super(meddelande); } } F Klassen RitException kommer att tillhöra de kontrollerade undantagen.
4
Exceptions and Exception Types
5
Att kasta undantag F Man kan kasta undantag vid behov. Man gör detta med throw-satsen: F if(label==null) throw new NullPointerException(”label är null”); F if(x getSize().width || y getSize().height) F throw new RitException(”Utanför fönstret”); F En metod som kastar ett undantag måste deklarera detta i en undantagslista om det är ett kontrollerat undantag. F public void ritaFigur(int x, int y) throws RitException { F if(x getSize().width || y getSize().height) F throw new RitException(”Utanför fönstret”); F else { F // figur ritas F }
6
Kontrollerade/okontrollerade undantag F De undantag som är kontrollerade måste hanteras i programmet. Man kan göra det på två sätt: Fånga undantaget i en try-sats Deklarera att metoden där undantaget äger rum genererar undantaget. Man gör det i en händelselista. public void enMetod() throws U1,U2 {…} Exempel på kontrollerade undantag är: ClassNotFoundException och IOException F De undantag som är okontrollerade kan hanteras på två sätt: Man fångar undantaget i en try-sats Man gör ingenting. I detta fall avslutas programmet. Exempel på okontrollerade undantag är: ArithmeticException, IndexOutOfBoundsException och NullPointerException
7
Att fånga undantag F Man fångar undantag med en try-sats. Den är på formen F try { // Satser som man vill bevaka } catch(Exception1 e1) { // Felhanterare. Kod som tar hand om undantag av typen Exception1 } catch(Exception2 e2) { // Felhanterare. Kod som tar hand om undantag av typen Exception2 } : finally { // Kod som alltid utförs. finally-delen behöver ej vara med } F Efter catch anger man en Exception-klass. Om undantaget som kastats matchar angiven klass (undantaget samma klass eller subklass) så utförs koden i blocket som tillhör catch-delen. F Högst ett catch-block utförs. Dock utförs alltid ett finally-block. Även om inget undantag finns att fånga.
8
Meddelande om Exception Undantag1Evig F public class Undantag1 { F public Undantag1() { F int täljare = 100,nämnare,kvot; F String strNämnare; F System.out.print("Ange nämnare: "); F strNämnare = Input.readLine(); F nämnare = Integer.parseInt(strNämnare); F kvot = täljare/nämnare; F System.out.println(täljare+"/"+nämnare+" = "+kvot); F } F F public static void main(String[] args) { F new Evig(); F new Undantag1(); F }
9
Try-sats, körning utan fel Undantag2 F public class Undantag2 { F public Undantag2() { F int täljare = 100,nämnare=100,kvot=100; F String strNämnare; F System.out.print("Ange nämnare: "); F strNämnare = Input.readLine(); F try { F nämnare = Integer.parseInt(strNämnare); F kvot = täljare/nämnare; F } F catch(NumberFormatException e1) { F System.out.println(e1); F } F catch(ArithmeticException e2) { // Avmarkera denna F System.out.println(e2); F } F finally { F System.out.println("Hit kommer man alltid"); F } F System.out.println(täljare+"/"+nämnare+" = "+kvot); F } public static void main(String[] args) { F new Evig(); F new Undantag2(); F }
10
Example Catching Exceptions Objective: Write a program to test the new Rational class. TestRationalException Run
11
Undantag exempel F Ex7 Ex7 F Ex5 Ex5 F Ex6 Ex6 F Ex3 Ex3 F Ex4 Ex4 F Ex1 Ex1 F Ex2 Ex2
12
Creating Your Own Exception Classes Using Exceptions in Applets F Objective: An applet for account transactions that displays account ID and balance and performs deposits and withdrawals. For each transaction, a message indicates success or failure of the transaction, and reports any reason for failure. AccountApplet Run Applet Viewer InsufficientFundExceptionNegativeAmountException Account
13
Chapter 12: Multithreading The Thread class The Runnable Interface F Thread States F Thread Priority F Thread Groups F Synchronization
14
Threads Concept Multiple threads on multiple CPUs Multiple threads sharing a single CPU
15
Thread States
16
Trådar F I ett program vill man ofta låta flera aktiviteter pågå parallellt. Detta löser man med hjälp av trådar. F Ett par fall som lämpar sig för att utföras i separat tråd är: animeringar eller andra processorkrävande / tidskrävande processer. För att undvika att låsa programmet låter man dessa utföras i en separat tråd. Om man låser upp händelsehanteringen blir programmen riktigt trista. aktiviteter som går långsamt varvid processorn inte utnyttjas fullt ut, t.ex. inläsning av bilder över nätet eller inmatning från användare.
17
Trådar F I java skapar man nya trådar med klassen Thread. Man kan använda ett av följande sätt: skriva en subklass till klassen Thread. Exekvering av tråden sker med anrop till metoden start() och metoden run() ska överlagras. implementera gränssnittet Runnable. Man har en instansvariabel av typen Thread och man skaffar ett Thread-objekt med Thread thread = new Thread(this); Tråden startas med anrop till start() och metoden run() ska finnas i klassen. Denna metod går dessutom utmärkt att kombinera med grafiska komponenter vilket gör den till den vanliga. public interface Runnable { public abstract void run(); }
18
Thread Constructors and Methods F Thread() Creates a runnable object. F void run() Invoked by the Java runtime system to execute the thread. You must override this method and provide the code you want your thread to execute. F void start() Starts the thread, which causes the run() method to be invoked. Called by the runnable object in the client class.
19
Thread Constructors and Methods, cont. F void stop() Stops the thread. (deprecated in JDK 1.2) void suspend() (deprecated in JDK 1.2) Suspends the thread. Use the resume() method to resume. void resume() (deprecated in JDK 1.2) Resumes the thread suspended with the suspend() method. F static void sleep(long millis) throws InterruptedException Puts the runnable object to sleep for a specified time in milliseconds.
20
Thread Constructors and Methods, cont. F void interrupt() Interrupts the running thread. F static boolean interrupted() Tests to see whether the current thread has been interrupted. F boolean isAlive() Tests to see whether the thread is currently running. F void setPriority(int p) Sets priority p for this thread.
21
Tråd - arv av Thread När man skriver en subklass till Thread så behöver man endast överlagra metoden public void run() Koden i run utgör själva tråden. Genom att anropa start-metoden startas exekveringen i run. F public class Counter1 extends Thread { F private int räknare=0; F public Counter1() { F start(); F } F public void run() { F while(true) { F System.out.println(räknare); F try { F Thread.sleep(1000);// pausa en sekund F } F catch(InterruptedException e) {} F räknare++; F } Counter1TestCounter1
22
Example Using the Thread Class F Objective: Create and run three threads: –The first thread prints the letter a 100 times. –The second thread prints the letter b 100 times. –The third thread prints the integers 1 through 100. TestThreads Run
23
Tråd - gränssnittet Runnable F När man implementerar gränssnittet Runnable så behöver man en instansvariabel av typen Thread. Man skapar en instans av Thread med konstruktorn F public Thread(Runnable klassMedRunMetod) Tråden startas med anrop till trådens start-metod. Vidare måste man skriva metoden public void run() Det är koden i run som exekveras vid anrop av start(). F public class Counter2 implements Runnable { F private int räknare=0; F private Thread aktivitet = new Thread(this); F F public Counter2() { F aktivitet.start(); F } F public void run() { F while(true) { F : F } Counter2
24
Implementing the Runnable Interface Sketch class MyApplet extends Applet implements Runnable { private Thread timer = null; public void init() { timer = new Thread(this); timer.start(); }... public void run() {... } }
25
Implementing the Runnable Interface in an Applet F Objective: Simulate a running clock by using a separate thread to repaint the clock. Run Applet Viewer
26
Thread Priority Each thread is assigned a default priority of Thread.NORM_PRIORITY. You can reset the priority using setPriority(int priority). Some constants for priorities include Thread.MIN_PRIORITY Thread.MAX_PRIORITY Thread.NORM_PRIORITY
27
Tråd i grafiskt program F Genom att implementera gränssnittet Runnable använda inre klass och ärva Thread kan man använda trådar när man jobbar med grafiska applikationer, applets eller grafiska komponenter (eller vid andra former av arv) F public class BlinkButton1 extends Button { F Aktivitet aktivitet = new Aktivitet(); F private class Aktivitet extends Thread { F // implementering av run-metod F } F public class BlinkButton2 extends Button implements Runnable { F private Thread aktivitet = new Thread(this); F // implementering av run-metod F } BlinkButton1BlinkButton2TestBBRun
28
Counter i grafiskt program F Man kan låta räknaren visa sig i ett grafiskt program. Om det grafiska programmet implementerar gränssnittet Skrivbar: F interface Skrivbar { public void skriv(int räknare); } F och implementerar metoden skriv på så sätt att värdet i räknare visas så är det klart. u public void skriv(int tal) { räknare.setText(String.valueOf(tal)); } F class Counter4 extends Thread { F private int räknare=0; F private Skrivbar obj; F public Counter4(Skrivbar where) { F obj = where; F start(); F } F public void run() { F while(true) { F obj.skriv(räknare); F : F } SkrivbarCounter4GrafiskThreadRun
29
Controlling a Group of Clocks F Objective: Using threads to control a group of clocks. Run
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.