void x( ) throws Exception {           // throws otorga permiso de propagar la excepción
   throw new Exception("error");
}

void f( ) throws Exception {           // como en compilador sabe que x( ) puede propagar una excepción, h también necesita que se le otorgue permiso
   x( );
}

void main( ) throws Exception {        // como en compilador sabe que f( ) puede propagar una excepción, si no capturamos la excepción entonces también tenemos que otorgarle permiso a main
   f( );
}
