J'ai écrit le code suivant que "de nouvelles exceptions à l'avance et les réutiliser".
package exceptiontest;
public class ExceptionTest {
//Générez une exception ici.
private static final RuntimeException _e = new RuntimeException("hello"); // line: 6
public static void main(String[] args) {
//Il est ici pour lancer réellement.
throw _e; // line: 10
}
}
Le résultat est ...
Exception in thread "main" java.lang.RuntimeException: hello
at exceptiontest.ExceptionTest.<clinit>(ExceptionTest.java:6)
Java semble déterminer StackTrace lorsqu'il crée une instance d'Exception.
Avec python, StackTrace apparaît lorsque vous faites
lever '' (lancer ''), donc je l'ai écrit avec le même sentiment.
Par exemple, même si vous réécrivez le code comme suit ...
package exceptiontest;
public class ExceptionTest {
//Générez une exception ici.
private static final RuntimeException _e = new RuntimeException("hello"); // line: 6
private static void f1() {
f2();
}
private static void f2() {
throw _e;
}
public static void main(String[] args) {
// main() --> f1() --> f2() --> throw _e
f1();
}
}
Vous verrez un StackTrace sur la ligne 6 qui est toujours nouveau dans Exception.
Exception in thread "main" java.lang.RuntimeException: hello
at exceptiontest.ExceptionTest.<clinit>(ExceptionTest.java:6)
<clinit> '' est un initialiseur statique pour une classe. Puisque la variable_eest déclarée comme un élémentstatiquede la classe, le StackTrace sera déterminé lorsque la classe `ʻExceptionTestest chargée.
Cela fonctionne comme prévu (?).
_e = Exception('hello')
def f1():
raise _e
if __name__ == '__main__':
f1()
Traceback (most recent call last):
File "/Users/username/Documents/workspace/raisetest/main.py", line 7, in <module>
f1()
File "/Users/username/Documents/workspace/raisetest/main.py", line 4, in f1
raise _e
Exception: hello
Recommended Posts