java异常

一、错误分为两种

1.编译型错误,一般都是语法错误,在明处,易解决;

2.运行时错误,就是异常,在暗处,不易找出;

二、什么是异常

程序运行时发生的错误叫异常,异常也是一个类;

异常分为两类:

Error:JVM中遇到的问题,比较严重的系统及问题,例如内存溢出,栈溢出等问题;

Exception:其他因编程错误或偶然的外在因素导致的一般性问题,例如数组下标越界,空指针,网断了;

源头:所有异常的父类是 Throwable;

Throwable的两大子类是Error,Exception;

多种:Exceptiond的几大子类是RunimExcetpion(编译时可以不处理,运行时发生的异常),

ArrayIndexOutofBoundsException,NullPointerException;

ClassCastException,ArithmeticException;

IOException,SQLException;

三、异常的处理

java中处理异常的机制被称为“抓抛模型”;

抓抛模型分为两个动作:

1.抛(throw):由jvm或程序(代码)往外抛出一个异常对象;

2.抓(catch):捕获某种类型的异常并处理;

三个关键字:

1.try{ }:将可能产生异常的代码段封装起来,必须有;

2.catch( ){ }:抓取, 有finally时,可以没有;

3.finally{ }:万金油,报不报错都执行,这一点与switch不同,有catch时,可以没有;

代码:

try{

多行代码

代码1

代码2

代码3

}catch(异常类型 异常对象){

}catch(异常类型 异常对象{

}finally{

}

执行过程:

1.如果try中不产生异常,则正常运行(不执行任何catch块中的代码);

2.如果在try块中产生异常,则整个try块中的代码不再运行,并将产生的异常封装成一个对象,向外抛出;对应的catch可按顺序进行捕获,如果类型匹配则进入catch块处理;

3.如果所有catch均不匹配,则继续向外抛出(try嵌套);如果都不能处理,则程序结束;

注意:

1.一个try块可以对应多个catch,catch是按顺序进行匹配的,如果匹配成功,将不会再继续匹配;

2.多个catch中的异常类型,应该先写子类,再写父类,因为父类包含子类,先写父类一定执行父类,不执行子类;

3.try不能单独,必须有catch或finally;

finally:

finally放在try,catch之后。

finally的作用:只要进入try块,无论是否出现异常,都会执行finally中的代码;

finally中一般编写必须要执行的代码,例如关闭资源;

四、Exception的常用方法

getMessage();//获得异常的信息说明;

printStackTrace();//打印异常的追踪信息,即哪个类,哪个方法,哪行代码产生的什么类型异常;

五、Exception可以分为两类

1.受检查异常:编译时必须处理;

2.运行时异常(RuntimeException的子类):编译时可以不处理;

注意:

1.所有RuntimeException的子类都属于运行时异常;

2.所有非RuntimeException及非RuntimeException子类的异常都是受检查异常;

六、throw与throws

throws:放在方法的定义中,表示此方法可能会产生什么类型的异常;

当调用一个方法时,可能会产生两种情况:

1.成功调用后,会返回一个结果;

2.调用失败后,会抛出一个异常;

方法的定义:

访问修饰符 特征修饰符 返回值类型 方法名(参数)   throws  异常类型  {  方法体; } 

public static double getLength(double radius) throws Exception{  方法体; } 

throw:放在语句中,手动抛出一个异常对象;

throw new 异常();

区别:

1.throws放在方法的定义中,说明此方法可能会产生某种类型的异常;

throws 异常类型;

2.throw表示手动抛出一个异常对象,放在语句中;

throw new 异常() ; 

处理异常的方式

1.主动处理:自己写try代码处理;

2.回避处理:不处理,在定义的方法名后,加throws Exception;

自定义异常

自定义异常类型只需要继承两个类中的一个即可:

1.Exception:受检查;

2.RuntimeException:运行时;

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值