No Java, quando as declarações de retorno e, finalmente, contêm declarações de retorno, qual é a situação de execução? Agora vamos explicar com o seguinte exemplo:
O primeiro caso: a tentativa contém a declaração de retorno e, finalmente, não a contém.
classe pública Testtry {String estática S = ""; {System.out.println ("tente ......");Aqui, definimos uma string s, atribua "A" a S em Try e retorne diretamente e atribua "B" a S Finalmente. Abaixo estão os resultados da execução
tente ..... 17 b 8 a
Descobrimos que o resultado final é A, mas B é impresso com prioridade sobre um. Através da depuração de depuração a passo, descobrimos que, antes de executar o retorno na tentativa, o código finalmente será executado e, em seguida, a instrução Return será executada. Se a declaração de retorno estiver finalmente incluída, o que acontecerá?
O segundo caso: tente e finalmente conter declarações de retorno.
classe pública Testtry {String estática S = ""; {System.out.println ("tente ......");Que tipo de resultado ocorrerá se s = "b"; A string é a ou b?
tente ..... 8 b
Descobrimos que o resultado final da impressão é b.
Sabemos que a declaração de retorno é usada em um determinado método. , que é usado para encerrar o método neste momento.
public static int print () {int c = 1; (Exceção e) {E.PrintStackTrace (); c; // --------- 2} // retorna c;O resultado da execução do programa é:
correr:
Tente execução ...
Finalmente executando ...
3
Construído com sucesso (tempo total: 0 segundos)
Observe que só pode haver uma declaração de retorno nas posições 2 e 3, e deve haver uma declaração de retorno em 2, 3 e 4. Se 2 for executado, o método terminará e a instrução em 3 não poderá ser executada.
Quando o bloco de instrução Try é executado em 1, o valor de retorno da função será armazenado em outra variável temporária (diferentes variáveis de C, seu valor é 102). Outro bloco de instrução é encontrado em 2 e o valor de retorno é armazenado na variável temporária (o valor é 3).
public static int print () {int c = 1; -1} finalmente {c ++;No código acima, não há declaração de devolução no bloco de declaração finalmente.
Run: TryFinally102 Construído com sucesso (tempo total: 0 segundos)
Conclusão: 1. Independentemente de haver uma declaração de retorno na tentativa, a declaração finalmente será definitivamente executada (é finalmente e o nome é bom).
2. Se não houver declaração de retorno finalmente e houver um retorno em tentativa, antes de executar a instrução Return in Try, o código finalmente será executado primeiro e, em seguida, a declaração de devolução na tentativa; Incluído em finalmente, ele retornará diretamente e não executará mais a instrução Retorno na tentativa.