Duvida com exceções

Pessoal pintou a seguinte duvida !!!

O que acontece com a primeira exceção ? segue codigo exemplo

[code] public static void main(String[] args) {

	try{
		
		opa();
		
	}catch(Exception e){System.out.println(e);}
	
}

private static void opa() throws Exception{
	try{
		throw new IllegalArgumentException("opa");
	}finally{
		throw new IllegalArgumentException("opa 1");
	}
}[/code]

Baita tricky question hein?!
Fiz uns testes aqui e acredito que o objeto da exceção “se perde” e fica disponível para o Garbage Collector (o mesmo que ocorre quando um método com retorno é invocado e o retorno não é atribuído a nenhuma variável).
Tente executar um teste mais completo, assim:

public class DoubleThrows {
	public static void main(String[] args) {

		try {
			test();
		} catch (Exception e) {
			System.out.println(e);
		}
	}

	private static void test() throws Exception {
		try {
			System.out.println("Passou no try");
			throw new MyException("Excecao 1");
		} finally {
			System.out.println("Passou no finally");
			System.gc();
			throw new MyException("Excecao 2");
		}
	}
}

class MyException extends Exception {
	String text;

	MyException(String text) {
		super(text);
		this.text = text;
		System.out.println("Instanciou " + text);
	}

	@Override
	protected void finalize() throws Throwable {
		System.out.println("Passou no finalize de " + text);
		super.finalize();
	}

	@Override
	public String toString() {
		return "Lançou exceção " + text;
	}
}

na verdade vc não precisa do finally

poderia ficar assim

@SuppressWarnings("finally")
private static void opa() throws Exception{   
    try{   
        throw new IllegalArgumentException("opa");   
    }finally{   
        throw new IllegalArgumentException("opa 1");   
    }   
}  

ou sem ele mesmo…

alias veja o super classe Throwable vai ficar na pilha… as Exceptions

/**
 * Record in the receiver a walkback from the point
 * where this message was sent. The message is
 * public so that code which catches a throwable and
 * then <em>re-throws</em> it can adjust the walkback
 * to represent the location where the exception was
 * re-thrown.
 *
 * @return the receiver
 */
public native Throwable fillInStackTrace();

Realmente, o finally é desncessário nesse caso.
Aliás, acho que não é interessante lançar exceções dentro do finally. Acho que fazer isso pode gerar mais problemas do que soluções.
Mas acho que a pergunta do nosso colega é: e se for lançada exceção no finally, o que acontece?

eu tenho a mesma dúvida

pelo teste que fiz, a exceção do finally e lançada e a do bloco try é esquecida e terá que tomar cuidado com o GB, como falou o colega acima

esse foi o código de teste

[code]
public class ExEx {

public static void main(String[] args) {
    System.out.println("inicio");
    try {
        opa();
    } catch (Exception ex) {
        System.out.println("catch main ex retornou: " + ex.getMessage());
    }

}

private static void opa() throws Exception {
    try {
        if (true) {
            System.out.println("dentro try");
            throw new Exception("opa try");
        }

    } /*catch (Exception s) {
    System.out.println("dentro catch");
    }*/finally{
        throw new Exception("finally");
    }

}

}[/code]

Ela vai para zona “Além da imaginação”.