Differences

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

Link to this comparison view

poo:breviare:breviar-05 [2018/09/23 12:08]
mihai.nan created
poo:breviare:breviar-05 [2023/10/16 19:37] (current)
carmen.odubasteanu
Line 1: Line 1:
 ==== Laboratorul 5 ==== ==== Laboratorul 5 ====
 +
  
 === Exceptii === === Exceptii ===
Line 37: Line 38:
  
 == Clauza throws == == Clauza throws ==
-Inca din primele laboratoare am spus ca obiecte interactioneaza prin apeluri de metoda. Din perspectiva unui obiect care apeleaza o metoda a unui alt obiect, la revenirea din respectivul apel putem fi in doua situatii: metoda s-a executat in mod obisnuit sau metoda s-a terminat in mod neobisnuit, datorita aparitiei unei exceptii. Clauza ​''''''​throws''''' ​apare in antetul unui metode si ne spune ce tipuri de exceptii pot conduce la **terminarea neobisnuita** a respectivei metode. Mai jos, vom prezenta modul in care specificam metodele clasei ​'''''​SirNumere''''' ​care pot sa termine executia datorita unei situatii neobisnuite.+Inca din primele laboratoare am spus ca obiecte interactioneaza prin apeluri de metoda. Din perspectiva unui obiect care apeleaza o metoda a unui alt obiect, la revenirea din respectivul apel putem fi in doua situatii: metoda s-a executat in mod obisnuit sau metoda s-a terminat in mod neobisnuit, datorita aparitiei unei exceptii. Clauza ​**throws** apare in antetul unui metode si ne spune ce tipuri de exceptii pot conduce la **terminarea neobisnuita** a respectivei metode. Mai jos, vom prezenta modul in care specificam metodele clasei ​**SirNumere** care pot sa termine executia datorita unei situatii neobisnuite.
  
 <code java> <code java>
Line 56: Line 57:
  
  
-Clauza ​'''''​throws''''' ​poate fi vazuta ca o specificare suplimentara a tipului returnat de o metoda. De exemplu, metoda ​'''''​sterge''''' ​returneaza, in mod obisnuit, o valoare de tip '''''​int'''''​, reprezentand pozitia elementului sters. Clauza ​'''''​throws''''' ​spune ca, in situatii exceptionale,​ metoda poate returna o referinta la un obiect de tip '''''​ExceptieSirVid''''' ​sau o referinta la un obiect al carui tip reprezinta un subtip al acestei clase.+Clauza ​**throws** poate fi vazuta ca o specificare suplimentara a tipului returnat de o metoda. De exemplu, metoda ​**sterge** returneaza, in mod obisnuit, o valoare de tip **int**, reprezentand pozitia elementului sters. Clauza ​**throws** spune ca, in situatii exceptionale,​ metoda poate returna o referinta la un obiect de tip **ExceptieSirVid** sau o referinta la un obiect al carui tip reprezinta un subtip al acestei clase.
  
  
 <note important>​ <note important>​
-Este important de subliniat faptul ca dupa clauza ​'''''​throws''''' ​se pot introduce mai multe nume de exceptii, separate prin virgula.+Este important de subliniat faptul ca dupa clauza ​**throws** se pot introduce mai multe nume de exceptii, separate prin virgula.
 </​note>​ </​note>​
  
 == Tratarea exceptiilor == == Tratarea exceptiilor ==
-Pana acum am vorbit despre modul de definire a unei exceptii si de modul in care specificam faptul ca o metoda poate sa se termine cu una sau mai multe exceptii. In continuare, ne vom ocupa de raspunsul urmatoarei intrebari: ,,Cum poate afla un obiect, folosit pentru apelul unei metode ce se poate termina cu una sau mai multe exceptii, daca apelul s-a terminat normal sau nu?''​. Raspunsul este unui simplu, deoarece, evident, cei care au proiectat Java s-au gandit la o rezolvare pentru o astfel de situatie. Acest lucru se rezolva uzitand un bloc '''''​try-catch-finaly'''''​, structura generala pentru un astfel de bloc fiind prezentata mai jos.+Pana acum am vorbit despre modul de definire a unei exceptii si de modul in care specificam faptul ca o metoda poate sa se termine cu una sau mai multe exceptii. In continuare, ne vom ocupa de raspunsul urmatoarei intrebari: ,,Cum poate afla un obiect, folosit pentru apelul unei metode ce se poate termina cu una sau mai multe exceptii, daca apelul s-a terminat normal sau nu?''​. Raspunsul este unui simplu, deoarece, evident, cei care au proiectat Java s-au gandit la o rezolvare pentru o astfel de situatie. Acest lucru se rezolva uzitand un bloc **try-catch-finaly**, structura generala pentru un astfel de bloc fiind prezentata mai jos.
  
 <code java> <code java>
Line 92: Line 93:
  
 <note important>​ <note important>​
-In sectiunea ​'''''​try''''' ​se introduce codul pe parcursul caruia pot sa apara exceptii. In fiecare sectiune ​'''''​catch''''' ​se amplaseaza secventa de intructiuni ce trebuie sa se execute in momentul in care sectiunea in '''''​try''''' ​a aparut o exceptie de tipul parametrului sectiunii ​'''''​catch''''' ​(sau un subtip). In sectiunea ​'''''​finally'''''​, se amplaseaza cod ce trebuie neaparat sa se execute inaintea parasirii blocului ​'''''​try-catch-finally'''''​, indiferent daca a aparut sau nu vreo exceptie (tratata sau netratata).+In sectiunea ​**try** se introduce codul pe parcursul caruia pot sa apara exceptii. In fiecare sectiune ​**catch** se amplaseaza secventa de intructiuni ce trebuie sa se execute in momentul in care sectiunea in **try** a aparut o exceptie de tipul parametrului sectiunii ​**catch** (sau un subtip). In sectiunea ​**finally**, se amplaseaza cod ce trebuie neaparat sa se execute inaintea parasirii blocului ​**try-catch-finally**, indiferent daca a aparut sau nu vreo exceptie (tratata sau netratata).
 </​note>​ </​note>​
  
Line 98: Line 99:
 == Emiterea explicita a exceptiilor == == Emiterea explicita a exceptiilor ==
  
-In aceasta sectiune vom vedea cum anume se anunta explicit aparitia unei situatii neobisnuite. Mai exact, vom vedea cum se emite explicit o exceptie. Acest lucru se va realiza uzitand instructiunea ​'''''​throw'''''​.+In aceasta sectiune vom vedea cum anume se anunta explicit aparitia unei situatii neobisnuite. Mai exact, vom vedea cum se emite explicit o exceptie. Acest lucru se va realiza uzitand instructiunea ​**throw**.
  
  
Line 105: Line 106:
 </​note>​ </​note>​
  
-In continuare, vom prezenta implementarea integrala a clasei ​'''''​SirNumere'''''​, pentru o intelegere mai buna a conceptelor explicate in aceasta sectiune.+In continuare, vom prezenta implementarea integrala a clasei ​**SirNumere**, pentru o intelegere mai buna a conceptelor explicate in aceasta sectiune.
  
 <code java> <code java>
Line 167: Line 168:
  
  
- Spre exemplu, vom considera un vector intrinsec, avand elemente de tip double si o capacitate de 10 elemente. In momentul in care vom incerca sa accesam un element folosind un index mai mare ca 9 sau mai mic ca 0, masina virtuala Java va emite o exceptie de tip '''''​IndexOutOfBoundsException'''''​.+ Spre exemplu, vom considera un vector intrinsec, avand elemente de tip double si o capacitate de 10 elemente. In momentul in care vom incerca sa accesam un element folosind un index mai mare ca 9 sau mai mic ca 0, masina virtuala Java va emite o exceptie de tip **IndexOutOfBoundsException**.
  
  <​code java>  <​code java>
Line 222: Line 223:
  
 <note important>​ <note important>​
-**Blocurile statice de initilizare** sunt blocuri de cod care sunt executate **DOAR O DATA** atunci cand clasa este incarcata de Java Virtual Machine; acesta este motivul pentru care mesajul din blocul static de initializare este imprimat inainte de apelul metodei ​'''''​main'''''​. Aceste tipuri de blocuri de initializare sunt utile pentru initializarea atributelor statice din clase sau pentru a efectua o singura data un set de prelucrari.+**Blocurile statice de initilizare** sunt blocuri de cod care sunt executate **DOAR O DATA** atunci cand clasa este incarcata de Java Virtual Machine; acesta este motivul pentru care mesajul din blocul static de initializare este imprimat inainte de apelul metodei ​**main**. Aceste tipuri de blocuri de initializare sunt utile pentru initializarea atributelor statice din clase sau pentru a efectua o singura data un set de prelucrari.
  
  
-**Bocurile statice de initializare** pot accesa **DOAR** atributele statice ale clasei in care sunt definite. ​ **NU** se pot folosi variabile de instanta in blocuri de initializare statice (daca incercati sa faceti acest lucru, veti primi o eroare de compilare: ​'''''​non-static variable value cannot be referenced from a static context'''''​).+**Bocurile statice de initializare** pot accesa **DOAR** atributele statice ale clasei in care sunt definite. ​ **NU** se pot folosi variabile de instanta in blocuri de initializare statice (daca incercati sa faceti acest lucru, veti primi o eroare de compilare: ​**non-static variable value cannot be referenced from a static context**).
 </​note>​ </​note>​
  
-== Blocuri instanta de initializare+== Blocuri instanta de initializare ​==
  
 <note important>​ <note important>​
poo/breviare/breviar-05.1537693723.txt.gz · Last modified: 2018/09/23 12:08 by mihai.nan
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