posts - 11, comments - 29, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 ::  :: 聚合  :: 管理

Java 异常处理

Posted on 2005-10-13 14:15 -=Kinohl=- 阅读(557) 评论(0)  编辑  收藏 所属分类: 编程语言
Java异常处理机制


keywords:

Exception,Method Inovation Stack,

难度:初学,易



异常类的继承
Java异常是java程序运行时遇到非正常情况而创建的一种对象,她包装了异常的信息。
Java异常的顶级类就是java.lang.Throwable。其结构如下:

JavaExceptionClass
其中

Error ---- JVM的错误,也就是程序本身无法恢复的严重错误。

Exception--被程序捕获并处理的异常。



JVM的方法调用堆栈
大家对于Debug都很喜欢,因为每当有异常出现的时候,她会告诉你哪里出了异常调用到底是什么。这又是如何实现的?

在JVM中使用了Method Inovation Stack机制来跟踪每一个线程中一系列的方法调用过程。并保存在Stack里边。
Stack的顶端也就是当前正在处理的方法。在Debug的时候,JVM会暂停被debug的线程,克隆她的Stack,然后显示出来供

developer操作,这一点用Eclipse的人很有体验吧。



一旦异常发生,JVM首先从当前的方法开始寻找处理的try/Catch,找不到,就回朔到stack的下一个,也就是parent调用

方法。举例如下:

public void child(int a)throws UserException{
  
if (a < 0
     
throw new UserException();
}


父方法如下:

public void parent(int a){
  
try{
      a 
= 1;
      method(a);
//throw Exception
  }
catch(UserException ue){
      System.out.println(
"I get it from Child")!
      ue.printExceptionStack();
  }

}


就这样,异常被抓住了。当然,如果在child方法里边就捕获,parent就不用这么“累”了。

其实最累的还是JVM,她要对异常捕获进行查找,如果一直都找不到,就把异常直接抛给用户,那么在终端上就能看

到了。如果是抛出异常的程序是主程,还没有被捕获,那就“死翘翘”了。要注意!



异常处理对性能的影响

从上边的原理就能知道,不捕捉异常、捕捉异常的位置不合适、都会导致JVM性能降低。



(PS:先记到这里,继续上班。)










只有注册用户登录后才能发表评论。


网站导航: