天天看点

对象思维谈JavaOO —— 异常处理

什么是异常呢?

你和你对象正在吃饭,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());
}      
对象思维谈JavaOO —— 异常处理

捕获异常:Exception e -> 异常作为e这个对象打印

e.printStackTrace(); <-以堆栈的方式打印出来

然后,注意了:会继续执行! 然后返回的就是值的初始值!

而众所周知,若不加try-catch,会报错,终止程序。

过程:try:监测“{}”中的代码块是否会出现异常,如果会,就作为 对象捕获,catch后的大括号可以输出异常,如:System.err.println(ex.getMessage());得到Message属性(即:异常信息)

如:

对象思维谈JavaOO —— 异常处理

比如啊,“我不爱你了”,这个异常就被放在这啊:Exception e;

那么,异常处理有什么用?

可以使程序在提示错误的情况下继续运行下去。(但错误值自动执行初始设定值)

n不nb?

异常处理机制

简称:try-catch

try:监控有可能产生异常的语句块。

catch:以合理的方式捕获异常并处理。

finally:不管有无语句,一定会执行的语句块(一般用来释放内存资源等)

throw:手动引发异常。

下面说到的“printStackTrace”——以堆栈的方式打印信息——throws类中定义的方法。

我们说,万物皆对象

对象思维谈JavaOO —— 异常处理

还有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      

继续阅读