异常是不正常的事件,不是错误。
异常是指程序运行的过程中,发生某些以外的事情,比如->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)
错误是很难处理的,比如内纯溢出等,不能狗通过异常处理来解决。
异常是程序中发生的不正常事件流,通过处理程序依然可以运行下去,但是错误是无法控制的,程序肯定要中断。
Throwable类有两个直接子类:Exception类,Error类。
Error表示错误,可能是编译器错误或者系统错误,汪汪程序中并不处理。
Exception表示异常,是所有异常类的父类。
编译器不强制处理的异常,在运行期才处理的以上,一般因为程序中有错误,需要修改。
程序正确,但因为外在的环境条件不满足引发异常。
编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。
要捕获编译期异常,一定是try块中显示抛出了该异常。
检测不安全的代码块,try块中任何一条语句发生异常,下面的代码将不会被执行,程序将跳转到异常处理代码块中,即catch块。
try{可能发生异常的代码}
把抓到的类型匹配的异常捕获,保证程序能继续运行下去。
catch语句必须紧跟try语句之后,称为捕获异常,也就是异常处理函数,一个try后面可以写多个catch,分别捕获不同类型的异常,要从子类往父类的顺序写,否则有编译错误。
catch(异常类型 引用名){异常处理代码}
finally该内容总是会执行,只能有一个finally语句
finally{必须执行的逻辑}
try{可能会发生异常的代码
}catch(异常类型 引用名){}
try{可能会发生异常的代码
}catch(异常类型 引用名){
}finally{
必须执行代码
}
因为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块中存在异常,则需要再次处理。
-关键字thorw用于抛出异常,抛出异常后处理。(使用try-catch捕获异常)或者(使用throws声明异常)
·throw new异常类构造方法;
·thorw new Exception();
利用抛出的异常来标记不成长的事件,从而对事件流统一处理
—用于方法上,支出方法应发的异常。
可以声明多种异常类型,用逗号分开。
public void test throws 异常1,异常2,异常3{
}
就是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要抛出与业务逻辑有关的异常,需要使用自定义异常类