java异常分析(一)

  
   

    程序的运行过程当中会遇到一些问题,而这些问题不是仅仅依靠代码就能避免的,比如客户输入数据的格式,读取文件是否存在,网络是否保持通畅等问题。

    异常:将程序执行过程中发生的不正常情况叫异常。(程序设计过程中的语法错误和逻辑错误不是异常)。

    举例分析:“在使用File类的方法时,如创建文件时可能会出现一种情况:要创建的文件指向了U盘中一个路径,当程序运行时,有人将U盘拔掉了!这时我们的程序执行就会出错,即抛出异常。异常情况是指程序在运行时,可能由与外部系统的条件变更(与我们一厢情愿所设想的不一设)而导致程序可能会出错的情况,如我们的代码要连结数据库,但数据库未启动,要创建目录,操作系统上却己存在同名的真实文件;即所谓异常是指可能(仅是可能)由与外部系统的,导致程序可能出错(中断运行)的原因。”

    java程序在执行过程中可能发生的异常事件可以分两类:
   (1)Error:java虚拟机无法解决的严重问题。如JVM系统内部错误,资源耗尽(栈溢出,堆溢出)等问题。程序中不处理。
   (2)Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以由程序员使用针对性的代码进行处理。如:空指针访问,读取的文件不存在,网络不畅通等问题。要求在程序设计时,考虑对这些异常的处理。

    Exception也可以分为两类:

 编译时异常(执行javac.exe命令时出现异常)
 运行时异常(执行java.exe命令时出现异常)
 
     注意:当程序执行时,如果出现异常,那么异常后面的程序不再执行。



     异常处理方式(抓抛模型):

 1.“抛”:当执行代码时,一旦出现异常,就会在代码处生成一个异常类的对象,并将此对象抛出;
  抛出异常对象后,程序终止执行;
  此异常类对象抛给方法调用者-最终抛给Java虚拟机(自动抛出  手动抛出);
  2.“抓”:抓住上一步抛出来的异常类的对象,如何抓?即为异常处理方式,java提供了两种异常的处理方法。
 
  异常处理方式一:
  try{
     //可能出现异常的代码
  }catch(Exception1 e1){//此处即为“抓”
     //处理方法1
  }catch(Exception2 e2){
     //处理方法2
  }finally{
     //一定要执行的代码
  }
  注意:
  (1)try内声明的变量是局部变量,只能在try语句中使用
  (2)finally是可选的
  (3)catch语句内部是对异常对象的处理(两种默认结构:getMessage()和printStackTrace());
  (4)可以有多个catch语句,try语句中抛出的异常类对象由上至下的匹配catch语句中异常类的类型,
  一旦匹配,就执行catch语句中代码,执行完后,跳出后面所有catch语句。
  (5)处理完异常后,其后的代码可以继续执行。
  (6)当try语句中抛出多个异常时,要有多个catch语句分别抓取异常对象,如果异常类型为并列关系,catch语句顺序可以不考虑,如果为继承关系,将子类放在父类上面,否则报错。
  (7)finally语句中存放的是一定会被执行的代码,不管try,catch中是否仍有异常未被处理,以及是否有return语句。
  (8)try-catch语句是可以嵌套的。
 
  ps:对运行时异常来说,可以不进行显式示处理。
     对编译时异常来说,必须要显式示处理。

异常处理方式二:
  在方法的声名处,显示的抛出该异常对象的类型。
  格式: (例子)public void method2() throws FileNotFoundException,IOException{};
  当此方法内部出现异常的时候,会抛出异常类的对象,给方法的调用者。
  异常类的对象可以逐层向上抛出,直至抛给java虚拟机,过程当中可以用try-catch-finally语句解决。
 


 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章