什么是异常呢?
你和你对象正在吃饭,ta突然说:“你不爱我了”,哎呀我去,这有点小懵逼啊,你说:“我怎么了,宝贝”,ta说:“你不给我买冰淇淋吃”,或者是:“你不陪我去看电影了”。你在寒风中独自凌乱。。。
“你不爱我了”,怎么回事?关系出现异常了嘛
但是你深爱着ta,你能就这么分手,或者不管不问吗?当然不能,所以你要进行异常处理,
没错。。。
try-catch 处理异常
throw、throws 关键字抛出异常
异常是一种对象,表示阻止程序正常执行的错误或情况。
错误:指 运行时错误(JVM检测出的不可能的操作)
运行时错误:会作为异常(对象)抛出。——>若未被处理,则会非正常终止。
异常处理:使程序可以继续运行或优雅地终止。
方法抛出异常,调用者可以捕获以及处理该异常。
如:
int num1=1,num2=0,result;
try{
result=num1/num2;
}catch(Exception ex){
System.err.println(ex.getMessage());
//记录在日志中
log.log(Level.WARNING,ex.getMessage());
}
捕获异常:Exception e -> 异常作为e这个对象打印
e.printStackTrace(); <-以堆栈的方式打印出来
然后,注意了:会继续执行! 然后返回的就是值的初始值!
而众所周知,若不加try-catch,会报错,终止程序。
过程:try:监测“{}”中的代码块是否会出现异常,如果会,就作为 对象捕获,catch后的大括号可以输出异常,如:System.err.println(ex.getMessage());得到Message属性(即:异常信息)
如:
比如啊,“我不爱你了”,这个异常就被放在这啊:Exception e;
那么,异常处理有什么用?
可以使程序在提示错误的情况下继续运行下去。(但错误值自动执行初始设定值)
n不nb?
异常处理机制
简称:try-catch
try:监控有可能产生异常的语句块。
catch:以合理的方式捕获异常并处理。
finally:不管有无语句,一定会执行的语句块(一般用来释放内存资源等)
throw:手动引发异常。
下面说到的“printStackTrace”——以堆栈的方式打印信息——throws类中定义的方法。
我们说,万物皆对象
还有ArithmeticException(算术计算异常)等,都是常见异常。
必检异常:抛出型异常,必须用try…catch捕获、检测、并且进行处理。
要么谁都不管,继续抛出(main后加:throws IOException)
//NumberFormat Exception (格式转换异常) —— 免检异常
String strvalue="123";
int value1=Intrger.parseInt(strvalue);
System.out.prinfln(value1);
在异常处理中,有这样一句:e.printStackTrace();
作用:将异常对象的堆栈跟踪输出至错误输出流。
堆栈打印
一种先进后出的数据结构(类比:人多时的电梯)
从出现错误的方法开始,从后向前打印方法。
(再说,Scanner输入其实是极度不安全的方法,“安全”要掌握在自己手里)
至此,再说说对异常处理的理解吧:让程序检测出错误的情况下任然运行,并记录错误,便开发者修改!
捕获异常时,一定要“兼容”:要么写对,要么写父类(异常类型)。
回味一下,在有异常处理的存在下,若有步骤发生错误,将会直接跳至try-catch块内捕获,返回异常并记录,使程序继续运行下去。
try-catch-finally:
无论是否发生异常,finally块中的代码总能被执行(除了前面有System.exit();的情况)
使用finally块的场合:若前面开启了相关资源(文件、SQL等),为避免出现资源浪费,就可以使用finally块在执行完毕后强制要求关闭所有打开的资源。
try{
语句 1
2
3
}catch(Exception ex1){
}finally{
语句 4
}
语句 5