java里有种异常不能被捕获?

Rush_2008 2010-12-24 05:25:15
public class AbmIntfInfMonitorThread extends Thread {
private Logger logger = Logger.getLogger(AbmIntfInfMonitorThread.class);

private static int MONITOR_INTERVAL = ConfigManager.getInstance().getPropertyAsInt("ABMINF_MONITOR_CFG","MONITOR_INTERVAL");


例如这种情况,ConfigManager.getInstance().getPropertyAsInt("ABMINF_MONITOR_CFG","MONITOR_INTERVAL");
这个方法是读取配置文件里的配置项的,但是我的配置文件里没有这个配置项,所以当调用此类的时候就会报错,

java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java(Compiled Code))
at java.lang.Long.parseLong(Long.java(Compiled Code))
at java.lang.Long.parseLong(Long.java(Compiled Code))

但是我方法外只是catch(Exception e),这样好像是抓不到这个异常的,此异常好像是抛给了操作系统。大家看看是这么回事吗?
...全文
682 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
树成 2010-12-25
  • 打赏
  • 举报
回复 1
异常分三种:Exception级别,这属于检查异常,必须要捕获,在编译时就会通知检查捕获。RuntimeException级别,这种属于运行时异常,它是在运行时被虚拟机捕获的异常,不必在代码中显示捕获。Error级别的异常,他属于虚拟机重大故障,不推荐它被捕获,它的出现必须让程序终止,通常它被抛给操作系统,它的出现一般是内存问题或者某种IO调用出现的虚拟机崩溃。
huntor 2010-12-24
  • 打赏
  • 举报
回复
很明显 ConfigManager 写的太渣。
shaosijun2004 2010-12-24
  • 打赏
  • 举报
回复
异常都可以捕获的,只是运行时异常不需要显式抛出,当前线程的catch 只能捕捉当前线程对应try块中抛出的异常
super254 2010-12-24
  • 打赏
  • 举报
回复
你这个AbmIntfInfMonitorThread是在哪里调用的,举个例子啊:比如说你在main方法中启动了一个线程,这个线程中抛出的异常,你在main方法中是无法捕获的,jvm是这样设计的
yaojie_x 2010-12-24
  • 打赏
  • 举报
回复
这种异常应该是继承自RuntimeException(运行时异常),这种异常是非检查异常,在编译时不会检查。但是捕获Exception时,是会捕获到的。检查下你的代码,可能是在某个地方已经处理了,或者是放在try catch块外了
zn85600301 2010-12-24
  • 打赏
  • 举报
回复
不是不能捕获
但是你也应该加上数据格式的判断
dengyulong 2010-12-24
  • 打赏
  • 举报
回复
NumberFormatException 外面用Exception是能捕获的,这很常见,你这多看看你代码 是不是异常处理不对?
Jlins 2010-12-24
  • 打赏
  • 举报
回复
是运行时异常,只有普通的异常才可以手动捕获

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧