Esse throws —Exception é uma indicação que o seu método pode lançar uma —Exception e ela não é tratada no próprio método…
(—Exception = alguma Excessão)
Ou seja, qualquer um que chamar seu método vai estar ciente que uma excessão daquele tipo pode ser lançada, e é obrigado a tratar essa excessão ou passar pra frente (ou seja colocar, também throws —Exception)
Aprofundando ainda mais:
Quando uma excessão é lançada, o java vai procurar por alguém que trate aquela excessão (bloco try/catch), seguindo a pilha de chamadas, ex:
Se um método a chama um método b que chama um método c que lança uma SQLException,
A jvm vai procurar um código de tratamento pra essa excessão no método c, se não encontrar, vai pro método b, assim sussecivamente, até encontrar alguém que a trate.
Há certas operações no Java, que já se espera que lancem excessões (operações de I/O, consulta ao BD, etc…) daí ou você trata as excessões, ou você passa pra frente, veja os ex:
...
try{
//Código que pode lançar excessão
}catch(SqlException e){
//Tratamento da excessão, será executado se alguma excessão desse tipo for lançada
}finally{
//Usado mais para liberar recursos, é executado independentemente de ter ou não lançado excessão
}
Ou também você pode declarar a excessão na assinatura do método que a lança, para que os outros métodos que invoquem este método estejam ciente do que pode ocorrer, ex:
public String lerArquivo(String caminho, String nome) throws IOException{
//Código que lê um arquivo pode lançar uma IOException, não tem bloco try/catch
//Neste caso se uma excessão for lançada, o método "passa ela pra frente"
}
Nesse caso o método que chamou o método lerArquivo que deve “estar preparado” pra quando uma excessão desse tipo for lançada 
Espero ter ajudado
[]'s