Download presentation
Presentation is loading. Please wait.
Published byΔάμαλις Αρβανίτης Modified over 6 years ago
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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.