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ément
statiquede la classe, le StackTrace sera déterminé lorsque la classe `ʻExceptionTest
est 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