Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-ca-cd:laboratoare:exceptii [2020/10/03 12:59]
amalia.palaghiu [Exerciţii]
poo-ca-cd:laboratoare:exceptii [2021/10/07 13:26] (current)
florin.mihalache [Resurse]
Line 1: Line 1:
-===== Excepții =====+===== Laboratorul 13: Excepții ===== 
 + 
 +**Video introductiv:​** [[https://​youtu.be/​WhoDX_wkkhM | link]]
  
 ==== Obiective ==== ==== Obiective ====
Line 86: Line 88:
   * [[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​util/​NoSuchElementException.html|NoSuchElementException]]:​ este aruncată când se apelează next pe un ''​Iterator''​ care nu mai conţine un element următor.   * [[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​util/​NoSuchElementException.html|NoSuchElementException]]:​ este aruncată când se apelează next pe un ''​Iterator''​ care nu mai conţine un element următor.
  
-În momentul în care se instanţiază un obiect-excepţie,​ în acesta se reţine întregul lanţ de apeluri de funcţii prin care s-a ajuns la instrucţiunea curentă. Această succesiune se numeşte **stack trace** şi se poate afişa prin apelul [[http://​docs.oracle.com/​javase/​1.4.2/​docs/​api/​java/​lang/​Throwable.html#​printStackTrace()|e.printStackTrace()]],​ unde ''​e''​ este obiectul excepţie.+În momentul în care se instanţiază un obiect-excepţie,​ în acesta se reţine întregul lanţ de apeluri de funcţii prin care s-a ajuns la instrucţiunea curentă. Această succesiune se numeşte **stack trace** şi se poate afişa prin apelul [[http://​docs.oracle.com/​javase/​8/​docs/​api/​java/​lang/​Throwable.html#​printStackTrace--|e.printStackTrace()]],​ unde ''​e''​ este obiectul excepţie.
  
 === Prinderea excepţiilor === === Prinderea excepţiilor ===
Line 117: Line 119:
 Funcţia ''​f''​ va arunca întotdeauna o excepţie (din cauza că ''​l''​ este mereu ''​null''​). Observaţi cu atenţie funcţia ''​catchFunction'':​ Funcţia ''​f''​ va arunca întotdeauna o excepţie (din cauza că ''​l''​ este mereu ''​null''​). Observaţi cu atenţie funcţia ''​catchFunction'':​
   * în interiorul său a fost definit un bloc ''​try'',​ în interiorul căruia se apelează ''​f''​. De obicei, pentru a **prinde** o excepţie, trebuie să specificăm o zonă în care aşteptăm ca excepţia să se producă (**guarded region**). Această zonă este introdusă prin ''​try''​.   * în interiorul său a fost definit un bloc ''​try'',​ în interiorul căruia se apelează ''​f''​. De obicei, pentru a **prinde** o excepţie, trebuie să specificăm o zonă în care aşteptăm ca excepţia să se producă (**guarded region**). Această zonă este introdusă prin ''​try''​.
-  * în continuare, avem blocul ''​catch''​ (''​Exception e''​). La producerea excepţiei, blocul ''​catch''​ corespunzător va fi executat. În cazul nostru se va afişa mesajul ''"​S-a generat o excepţie"''​. După aceea, programul va continua să ruleze normal în continuare.+  * în continuare, avem blocul ''​catch''​ (''​Exception e''​). La producerea excepţiei, blocul ''​catch''​ corespunzător va fi executat. În cazul nostru se va afişa mesajul ''"​Exception found!"''​. După aceea, programul va continua să ruleze normal în continuare.
  
 Observaţi un alt exemplu: Observaţi un alt exemplu:
Line 330: Line 332:
       - va expune o metodă publică ''​setNext''​ ce va primi un ''​LoggerBase''​ și va seta următorul delegat din lista de responsabilitate       - va expune o metodă publică ''​setNext''​ ce va primi un ''​LoggerBase''​ și va seta următorul delegat din lista de responsabilitate
       - va defini o metodă abstractă protected ''​writeMessage''​ ce va primi mesajul care trebuie afișat       - va defini o metodă abstractă protected ''​writeMessage''​ ce va primi mesajul care trebuie afișat
-      - va expune o metodă publică ''​message''​ ce va primi mesajul care trebuie afișat și o severitate de tip ''​LogLevel''​. Dacă instanța de logger conține această severitate în colecția ​primite ​în constructor,​ atunci se va apela metoda ''​writeMessage''​. Apoi se vor pasa mesajul și severitatea către următorul delegat din lista de responsabilitate (dacă există unul)+      - va expune o metodă publică ''​message''​ ce va primi mesajul care trebuie afișat și o severitate de tip ''​LogLevel''​. Dacă instanța de logger conține această severitate în colecția ​primită ​în constructor,​ atunci se va apela metoda ''​writeMessage''​. Apoi se vor pasa mesajul și severitatea către următorul delegat din lista de responsabilitate (dacă există unul)
     - **(2p)** Definiți clasele de mai jos care vor extinde ''​LoggerBase''​ și implementa metoda ''​writeMessage'':​     - **(2p)** Definiți clasele de mai jos care vor extinde ''​LoggerBase''​ și implementa metoda ''​writeMessage'':​
       - ConsoleLogger - care va scrie toate tipurile de ''​LogLevel''​ (Hint: ''​all()''​) și va prefixa mesajele cu ''​[Console] ''​       - ConsoleLogger - care va scrie toate tipurile de ''​LogLevel''​ (Hint: ''​all()''​) și va prefixa mesajele cu ''​[Console] ''​
Line 337: Line 339:
       - Hint: ''​EnumSet.of()''​       - Hint: ''​EnumSet.of()''​
       - Completați cele 2 **TODO**-uri rămase în metoda ''​main''​ din clasa ''​MainEx4''​.       - Completați cele 2 **TODO**-uri rămase în metoda ''​main''​ din clasa ''​MainEx4''​.
- 
-==== Resurse ==== 
- 
-  * {{poo-ca-cd:​laboratoare:​exceptii:​skel-lab-exceptii.zip|Schelet}} 
-  * {{poo-ca-cd:​laboratoare:​exceptii:​sol-lab-exceptii.zip|Soluție}} 
-  * <​html><​a class="​media mediafile mf_pdf"​ href="/​poo/​laboratoare/​exceptii?​do=export_pdf">​PDF laborator</​a></​html>​ 
  
  
poo-ca-cd/laboratoare/exceptii.1601719183.txt.gz · Last modified: 2020/10/03 12:59 by amalia.palaghiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0