palavra-chave throws em Java
A palavra-chave throws
em Java é usada em declarações de métodos para especificar que o método pode lançar uma ou mais exceções. Ele fornece uma maneira de os métodos sinalizarem que podem encontrar condições excepcionais com as quais não estão equipados para lidar.
Uso
A palavra-chave throws
é colocada na assinatura do método após a lista de parâmetros e antes do corpo do método. Ele é seguido por uma lista separada por vírgulas de classes de exceção que o método pode lançar.
Sintaxe
returnType methodName(parameters) throws ExceptionType1, ExceptionType2 {
// method body
}
returnType
: O tipo de retorno do método.methodName
: O nome do método.parameters
: Os parâmetros do método.ExceptionType1, ExceptionType2
: As exceções que o método pode lançar.
Exemplos
Exemplo 1: Exceção única
public void readFile(String fileName) throws IOException {
FileReader file = new FileReader(fileName);
BufferedReader fileInput = new BufferedReader(file);
// Read file content
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
}
Neste exemplo, o método readFile
declara que você pode lançar um IOException
. Isso indica que o método pode encontrar um erro de entrada/saída que não pode ser tratado internamente.
Exemplo 2: Múltiplas exceções
public void processFile(String fileName) throws IOException {
FileReader file = new FileReader(fileName);
BufferedReader fileInput = new BufferedReader(file);
// Read file content
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
}
Aqui, o método processFile
declara que pode lançar tanto IOException
quanto FileNotFoundException
. Isso informa ao chamador que o método pode encontrar uma dessas exceções.
Exemplo 3: Exceção personalizada
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
public void validateAge(int age) throws CustomException {
if (age < 18) {
throw new CustomException("Age must be 18 or older.");
}
System.out.println("Age is valid.");
}
Neste exemplo, é criada uma exceção personalizada CustomException
. O método validateAge
declara que pode lançar essa exceção personalizada se a idade for inferior a 18 anos.
Dicas e práticas recomendadas
- Declarar exceções específicas: Declare as exceções mais específicas possíveis em vez de usar uma classe
Exception
genérica. Isso torna o código mais legível e de fácil manutenção.public void method() throws IOException, SQLException { // method body }
- Exceções de documentos: Sempre documente as exceções que um método pode lançar usando os comentários do Javadoc. Isso ajuda outros desenvolvedores a entender os possíveis riscos e a lidar com eles adequadamente.
/** * Reads a file and prints its content. * * @param fileName the name of the file to read * @throws IOException if an I/O error occurs */ public void readFile(String fileName) throws IOException { // method body }
- Use o site
throws
criteriosamente: Use a palavra-chavethrows
somente quando o método não puder tratar a exceção internamente. Se possível, trate as exceções dentro do método para oferecer um aplicativo mais robusto e fácil de usar.public void readFile(String fileName) { try { FileReader file = new FileReader(fileName); BufferedReader fileInput = new BufferedReader(file); // Read file content for (int counter = 0; counter < 3; counter++) System.out.println(fileInput.readLine()); fileInput.close(); } catch (IOException e) { System.err.println("An error occurred: " + e.getMessage()); } }
- Propagar exceções: Ao propagar exceções, certifique-se de que o método de chamada seja capaz de tratá-las ou de propagá-las na pilha de chamadas.