se un metodo nella firma ha throws IOException, il metodo o il costruttore che lo chiama deve anch'esso laciare IOExeption o qualche altra classe di più alto livello nella gerarchia(come Exception o Throwable).

Specificare il tipo di eccezione che potrebbe essere lanciata va fatto fino a quando non la si cattura con un try-catch, se tu hai deciso di delegare questo compito alla console automaticamente, tutti i metodi, fino al main, che chiamano un metodo che potrebbe lanciare un eccezione devono avere throws Eccezione_in_questione_o_super_classe_della_eccezi one.