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), я получаю поток исключений, исходящих из статических блоков в консоли.
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)
Но, вот сомнение. Это исключение было выбрано в «время загрузки». Как это отображалось во время работы в консоли? Было ли это исключение брошено и хранилось где-то между «загрузкой» и «временем выполнения»?
В основном я ищу, чтобы понять, что происходит между «временем загрузки и временем выполнения», когда исключение было выбрано в статическом блоке?
Нет «времени загрузки». Классы загружаются и инициализируются, лениво, во время выполнения. –
Я ценю быстрое возвращение :-) – GhostCat