Presentation is loading. Please wait.

Presentation is loading. Please wait.

RP3/predavanje08 Ugniježdeni tipovi Iznimke 10/11/2018

Similar presentations


Presentation on theme: "RP3/predavanje08 Ugniježdeni tipovi Iznimke 10/11/2018"— Presentation transcript:

1 ---------- Računarski praktikum 3 ----------
RP3/predavanje08 Ugniježdeni tipovi Iznimke 10/11/2018 Računarski praktikum Maja Starčević

2 Ugniježdeni tipovi Za ugniježdene (engl. nested) tipove vrijede sljedeća pravila: Mogu pristupati svim članovima tipa koji ih sadrži (pa i privatnima). Mogu imati bilo koji modifikator pristupa. Default vidljivost je private. Svi korisnički definirani tipovi mogu biti ugniježdeni, odnosno ugnijezditi se mogu klase, strukture, enumeracije, delegati, sučelja Samo klase i strukture mogu sadržavati ugniježdene tipove. 10/11/2018 Računarski praktikum 3

3 Ugniježdeni tipovi public class Proizvod { private class Sastav { ... } public enum Boja { Crna, Smedja, Plava }; } U prethodnom primjeru su klasa Sastav i enumeracija Boja ugniježdeni tipovi. Pozivanje izvan klase Proizvod: Proizvod.Boja boja=Proizvod.Boja.Plava; 10/11/2018 Računarski praktikum 3

4 Ugniježdeni tipovi Zadatak: pronađite greške u kodu: class Outer {
int a; class Inner int b; Outer o=new Outer( ); public Inner( ) { b = o.a; } } Outer o = new Outer( ); Outer.Inner oo = new Outer.Inner( ); 10/11/2018 Računarski praktikum 3

5 Ugniježdeni tipovi class Outer { int a; class Inner int b;
Outer o=new Outer( ); public Inner( ) { b = o.a; } } Outer o = new Outer( ); Outer.Inner oo = new Outer.Inner( ); // klasa Outer.Inner ima private pristup public Inner( ) { b = o.a; } // klasa nije ugniježdena u klasi Outer 10/11/2018 Računarski praktikum 3

6 Iznimke Try/catch blok je primarni mehanizam za rukovanje iznimkama. Omogućuje razdvajanje rukovanja pogreškom od normalnog toka algoritma. Ako u try dijelu tog bloka postoji pogreška, prosljeđuje se catch dijelu bloka. Pogreška koja uzrokuje skok programskog toka u catch blok zove se iznimka. Finally blok provodi potrebno čišćenje prije zatvaranja programa. 10/11/2018 Računarski praktikum 3

7 Iznimke static void Main( ) { try int x=1, y=0;
Console.WriteLine (x / y); } catch (DivideByZeroException e) Console.WriteLine(“Dijeljenje s nulom!”); 10/11/2018 Računarski praktikum 3

8 Iznimke try { } catch (ExceptionA e) catch (ExceptionB e) finally Tip iznimke mora biti System.Exception ili klasa izvedena iz System.Exception Napomena: Try blok treba doći uvijek u kombinaciji s catch, finally ili catch i finally blokom. 10/11/2018 Računarski praktikum 3

9 Iznimke Ukoliko želimo uhvatiti iznimku bilo kojeg tipa, možemo pisati
catch blok u obliku catch (Exception e) { ……. } ili, ako nam nije potrebna referenca na iznimku, jednostavnije kao catch { ……. } 10/11/2018 Računarski praktikum 3

10 Iznimke ArgumentException MulticastNotSupportedException
ArgumentNullException NotFiniteNumberException ArithmeticException NotSupportedException ArrayTypeMismatchException NullReferenceException DivideByZeroException OutOfMemoryException FormatException OverFlowException IndexOutOfRangeException StackOverFlowException InvalidCastExeption TypeInitializationException MemberAccessException 10/11/2018 Računarski praktikum 3

11 Iznimke Primjer 1: static void Main(string[] args) { try
throw new ArgumentNullException(); } catch(ArgumentException e) Console.WriteLine("Uhvatio ArgumentException iznimku"); finally Console.WriteLine("U finally bloku"); // Uhvatio ArgumentException iznimku U finally bloku 10/11/2018 Računarski praktikum 3

12 Iznimke Primjer 2: static void Main(string[] args) { try
throw new ArgumentException(); } catch(ArgumentNullException e) Console.WriteLine("Uhvatio ArgumentException iznimku"); finally Console.WriteLine("U finally bloku"); // Unhandled Exception : System. ArgumentException …….. U finally bloku 10/11/2018 Računarski praktikum 3

13 Iznimke Primjer 3: static void Main(string[ ] args) {
int a = 2, b = 0; try if (b == 0) throw new DivideByZeroException( ); int c=a/b ; } catch (DivideByZeroException e) // specijaliziraniji tip iznimke se stavlja u prvi { // catch blok Console.WriteLine(e.ToString( )); catch (Exception e) 10/11/2018 Računarski praktikum 3

14 Iznimke Primjer 4: static void Main(string[ ] args) {
int a = 2, b = 0; try if (b == 0) throw new DivideByZeroException( ); int c=a/b ; } catch (Exception e) Console.WriteLine(e.ToString( )); catch (DivideByZeroException e) // error, catch blok ne može teoretski uhvatiti iznimku 10/11/2018 Računarski praktikum 3

15 Iznimke Primjer 5: catch (System.DivideByZeroException) class Program
{ static void Main(string[] args) Program p = new Program(); p.Funkcija( ); } public void Funkcija() try double a = 2; double b = 0; Console.WriteLine(Podijeli(a, b)); catch (System.DivideByZeroException) { Console.WriteLine("DivideByZeroException!"); } catch (System.ArithmeticException) Console.WriteLine("ArithmeticException!"); catch (Exception e) Console.WriteLine("Log: " + e.ToString()); public double Podijeli(double a, double b) if (b==0) throw new System.DivideByZeroException( ); if (a==0) throw new System.ArithmeticException( ); return a/b; 10/11/2018 Računarski praktikum 3

16 Iznimke static void Main(string[] args) class Program Primjer 6: { {
static void f() try throw new OverflowException(); } catch (NullReferenceException e) Console.WriteLine("Uhvatio iznimku u funkciji f:"); Console.WriteLine(e.ToString()); finally Console.WriteLine("Finally u funkciji f"); } // finally blok se izvršava static void Main(string[] args) { try f(); } catch (Exception e) //hvatanje iznimke Console.WriteLine("Uhvatio iznimku u funkciji Main:"); Console.WriteLine(e.ToString()); finally Console.WriteLine("Finally u funkciji Main"); } // finally blok se izvršava Primjer 6: 10/11/2018 Računarski praktikum 3

17 Iznimke class Program static void Main(string[] args) Primjer 6: { {
static void f() try throw new OverflowException(); } catch (OverflowException e) // hvatanje iznimke Console.WriteLine("Uhvatio iznimku u funkciji f:"); Console.WriteLine(e.ToString()); throw; // ponovno izbacivanje finally Console.WriteLine("Finally u funkciji f"); } // finally blok se izvršava static void Main(string[] args) { try f(); } catch (Exception e) // ponovno hvatanje Console.WriteLine("Uhvatio iznimku u funkciji Main:"); Console.WriteLine(e.ToString()); finally Console.WriteLine("Finally u funkciji Main"); } // finally blok se izvršava Primjer 6: 10/11/2018 Računarski praktikum 3


Download ppt "RP3/predavanje08 Ugniježdeni tipovi Iznimke 10/11/2018"

Similar presentations


Ads by Google