Duvida com Throw

caros,

desculpa minha ignorância mas não entendi por que fica invalido
o codigo abaixo.
Pois estou acostumado a usar throw new FlowException();
em catch …

abs

class Flow {
	    public static void main(String [] args) {
	      try {
	        System.out.print("before ");
	        throw new FlowException();
	        System.out.print("after ");
	      } catch (FlowException fe) {
	        System.out.print("catch ");
	      }
	     System.out.println("done ");
	   }
	 }
	 class FlowException extends Exception { }

O

System.out.print("after ");   

nunca irá ocorrer, então o compilador não deixa que vc faça isso.

Se vc realmente quiser lançar uma exceção aí, faça assim

if (true){
throw new FlowException();   
}

Assim vc “engana” o compilador.

Inválido em que sentido? Que tp de erro está acontecendo?
Se for erro de compilação, nunca testei, mas tenho quase certeza que acontece o que o amigo ChronoTrigger disse: o throw new Exception funciona como um “return” e o código abaixo nunca será acessado…

simples! o compilador, nao vai permitir compilar pq a linha 6 jamais vai acontecer entao ele nao pode deixar algo compilar se ele sabe que isso jamais sera executado nem com reza braba a linha 6 executa…

Sem dizer que o método main deve estar assim:

public static void main(String[] args) throws Exception { //.... }

[quote=marcio_gs]Sem dizer que o método main deve estar assim:

public static void main(String[] args) throws Exception { //.... }[/quote]

Pq? Não precisa não… toda exceção lançada no try vai ser “catcheada” no mesmo bloco. Nenhuma exceção é lançada pro main…

[quote=arec_metafora][quote=marcio_gs]Sem dizer que o método main deve estar assim:

public static void main(String[] args) throws Exception { //.... }[/quote]

Pq? Não precisa não… toda exceção lançada no try vai ser “catcheada” no mesmo bloco. Nenhuma exceção é lançada pro main…[/quote]

Não sabia disso. Na verdade nunca usei ambas juntas, então pensei que necessitava. Interessante saber.

[quote=marcio_gs]Sem dizer que o método main deve estar assim:

public static void main(String[] args) throws Exception { //.... }[/quote]

quando vc trata uma excecao nao é necessario declarar. Observe que se a linha 6 fosse comentada/removida o catch trataria a excecao.