2012-10-11 29 views
5

He buscado algunas respuestas, pero no pude encontrar & por lo tanto, estoy planteando esto como una nueva pregunta. El método de captura en el try-catch. ¿Es un método? , Toma un objeto de tipo Excepción como argumento. Pero si es un método,¿Es catch un método en java?

  1. ¿Quién llama a este método y por qué objeto se llama este método?

  2. No se puede escribir una definición de método dentro de otra definición de método normalmente. Así que si es un método, ¿cómo puedo escribir la captura dentro de otro método?

  3. Si no es un método, ¿qué es?

    public void foo() { 
    
        try { ; 
    
        } catch (Exception ex) { 
    
          ; // this is catch method body 
         } 
    
    } 
    

El código anterior significa cuerpo del método de captura está dentro de otro método foo ('s) cuerpo.

Respuesta

11

No, es una construcción Java especial que denota un bloque de código que se ejecutará si se captura un Exception, no es un método. Ese bloque de código toma un parámetro (de géneros), que es la excepción para atrapar y luego tratar, pero esto no lo convierte en un método.

Como se señaló en el comentario, que es similar a, por ejemplo, una sentencia if (También se puede ver como teniendo un "parámetro", que es una expresión booleana, pero del mismo modo que esto no es un método bien.)

+0

es eso 'ex' (en este caso) una variable local? o un parámetro? –

+0

@YoushaAleayoub Puede verlo conceptualmente como un (tipo de) parámetro, aunque hay algunas diferencias. – berry120

5

es una construcción de lenguaje similar a if o while o para

0

La captura no es un método. El bloque try-catch es similar al bloque do-while.

do{ 
    statements; 
} while (condition); 

Cada bloque catch es un manejador de excepciones y maneja el tipo de excepción indicada por su argumento.

2

¿Quién llama a este método y por qué objeto se llama este método?

La JVM realiza que si se produce la excepción especificada o una excepción derivada. Sin llamadas.

No se puede escribir una definición de método dentro de otra definición de método normalmente.

No puede hacerlo en absoluto, excepto escribiendo una clase anónima, pero esa es otra historia.

Por lo tanto si se trata de un método

No lo es.

¿cómo puedo escribir la captura dentro de otro método?

Porque no es un método.

Si no es un método, ¿qué es?

Es una construcción de lenguaje, al igual que try, do, while, for, switch, case, class, interface, ... are.

El código anterior significa que el cuerpo del método catch está dentro del cuerpo de otro método foo().

No, no, porque no es un método.

Seguramente todas estas autocontradicciones hacen evidente que no es un método.

+0

¿Es eso 'ex' (en este caso) una variable local? o un parámetro? –

+1

@YoushaAleayoub Consulte [JLS # 14.20] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20) citado en [otra respuesta] (http://stackoverflow.com/a/12836436/207421). – EJP

1

Es un bloque como if, while que acepta solo un parámetro que se llama exception parameter.

De JLS #14.20. The try statement

Una declaración try ejecuta un bloque. Si se arroja un valor y la instrucción try tiene una o más cláusulas catch que pueden atraparla, el control se transferirá a la primera cláusula de este tipo catch. Si la instrucción try tiene una cláusula finally, se ejecuta otro bloque de código, sin importar si el bloque try se completa de forma normal o abrupta, y no importa si se da control por primera vez a una cláusula catch.

Una cláusula catch tiene exactamente un parámetro, que se llama exception parameter.

CatchClause: 
    catch (CatchFormalParameter) Block 
Cuestiones relacionadas