异常

来源:互联网 发布:查看linux snmp信息 编辑:程序博客网 时间:2024/06/05 02:09

异常

异常的概念

异常是不正常的事件,不是错误。

异常是指程序运行的过程中,发生某些以外的事情,比如->10/0,文件不存在等。

例子:

public class ExcptionTest{

int a=10/0;

System.out.println(a);

}

}

运行结果:

Exception in thread “main” java.lang.ArithmeticException: / by zero at Agesr.main(ExcptionTest.java:4)

错误

错误是很难处理的,比如内纯溢出等,不能狗通过异常处理来解决。

异常是程序中发生的不正常事件流,通过处理程序依然可以运行下去,但是错误是无法控制的,程序肯定要中断。

API中异常结构和常见异常系

异常体系

Throwable类有两个直接子类:Exception类,Error类。

Error表示错误,可能是编译器错误或者系统错误,汪汪程序中并不处理。

Exception表示异常,是所有异常类的父类。

异常分为编译器异常和运行期异常

运行期异常:程序运行是抛出的异常,所有RuntimeException的子类都是运行期异常。

检测异常(CheckedException):除去运行期的异常都是检测异常

区别

运行期异常(也成为uncheckedException)

编译器不强制处理的异常,在运行期才处理的以上,一般因为程序中有错误,需要修改。

编译期异常

程序正确,但因为外在的环境条件不满足引发异常。

编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。

要捕获编译期异常,一定是try块中显示抛出了该异常。

TRY CATCH FINALLY的使用

try

检测不安全的代码块,try块中任何一条语句发生异常,下面的代码将不会被执行,程序将跳转到异常处理代码块中,即catch块。

try{可能发生异常的代码}

catch

把抓到的类型匹配的异常捕获,保证程序能继续运行下去。

catch语句必须紧跟try语句之后,称为捕获异常,也就是异常处理函数,一个try后面可以写多个catch,分别捕获不同类型的异常,要从子类往父类的顺序写,否则有编译错误。

catch(异常类型 引用名){异常处理代码}

finally

finally该内容总是会执行,只能有一个finally语句

finally{必须执行的逻辑}

基本语法

try{可能会发生异常的代码

}catch(异常类型 引用名){}

try{可能会发生异常的代码

}catch(异常类型 引用名){

}finally{

必须执行代码

}

finally与return

因为finally子句总会执行,所以在一个方法中使用,可以从个多点返回,而且可以保证重要的清理工作仍旧会执行。

在try中没有异常的情况下try、catch、finally,的执行顺序try——catch——finally。

如果try中有异常,执行顺序是try——catch——finally。

如果try中没有异常并且try中有returen这时候正常执行顺序是try——cathc——finlly——return。

总之finally永远执行(不会执行finally的情况:System.exit(0);

注:catch CheckendException时,try块中不许纯在可能引发该异常的代码,否则编译错误,如果catch或者finally块中存在异常,则需要再次处理。

层层抛出异常

throw、throws

-关键字thorw用于抛出异常,抛出异常后处理。(使用try-catch捕获异常)或者(使用throws声明异常)

语法

·throw new异常类构造方法;

·thorw new Exception();

利用抛出的异常来标记不成长的事件,从而对事件流统一处理

throws

—用于方法上,支出方法应发的异常。

可以声明多种异常类型,用逗号分开。

—示例

public void test throws 异常1,异常2,异常3{

}

注:任何方法都可以使用throws,子类覆盖父类,子类不能声明抛出父类范围更大的异常方法

所谓层层抛出异常

就是catch中,再次用throw抛出异常

层层抛出异常例子

public class ThrowTest{

public static void test1(boolean isThrow)throws Exception{

System.out.println(“进入test1()…….”);

try{

if(isThrow){

throw new Exception(); //这里会抛出异常

}

}catch(Exception e){

System.out.println(“异常,继续抛出”);

throw e; //e等于new Exception();

}

System.put.println(“正常运行”);

}

public static void mian(String[] args){

try{

test1(true);

}catch (Exception e){

System.out,println(“出错”);

}

}

}

总结

—throw用于方法体中,用来抛出一个实际的异常对象,使用throw后,要么使用try catch捕获异常,要么使用throws声明异常。

—throws用于方法声明,用来声明该方法可能发生的异常类型,可以是多个异常类型,用来强制调用该方法时处理这些异常。

—抽象方法可以使用throws,所以说并不是有throw才有thorws。

—如果使用throw关键字抛出异常,一定不要使用Exception,不能很好标记异常类型。

—如果throw要抛出与业务逻辑有关的异常,需要使用自定义异常类

原创粉丝点击