gpt4 book ai didi

java - 静态 block 如何传播异常?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:43 25 4
gpt4 key购买 nike

static {
MessageDigest d;
try {
d = java.security.MessageDigest.getInstance("MD80"); <-- MD80 is no valid algorithm
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
hasher = d;
}

JVM会在类加载到JVM时自动执行这些静态初始化语句。这意味着,runtimeexception 异常在加载时被抛出。

现在,如果我运行这样一个类(通过 eclipse),我会在控制台中收到大量源自静态 block 的异常。

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: java.security.NoSuchAlgorithmException: MD8 MessageDigest not available
at BloomFilter.<clinit>(BloomFilter.java:86)
Caused by: java.security.NoSuchAlgorithmException: MD8 MessageDigest not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:142)
at java.security.Security.getImpl(Security.java:659)
at java.security.MessageDigest.getInstance(MessageDigest.java:129)
at BloomFilter.<clinit>(BloomFilter.java:84)

但是,这里有疑问。此异常是在“加载时”抛出的。它在运行时如何显示在控制台中?此异常是否被抛出并存储在“加载”和“运行时”之间的某个位置?

基本上,我想了解一旦在静态 block 中抛出异常,“加载时间和运行时间”之间会发生什么?

最佳答案

没有“加载时间”这样的东西——只有“运行时间”。当 JVM 启动时,它确定它需要加载哪些类;静态初始化在需要时执行;例如在加载类之后。

关于java - 静态 block 如何传播异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28927420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com