一、异常的概念与原理
1.什么是异常
2.Java中处理异常的手段
try:监控有可能产生异常的语句块;
catch:以合理的方式捕获并处理异常;
finally:不管有无异常,都一定会执行的语句块(一般用来释放资源等);
throw:手动抛出异常;
throws:指定由方法引发的异常。
finally的使用
package exception;
public class Finally {
public static int method(){
try{
int a = 100;
int b = 1;
int c = a / b;
return c;
}catch(Exception e){
System.out.println("发生异常啦。。。。");
}finally{
return 999;
}
}
public static void main(String[] args) {
int result = method();
System.out.println("结果是:" + result);
}
}
运行结果:
3.错误(Error)
Java程序编译和运行时所发生的问题有两大类:
(1)错误(Error):JVM系统内部错误或资源耗尽等严重情况--属于JVM需要负担的责任,如JVM的内存不足,则会导致JVM报错。
(2)异常(Exception):其他因编程错误或偶然的外在因素导致的一般性问题。
注意:程序员通常只能处理异常(Exception),而对错误(Error)无能为力。
4.异常处理机制的原理
Java程序在执行的过程中如果出现异常,会自动生成一个异常类对象,该异常对象将被自动提交给JVM(在程序没有显示处理的情况下),这个过程称为抛出(throw)异常。
二、异常的分类
Execption与RuntimeException的区别:
Exception在程序中是必须要进行处理;
RuntimeException可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。
三、处理异常的方法
使用try-catch块捕获异常,catch块可以有多个
public void method(){
try{
//代码块(此处可能产生异常)
}catch(异常类型 ex){
//对异常进行处理的代码段
}
//代码段
}
try-catch-finally
在try-catch块后加入finally块
finally块无论是否发生异常都执行
不执行的唯一情况:遇到System.exit(0)语句时不执行
多重catck块
引发多种类型的异常:
排列catch块语句的顺序:先子类后父类
发生异常时按顺序逐个匹配,并且只执行第一个与异常类型匹配的catch语句
public void method(){
try{
//代码段
//产生异常(异常类型2)
}catch(异常类型1 ex){
//对异常进行处理的代码段
}catch(异常类型2 ex){
//对异常进行处理的代码段
}catch(异常类型3 ex){
//对异常进行处理的代码段
}
//代码段
}
try...finally
public void method(){
try{
//代码段1
//产生异常的代码段2
}finally{
//代码段3
}
}
throw与throws的区别
1.throw用来手动抛出异常对象。
2.throws用于方法声明处,用于抛出该方法体内部可能发生的异常类型,一旦在方法声明处通过throws抛出某种类型的异常,则在该方法体内部就不用处理该类型的异常,交给方法调用处处理该类型的异常。