异常
来源:互联网 发布:查看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要抛出与业务逻辑有关的异常,需要使用自定义异常类
- 异常
- 异常!
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 异常
- 数据库中视图的作用
- dinic 优化模板 BZOJ 3438 小M的作物 (最小割)
- 448. Find All Numbers Disappeared in an Array
- pvcreate出现错误:Device /dev/sdb1 not found (or ignored by filtering).
- Dynamics CRM plugin调试方法之Profiler
- 异常
- 实现后台管理登陆
- python中event事件应用举例
- jsp内置对象out
- 238. Product of Array Except Self
- 游戏人工智能之有限状态机初探(一)
- centos配置ssh
- POJ 1935 Journey 笔记
- mac下WebStrom + node.js +jdk环境变量配置