Java基础系列—异常
一、Java异常
异常的类图

Error
1、 Error为严重性问题,总是不可控制的(unchecked)。
2、 经常用来表示系统错误或者底层资源错误。
3、 如果可能的话,应该在系统级被处理。
Exception
1、Checked Exception(编译时异常):不是RuntimeException的所有异常。必须处理,因为不处理的话,编译无法通过。
2、Uncheck Exception(运行时异常):RuntimeException及其子类的异常。可以处理,也可以不处理。
出现这类问题一般都是代码不够严谨所导致的。如果不处理,并且运行时出现问题的话,最终由JVM做默认处理。
把异常的名称、原因及出现的问题等输出到控制台,并且结束程序运行(不在运行剩余的代码)。
二、处理异常
处理异常有两种方法
1、try……catch……finally
2、throws抛出
try-catch格式
1、
try {
可能出现问题的代码;
} catch (异常名 变量){
针对问题的处理;
} finally {
释放资源;
}
2、
try {
可能出现问题的代码;
} catch (异常名 变量){
针对问题的处理;
}
注意事项-try-catch
1、try里面的代码越少越好,因为try里面的代码都要走异常处理机制,代码越少效率越高。
2、catch里面必须有内容,哪怕只是一个简单的提示。如果没有提示的话,出现异常就会被异常,无从察觉。
异常处理方式
1、 一个异常,写一个try…catch。
2、 两个异常
1)写两个try…catch。
2)写一个try,多个catch。
try {
可能出现问题的代码;
} catch (异常名1 变量){
针对问题的处理;
} catch (异常名2 变量){
针对问题的处理;
}
注意事项-处理多异常
1、 能明确的异常尽量用明确的异常,不要用父类。
2、 平级的异常,无论谁先谁后都没关系。如果出现父子类异常,则子类在前父类在后。
3、 一旦try里面的代码出现问题,jvm就会生成一个异常对象,然后把对象抛出去和catch里面的类进行匹配,
如果该对象是属于某个类的,就会执行catch里面的处理信息。一旦有匹配的,就执行catch里面的代码处理,然后try-catch结束。继续执行后面的代码。
4、try-catch的e.printStackTrace的错误提示虽然与系统默认的一样,但是有try-catch的话遇到错误后面的代码仍然运行。
JDK7异常处理方案
try {
可能出现问题的代码;
} catch (异常名1 |异常名2|… 变量){
针对问题的处理;
}
注意事项-JDK7异常处理缺陷
1、 处理方式一致。
2、 多个异常必须是平级关系,不能有子父类关系。
throws
1、有些时候,我们能对异常进行处理,但是有些时候,我们根本不能处理。这时候就需要抛出异常throws。
2、编译期异常抛出,将来调用者必须处理,即try-catch
3、运行期异常抛出,将来调用可以不用处理。
throws与throw的区别
throws:
1、用在方法声明后面,跟的是异常名。
2、可以跟多个异常类名,用逗号隔开。
3、表示抛出异常,由该方法的调用者来处理。
4、throws表示出现异常的一种可能性,并不一定会发生这些异常。
throw:
1、 用在方法体内,跟的是异常对象名。
2、 只能抛出一个异常对象名。
3、 表示抛出异常,由方法体内的语句处理。
4、 throw则是抛出了异常,执行throw则一定抛出了某种异常。
throws与try-catch的区别
1、 后续程序需要继续运行就try-catch。
2、 后续程序不需要继续运行就throws。
3、 可以解决的问题用try-catch,不可以解决的问题用throws,特别严重的问题用Error。
finally
1、如果在执行到finally之前jvm退出了,就不能执行了。
2、finally语句块一定会执行。
3、finally必须与try连用。
4、catch里面有return语句时,finally代码也会执行,是在return语句之前执行。
例如:
Main(){
int i = getInt();//5
println(i); //i=50
}
public int getInt(){
int a = 10 ,b = 0;
int d = 20;
try{
int c = a / b;
d = 30;
}catch(Exception e){
d = 40; //1
return d; //2 时形成的返回路径为return 40 //4
}finally{
d = 50; //3
}
return 1; //不执行
}
final,finally和finally的区别
final:
1、最终的意思,可以修饰类,成员变量,成员方法。
2、修饰类,类不能被继承。
3、修饰变量,变量是常量。
4、修饰方法,方法不能被重写。
finally:
1、是异常处理的一部分,用于释放资源。
2、一般情况,代码肯定会被执行。
3、特殊情况:在执行到finally之前jvm退出了就不会执行。
finalize:
1、是Object类的一个方法,用于垃圾回收。
欢迎关注个人公众号,可直接扫描以下二维码或微信搜索“阿毛聊技术”。


浙公网安备 33010602011771号