Dúvida Questão Certificação - clausula catch

2 respostas
alf_f2

Boa tarde,

Estou com uma dúvida referente a uma questão de um simulado de SCJP:

package inquisition;

import java.io.*;
import java.sql.SQLException;

public class Q58 implements Runnable {

	public static void main(String[] args) {
		Thread t = new Thread(this);
		try{
			t.start();
				
		}catch(IOException e){
			System.out.println(e);
		}
	}

	
	public void run() throws IOException{
		File f = new File("f");
		FileWriter fw = new FileWriter(f);

	}


}

A questão é pergunta quantos erros de compilação ocorrerão ao compilar o código acima?

A resposta da questão do simulado diz que são 2 Erros de compilação.
E de fato são, eu fiz o teste.

D:\Workspace\EstudoJava>javac inquisition/Q58.java
inquisition/Q58.java:17: run() in inquisition.Q58 cannot implement run() in java
.lang.Runnable; overridden method does not throw java.io.IOException
        public void run() throws IOException{
                    ^
inquisition/Q58.java:8: non-static variable this cannot be referenced from a sta
tic context
                Thread t = new Thread(this);
                                      ^
2 errors

Os 2 erros relatados acima são o uso de this num método statico e que a assinatura de run está errada.

Porém a minha dúvida é a seguinte.
Existe uma cláusula catch IOException no método main.
Esta cláusula catch está aí, porém o método start() de Thread não lança IOException (que é uma checked Exception). Em situações como esta o compilador geralmente emite um erro (Conforme Exemplo Abaixo).

//Exemplo de Catch Inútil que gera erro de compilação
import java.io.FileNotFoundException;

public class CatchBurro {

	public static void main(String[] args) {
		try{
			System.out.println("haha");
		}catch(FileNotFoundException e){
			e.printStackTrace();
		}

	}
}

Porque este erro de compilação que ocorre na classe CatchBurro não ocorreu no main da classe Q58, sendo que ambas fazem um catch inútil de uma checked Exception ?

Vou fazer a prova em breve e gostaria de ajuda para tirar esta dúvida da minha mente.
Grato desde já.

2 Respostas

W

erros de exceções só são verificados quando não ocorrem outros erros no mesmo método
ex: erro da exceção abaixo é ignorado devido ao erro na linha 5

import java.io.FileNotFoundException;
public class Ada{
	public static void main(String [] args){
		throw new FileNotFoundException();
		assad;
	}
}
alf_f2

A beleza, :smiley:
Obrigado pela explicação.

Criado 3 de agosto de 2008
Ultima resposta 4 de ago. de 2008
Respostas 2
Participantes 2