Acredito que este código não compilaria por conta da sexta linha, pois se chegar ao else, nunca executará o throws para sua exception (unreachable statement).
De acordo com o que entendi olhando seu código, você quer disponibilizar as contas (presumo que venha de um atributo) caso a senha informada por parâmetro seja válida, certo? 
Caso não seja, a intenção seria barrar a execução de algum jeito, lançando assim esta exceção, certo?
Bom, eu acho que não é tão interessante utilizar o try-catch dentro desse método, pois você poderia sempre tratá-lo no momento de sua execução para saber que, afinal, foi informada uma senha inválida. 
Segue o código de como, na minha opinião, ficaria melhor.
public Map<String, Conta> getContas(int senha) throws SenhaInvalida {
        if (this.autentica(senha))
           return contas;
        else 
            throw new SenhaInvalida(senha); 
    }
Você pode escolher qual seria a melhor opção, como algumas: 
- sempre utilizar o tratamento na hora de sua invocação (mas lembre-se que exceptions de NullPointerException são unchecked);
- criar um método que seria responsável por apenas invocar o apresentado acima, deixando-o privado e fazendo apenas com que este novo seja utilizado 
(acrescentando nesta ideia, você poderia criar até mesmo algo semelhante um interceptador, que teria a parte de validação da senha abstraída e, de certa forma, centralizada);
- mudar a implementação da sua SenhaInvalida, fazendo com que ela seja checked, assim, ela sempre deverá ser implementada com um try-catch
O que você acha?