Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68

    [JAVA] chiamante delle eccezioni

    Salve a tutti, il mio Prof, nella definizione di Eccezioni ha scritto:

    "Le eccezioni sono passate da un metodo al suo chiamante fino a quando si trova exception handler che la cattura e la gestisce riprendendo l'esecuzione"


    Cos'è il chiamante? Un metodo o un oggetto?
    Qualcuno mi può fare un esempio??

    Grasieeee

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Il "chiamante" è appunto il metodo che ha richiamato quello in cui è stata sollevata l'eccezione.

    codice:
    public void metodoCheSollevaEccezione() throws Exception {
       ...
       throw new Exception( ... );
       ...
    }
    
    public void metodoChiamante() {
       try {
          metodoCheSollevaEccezione();
       } catch (Exception e) { e.printStackTrace(); }
    }
    metodoChiamante() è appunto il "chiamante".


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    codice:
    class Ecc1 extends Exception {}
    class Ecc3 extends Exception {}
    
    class A {
    	public void p (int i) throws Ecc3 {
    		System.out.println ("- A, p: istr0 -");
    		if (i == 0) throw new Ecc3 ();
    		i--;
    		System.out.println ("- A, p: istr1 -");
    	}
    	
    
    	public void m (int i) throws Ecc1 {
    		System.out.println ("- A, m: istr0 -");
    		try {
    			if (i == 0) throw new Ecc1 ();
    			i--;
    			System.out.println ("- A, m: istr1 -");
    			this.p(i);
    			System.out.println ("- A, m: istr2 -");
    		} 
    		catch (Ecc3 ecc) {
    			System.out.println ("- A, m: istr3 -");
    		}
    		System.out.println ("- A, m: istr4 -");
    	}
    }
    
    
    
    
    class B extends A {
    	public void p (int i ) throws Ecc3 {
    		System.out.println ("- B, p: istr0 -");
    		try {
    			System.out.println ("- B, p: istr1 -");
    			if (i == 0) throw new Ecc3 ();
    			i--;
    			System.out.println ("- B, p: istr2 -");
    		} 
    		catch (Ecc3 e) {
    			System.out.println ("- B, p: istr3 -");
    		}
    		System.out.println ("- B, p: istr4 -");
    	}
    }
    
    
    
    
    
    public class EsempioEccezioni {
    	public static void main (String [] args) throws Ecc1 {
    		int i = 1;
    		A a = new B () ;
    		System.out.println ("- main: istr0 -");
    		a.m(i);
    		System.out.println ("- main: istr1 -");
    	}
    }



    Con i=1 e a di tipo A (A a = new A) mi stampa:
    - main istr 0 -
    eseguo a.m(1)
    - A, m: istr0 -
    - A, m: istr1 -
    eseguo this.p(0)
    - A, p: istr0 -
    - A, p: istr3 -
    - A, p: istr4 -
    - main istr 1 -



    Con i=1 e a di tipo B (A a = new B) mi stampa:
    - main istr 0 -
    eseguo a.m(1)
    - A, m: istr0 -
    - A, m: istr1 -
    eseguo this.p(0)
    - B, p: istr0 -
    - B, p: istr1 -
    - B, p: istr3 -
    - B, p: istr4 -
    - A, m: istr2 -
    - A, m: istr4 -
    - main istr 1 -



    Perchè nel primo caso dopo aver stampato - A, m: istr4 - sono uscito e non ho continuato nella riga sotto this.p(0) mentre nel secondo caso dopo aver stampato - B, p: istr4 - abbiamo continuato sotto this.p(0)????????

  4. #4

    Re: [JAVA] chiamante delle eccezioni

    Originariamente inviato da 8paolo9
    ...
    Cos'è il chiamante? Un metodo o un oggetto?
    ...
    Scusa se sarò franco, ma mi sembra un po' strano che il tuo prof parli di eccezioni java e gestione delle stesse quanto tu non sappia neanche cosa sia una classe ed un oggetto.
    La cosa è alquanto bizzarra.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    Certo che s cos'è un oggetto e un metodo!! Ho solo chiesto cos'è il chiamante dato che non ho capito bene come funziona la gestione delle eccezioni!!

  6. #6
    La mia non era una critica ma solamente una perplessità, comunque se controlli bene i due metodi p() vedrai che quello nella classe B gestisce l'eccezione Ecc3 tramite l'apposito costrutto try catch mentre quello presente nella classe A non fa altro che sollevare tale eccezione al metodo chiamente nel quale essa viene gestita. Alla luce di ciò se segui bene il percorso che il codice compie ti dovrebbe essere più chiaro il perchè del comportamento da te descritto.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    grazie sei stato molto chiaro

  8. #8
    In pratica è possibile gestire le eccezioni in due modi, tramite il costrutto try catch, come avviene nel metodo m della classe A e nel metodo p della classe B oppure tramite l'istruzione throws mediante la quale si rimanda al metodo chiamante la gestione dell'eccezione.
    Nel tuo esempio nel metodo p della classe B l'eccezione Ecc3 viene gestita mediante il costrutto try catch nel quale viene semplicemente stampato a video. In questo modo l'eccezione viene "consumata" senza effettuare altre operazioni e l'esecuzione del codice prosegue tranquillamente. Invece, nel metodo p della classe A non è presente alcun costrutto try catch per cui se viene sollevata un'eccezione Ecc3 essa viene rimandata al metodo chiamante, nel tuo caso il metodo m della classe A. A questo punto la normale esecuzione del codice viene alterata. E' per questo che non vedi la stampa a video "- A, m: istr2 -". Essendosi verificata un'eccezione all'interno del metodo p il codice presente dopo la chiamata a tale metodo NON viene eseguito, ma il controllo passa all'interno del costrutto catch e da qui a seguire.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.