Pregunta

Posible duplicado: qué-es-java-lang-throwable-a-clase

Hola! Yo no entiendo por qué no es Throwable clase abstracta. Sólo veo un caso de uso de éstos: en el registro de sistemas para averiguar jerarquía de llamadas. Pero puede haber algún método estático para esta u otra clase. Así que, ¿por qué?)

Gracias.

UPD

desde java.util.logging.LogRecord

// Get the stack trace.
StackTraceElement stack[] = (new Throwable()).getStackTrace();

¿Por qué no puede ser Throwable.getStackTrace(); o como en java.lang.Thread

(new Exception()).getStackTrace();

De esta manera podemos evitar throw new Throwable();

UPD2 de javadoc

  

La clase Throwable es la superclase   de todos los errores y excepciones en el   Lenguaje Java.

Por lo tanto, como una superclase debe ser abstracta, en mi humilde opinión. Usarlo para conseguir StackTrace no es buen caso por esta definición.

¿Fue útil?

Solución

  

No entiende por qué Throwable   No es la clase abstracta.

La respuesta está claramente aquí .

  

¿Por qué no puede ser   Throwable.getStackTrace (); o como en   java.lang.Thread

Sencillamente, el getStackTrace() llama al método getOurStackTrace() que no es estática. Si getStackTrace() era estático, por lo que debe getOurStackTrace(). Esto no ocurrirá como método printStackTrace() utiliza el getOurStackTrace(). Esto se desarrolla en el JavaDoc:

  

Proporciona acceso mediante programación al   información de seguimiento de la pila impresa   printStackTrace ().

Fuente de java.lang.Throwable:

 public StackTraceElement[] getStackTrace() {
        return (StackTraceElement[]) getOurStackTrace().clone();
    }

Además, si usted lee el código del método getOurStackTrace(), verá que llama el método siguiente:

private native int getStackTraceDepth();

Por lo que yo sé, native no puede ser estática (puedo estar equivocado).

Otros consejos

lo uso muy a menudo para el registro, así que estoy contento de que no es abstracta. Hay un método para obtener la pila de llamadas, Thread.currentThread (). GetStackTrace () pero esto devuelve un StackTraceElement [], que no es muy útil para el registro.

EDIT:

StackTraceElement[] stes = Thread.currentThread().getStackTrace();  

Nota:. Este método también funciona para obtener un seguimiento de la pila de otro hilo que puede ser útil

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top