Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Exception - Eccezioni....

    Salve, scrivo ancora in questo forum per un altro piccolo aiuto. Ho alcuni TEST da fare e tra le tante domande mi viene posta la seguente:

    class ColorException extends Exception {}
    class WhiteException extends ColorException {}
    class White {
    void m1() throws ColorException {throw new WhiteException();}
    void m2() throws WhiteException {}
    public static void main (String[] args) {
    White white = new White();
    int a,b,d,f; a = b = d = f = 0;
    try {white.m1(); a++;} catch (ColorException e) {b++;}
    try {white.m2(); d++;} catch (WhiteException e) {f++;}
    System.out.print(a+","+b+","+d+","+f);
    }}

    Ho dato la mia risposta, 0,1,0,1... poi vado a vedere il risultato finale e la risposta corretta era:

    0,1,1,0... ecco adesso non capisco il motivo...

    l'oggetto white, va a chiamare il metodo m1, che lancia l'eccezione ColorException, l'incremento della variabile a, non viene eseguito, in quanto nel momento in cui viene catturato un'eccezione nel try, tutto quello che c'è dopo sempre all'interno di questo codice non viene considerato. Passo al blocco catch, qui ColorException viene gestito e quindi b viene incrementato di 1. Passo al metodo m2, lancia un WhiteException, d++ è all'interno del try, quindi non dovrebbe essere eseguito anche perchè il catch cattura l'eccezione WhiteException, quindi dovrebbe incrementare f++...ovviamente questo mio ragionamento non è corretto in quanto il risultato che mi aspettavo non si è dimostrato tale qualcuno potrebbe spiegarmi il motivo per il quale il risultato sia 0,1,1,0?

    Grazie in anticipo.
    ..:: ( Erwittsy ) ::..

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Il metodo m2() dichiara che può lanciare una eccezione... ma il corpo è vuoto, quindi non lancia alcuna eccezione.


    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 L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Carino sto giochetto, però con un codice leggibile diventa anche più accattivante

    Codice PHP:

    class ColorException extends Exception {}

    class 
    WhiteException extends ColorException {}


    public class 
    White
    {
      
    void m1() throws ColorException
      
    {
        throw new 
    WhiteException();
      }
      
    void m2() throws WhiteException
      
    {
      }
      public static 
    void main (String[] args)
      {
        
    White white = new White();
        
    int a,b,d,f;
        
    0;
        try
        {
          
    white.m1();
          
    a++;
        }
        catch (
    ColorException e)
        {
          
    b++;
        }
        try
        {
          
    white.m2();
          
    d++;
        }
        catch (
    WhiteException e)
        {
          
    f++;
        }
        
    System.out.print(a+","+b+","+d+","+f);
      }


    Il fatto è che m2 può lanciare eccezioni, ma non è mica obbligato a farlo! Anzi, se guardi cosa fa m2 ti accorgi che non fa proprio nulla....

    edit...

    Azz, ho perso troppo tempo... beh, ormai lascio
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    26

    Che scemo !!!

    Che scemo...non avevo proprio visto -_- però il mio ragionamento filava vero:P? Ditemi di si ...

  5. #5
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051

    Re: Che scemo !!!

    Ditemi di si ...
    Si?
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

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.