Java 异常处理笔记
发布日期:2021-08-26 15:47:25 浏览次数:9 分类:技术文章

本文共 4106 字,大约阅读时间需要 13 分钟。

Java程序运行过程中所发生的异常事件可分为两类:

§错误( Error):JVM系统内部错误、资源耗尽等严重情况
§违例( Exception): 其它因编程错误或偶然的外在因素导致的一般性问题,例如:
    –对负数开平方根
    –空指针访问
    –试图读取不存在的文件
    –网络连接中断
例:
public class ExceptionTest01{           public static void main(String[] args) {          String friends[]={"lisa","bily","kessy"};          for(int i=0;i<5;i++)  {                   System.out.println(friends[i]);             }        System.out.println("\nthis is the end");      }}

public class ExceptionTest02 {          public static void main(String[] args){          String user[] = {"lilei","lucy","lisa"};          try{              for(int i=0; i<5; i++) {                  System.out.println(user[i]);              }                            }catch(java.lang.ArrayIndexOutOfBoundsException  e){                      System.out.println("异常:" + e.getMessage());              }                                            System.out.println("程序结束!");          }    }

 

 

 

 

异常处理块的一般形式

try{      // 要监控错误的代码块    methodGeneratingException();} catch (Exception e) {     // Exception e 的异常处理程序} finally{     // 在 try 结束前要执行的代码块   cleanup();}

 

•Throwable 具有两个子类,它们是
–Exception:处理用户程序应当捕获的异常情况
–Error:Error 类的异常为内部错误,因此在正常情况下不期望用户的程序捕获它们 

常见  异常类 

§RuntimeException
–错误的类型转换
–数组下标越界
–空指针访问
§IOExeption
–从一个不存在的文件中读取数据
–越过文件结尾继续读取
–连接一个不存在的URL

 

捕获异常

  捕获异常是通过try-catch-finally语句实现的。

 

try{  ......  //可能产生异常的代码}catch( ExceptionName1 e ){  ......  //当产生ExceptionName1型异常时的处置措施}catch( ExceptionName2 e ){......    //当产生ExceptionName2型异常时的处置措施}  {
finally{...... //无条件执行的语句 } }

 

§try

  捕获异常的第一步是用try{…}语句块选定捕获异常的范围。

§catch

  在catch语句块中是对异常对象进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。与其它对象一样,可以访问一个异常对象的成员变量或调用它的方法。

– getMessage( ) 方法,用来得到有关异常事件的信息
– printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容。
当使用多重catch的时候  越外面的 级别越高 
如:
try { …… }    catch(ClassCastException ex){ …… }    catch(NumberFormatException ex){ …… }    catch(Exception ex){ …… }  // 此句必须放在最后!

 

 
§finally
–捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。
–finally语句是任选的
 
try {        startFaucet();        waterLawn();     }  catch (BrokenPipeException e){        logProblem();        }    finally {        stopFaucet();        }

 

 声明抛弃异常

§声明抛弃异常是Java中处理异常的第二种方式
–如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应声明抛弃异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理
public void readFile(String file)     throws IOException {        ……        // 读文件的操作可能产生IOException类型的异常        FileInputStream fis = new FileInputStream(file);         ..……     }

 

重写方法声明抛弃异常原则

•重写方法不能抛出比被重写方法范围更大的异常类型
public class A {     public void methodA() throws IOException {           ……     }    }    public class B1 extends TestA {     public void methodA() throws FileNotFoundException {           ……     }    }    public class B2 extends TestA {     public void methodA() throws Exception {             ……        }    }

人工抛出异常

§Java异常类对象除在程序执行过程中出现异常时
由系统自动生成并抛出,也可根据需
要人工创建并抛出
–首先要生成异常对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。

IOException e =new IOException();

throw e;

–可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:

            throw new String("want to throw");

 

•用户自定义异常类MyException,用于描述数据取值范围错误信息:
class MyException extends Exception {       private int idnumber;     public MyException(String message, int id) {        super(message);        this.idnumber = id;     }     public int getId() {        return idnumber;     }}

 用户自定义异常类

public class ExceptionTest05{        public void regist(int num) throws MyException {     if (num < 0) {               throw new MyException("人数为负值,不合理",3);         }    System.out.println("登记人数" + num);        }        public void manager() {     try {               regist(100);     } catch (MyException e) {                System.out.print("登记失败,出错种类"+e.getId()));             }    System.out.print("本次登记操作结束");       }       public static void main(String args[]){     ExceptionTest05 t = new ExceptionTest05();    t.manager();       }}

 

 

•异常是运行时发生的错误
•可以使用 try、catch、throw、throws 和 finally 来管理 Java 异常处理。要监控的程序语句包含在 try 块内catch 块中的代码用于捕获和处理异常。在方法返回之前绝对必须执行的代码应放置在 finally 块中
•要手动引发异常,使用关键字 throw。任何被抛到方法外部的异常都必须用 throws 子句指定
•多重catch 和嵌套try-catch的使用
•自定义异常的编写和使用

转载地址:https://blog.csdn.net/weixin_33890499/article/details/90657712 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ORACLE会话连接进程三者总结
下一篇:App乱世,3721离我们有多远

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月02日 09时40分46秒