Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Eccezioni ereditate

  1. #1

    Eccezioni ereditate

    Salve.
    In merito al seguente programmino...
    codice:
    class MyException extends RuntimeException {}
    
    
    public class Test {
    	public static void main(String args[]) {
    		try {
    			method1();
    		}
    		catch (MyException me) {
    			System.out.print("A");
    		}
    	}
    	public static void method1() {
    		try {
    			throw Math.random() > 0.5 ? new MyException() : new RuntimeException();
    		}
    		catch (RuntimeException re) {
    			System.out.print("B");
    		}
    	}
    }
    Viene stampato sempre "B" perché MyException extends RuntimeException, o c'è un'altra ragione?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    No, è corretta la tua osservazione.
    Il catch all'interno del metodo è molto più generico di quello esterno: lui raccoglie tutte le eccezioni di tipo RuntimeException (compresa, quindi, anche MyException essendo che è una RuntimeException). Di conseguenza, così com'è il codice, non potrai mai ottenere la stampa di "A".


    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

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Aggiungo: la JVM va a cercare a ritroso (lungo lo stack delle chiamate) il PRIMO catch che è in grado di gestire la eccezione lanciata.
    Il catch in method1() è in grado di gestire sia RuntimeException che MyException (che è-un RuntimeException)? Sì, stop. La eccezione non esce nemmeno dal metodo!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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 © 2024 vBulletin Solutions, Inc. All rights reserved.