Bạn có thể làm điều này nhưng bạn cần phải thoát khỏi khối tĩnh bằng cách ném một ngoại lệ - bạn có thể tính lại ngoại lệ đã bị bắt hoặc một ngoại lệ mới. Nói chung ngoại lệ này phải là RuntimeException
. Bạn thực sự không nên nắm bắt một số chung Exception
nhưng ngoại lệ cụ thể hơn có thể được ném từ bên trong khối try
của bạn. Cuối cùng, nếu một bộ khởi tạo tĩnh ném một ngoại lệ thì nó sẽ làm cho lớp không sử dụng được trong suốt quá trình chạy cụ thể đó vì JVM sẽ chỉ cố gắng khởi tạo lớp của bạn một lần. Các nỗ lực tiếp theo để sử dụng lớp này sẽ dẫn đến một ngoại lệ khác, chẳng hạn như NoClassDefFoundError
.
Vì vậy, để làm việc, khởi tạo bạn nên đọc một cái gì đó như thế này:
static {
try {
...
} catch (Exception e) {
e.PrintStackTrace();
throw new InitializationFailedException("Could not init class.", e);
}
}
Giả sử rằng InitializationFailedException
là một phong tục RuntimeException
, nhưng bạn có thể sử dụng hiện có.
Nguồn
2010-02-26 07:02:04
Tôi có thể ném ngoại lệ từ 'khối khởi tạo tĩnh'. Tôi có thể làm gì khi một mã trong 'khối khởi tạo tĩnh 'ném một số ngoại lệ mà tôi không muốn xử lý. –
bạn có thể khởi tạo các biến bên ngoài khối try catch, ví dụ: làm ngoại lệ ném mã trong cố gắng nắm bắt và khởi tạo trong cuối cùng ... – awk
@ Hawk: ông sẽ cần phải sử dụng người dân địa phương để làm nhiệm vụ nếu mã ném ngoại lệ là getString (...) gọi phương thức. –