在某些特殊的情况,可能需要阻止System.exit(int)
的调用,比如说防止某些依赖的第三方库调用这个API导致整个应用都退出。
使用SecurityManager可以在调用System.exit(int)
之前进行检查,如果不满足可以抛出异常来防止应用退出。
1class MySecurityManager extends SecurityManager {
2
3 @Override
4 public void checkExit(int status) {
5 if (!shouldExit()) {
6 throw new SecurityException();
7 }
8 }
9
10 private boolean shouldExit() {
11 ...
12 }
13}
14
15System.setSecurityManager(new MySecurityManager());
如果程序中调用了System.exit(int)
,就会执行到MySecurityManager.checkExit(int)
方法,在这里可以进行一些判断,如果不符合退出条件就抛出SecurityException异常,这样在System.exit(int)
的调用处就会接收到SecurityException异常,而不是退出应用。
内容