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á.
