Tipos de exceção

"Eu queria falar sobre mais uma coisa hoje. Em Java, todas as exceções são divididas em dois tipos: verificadas e não verificadas (aquelas que devem ser capturadas e aquelas que você não precisa capturar). Por padrão, todas as exceções precisam ser capturado."

"Você pode intencionalmente lançar exceções em seu código?"

"Você pode lançar qualquer exceção em seu próprio código. Você pode até mesmo escrever suas próprias exceções. Mas falaremos sobre isso mais tarde. Agora, vamos nos concentrar nas exceções lançadas pela Java Machine."

"OK."

"Se ClassNotFoundException ou FileNotFoundException são lançados (ocorrem) em um método, o desenvolvedor deve indicá-los na declaração do método. Essas são exceções verificadas . Geralmente é assim:"

Exemplos de exceções verificadas
public static void method1() throws ClassNotFoundException, FileNotFoundException
public static void main() throws IOException
public static void main() // Doesn't throw any exceptions

"Então, apenas escrevemos 'lances' seguidos por uma lista de exceções delimitada por vírgulas, certo?"

method1“ Sim . _ _ _

"Novamente. Se o seu método principal precisar chamar um método cuja declaração contenha ' throws FileNotFoundException , …', você precisará fazer uma das duas coisas:

1) Capturar FileNotFoundException , …

Você deve agrupar o código que chama o método inseguro em um bloco try-catch .

2) Não capture FileNotFoundException , …

Você deve adicionar essas exceções à lista de lances do seu método principal ."

"Você poderia me dar um exemplo?"

"Dê uma olhada neste:"

Exemplos de exceções verificadas
public static void main(String[] args)
{
    method1();
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"O código neste exemplo não compilará, porque o método principal chama method1() , que lança exceções que precisam ser capturadas."

"Para compilar, precisamos adicionar tratamento de exceção ao método principal. Você pode fazer isso de duas maneiras:"

Opção 1: Simplesmente lançamos novamente a exceção (para o chamador):
public static void main(String[] args)  throws FileNotFoundException, ClassNotFoundException
{
    method1();
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"E aqui pegamos com um try-catch :"

Opção 2: Capturar a exceção:
public static void main(String[] args)
{
    try
    {
        method1();
    }
    catch(Exception e)
    {
    }
}

public static void method1() throws FileNotFoundException, ClassNotFoundException
{
    //Throws FileNotFoundException if the file doesn't exist
    FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}

"Está começando a ficar mais claro."

"Veja o exemplo a seguir. Isso o ajudará a entender o resto."

Em vez de lidar com exceções, nós as lançamos novamente para métodos mais abaixo na pilha de chamadas que sabem como lidar com elas:
public static void method2() throws FileNotFoundException, ClassNotFoundException
{
    method1();
}
Manipule uma exceção e lance outra:
public static void method3() throws ClassNotFoundException
{
   try
    {
        method1();
    }
    catch (FileNotFoundException e)
    {
        System.out.println("FileNotFoundException has been caught.");
    }
}
Captura ambas as exceções, lança nenhuma:
public static void method4()
{
    try
    {
        method1();
    }
    catch (FileNotFoundException e)
    {
        System.out.println("FileNotFoundException has been caught.");
    }
    catch (ClassNotFoundException e)
    {
        System.out.println("ClassNotFoundException has been caught.");
    }
}
3
Tarefa
Java Syntax,  nível 9lição 4
Bloqueado
Code entry
Your attention, please! Now recruiting code entry personnel for CodeGym. So turn up your focus, let your fingers relax, read the code, and then... type it into the appropriate box. Code entry is far from a useless exercise, though it might seem so at first glance: it allows a beginner to get used to and remember syntax (modern IDEs seldom make this possible).

"Existe mais um tipo de exceção, a RuntimeException e as classes que a herdam. Você não precisa capturá-las. São exceções não verificadas. Elas são consideradas difíceis de prever. Você pode lidar com elas da mesma forma, mas você não precisa indicá-los em uma cláusula throws ."