Exceções...por que compilar / não compila?

1 resposta
O

Porque este código compila...

public class Example1
{
	public Example1()
	{
		Example1Sub exsub = new Example1Sub();
		
		try
		{
			exsub.test();
		}
		catch ( Exception e )
		{
			e.printStackTrace();
		}
		
	}
	
	void test() throws IOException
	{
		System.out.println("In Example1");
		throw new IOException();
	}	
}

class Example1Sub extends Example1 
{
	void test() 
	{
		System.out.println("In Example1Sub");
	}
}

e esse não...

public class Example1
{
	public Example1()
	{
		Example1Sub exsub = new Example1Sub();
		
		try
		{
			exsub.test();
		}
		catch ( IOException e )
		{
			e.printStackTrace();
		}
		
	}
	
	void test() throws IOException
	{
		System.out.println("In Example1");
		throw new IOException();
	}	
}

class Example1Sub extends Example1 
{
	void test() 
	{
		System.out.println("In Example1Sub");
	}
}

Porque o compilador reclama que o corpo do try lança exeção para "IOException" e não reclama para "Exception"?

1 Resposta

R

Na verdade, voce não esta lançando nenhuma excessao neste codigo, pois o metodo .test() chamado é a versao que não lança excessao alguma.

void test() 
 	{
 		System.out.println("In Example1Sub");
 	}

Acontence que no java é permitido colocar um bloco try-catch capturando uma Excption mesmo que nenhuma exceção verificada seja lançada. Pois Exception não soh eh superclasse das excessoes verificadas, como das não verificadas tambem, por exemplo:
o senguinte codigo:

public class NewClass2 {
    

    public NewClass2() {
        try {
            
            System.out.println("");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}

eh perfeitamente valido.
Contudo, quando voce tenta captar uma exceção VERIFICADA que nunca sera lançada, o compilador reclama.

rodrigo,

scjp1.4

Criado 19 de novembro de 2006
Ultima resposta 20 de nov. de 2006
Respostas 1
Participantes 2