java异常处理
java异常处理机制优势之一是可以将异常情况在方法调用中进行传递,通过传递可以将异常情况传递到合适的位置进行处理。
异常分类
异常结构图:
异常的注意点:
1、继承与Exception类的异常类,除了RuntimeException及其子类,都是可检查异常(非运行时异常)
2、可检测异常必须进行处理,否则编译不通过,运行时异常会通过编译,但在程序运行时会报异常
3、运行时异常一般由程序逻辑错误引起的,尽可能避免它
系统错误–Error:
Error类及其子类都是通常用来描述Java运行系统中内部错误,一般不可修复
异常–Exception:
1、运行时异常是程序运行过程中产生的异常,是RuntimeException及其子类的异常,这些异常一般通过try…catch语句捕获
2、可检查异常(非运行时异常)(是RuntimeException及其子类的异常之外的异常,继承于Exception类)
异常分清楚之后讲讲捕获异常处理:
1、try…catch代码块:
标准语法如下:
try{
//可能出现异常程序代码块;
}catch(Exception e){//括号里是异常参数,如果try代码块中抛出异常传递给catch代码块进行处理,这个参数就是该异常的类型,e就是该异常类的对象,可以调用该异常类的方法进行处理异常
//异常处理代码块;
}finally{
//不管异常有没有被处理都执行的代码块;
}
try…catch的注意点:
1、如果try块里有多行代码并且可能会抛出多个异常,可以用多个catch语句,但是catch异常类型参数必须是从子类到父类的顺序
2、必须有try,catch可以有1个或多个,finally最多1个,可以没有,
3、还有另外一种组合:只有try和finally,没有catch如果try块中抛出了异常,则肯定不能被捕获,程序中断,但是finally代码块依然会被执行;
4、finally块前有return语句,finally依然被执行;
5、finally块前有System.exit(0)语句,finally不被执行;
throw与throws:
throw:
1、运行时异常是JVM自动抛出,非运行时异常需要程序员用throw关键字抛出
2、throw一般在方法体中制造一个异常实例,程序执行到throw时立即终止并抛出异常,
3、格式:throw new 异常类型名(异常信息);使用try…catch来捕获throw抛出的异常
throws:
1、throws通常在声明方法时,用来指定方法可能抛出的异常,多个异常用逗号分隔
2、语法格式:返回值类型 方法名(参数) throws 异常类型名{
方法体;
}
3、使用throws给方法抛出异常时,在调用该方法时,必须为该方法处理异常(可以继续往上抛,但终要处理)
4、throws抛出异常并不一定会发生这些异常,但使用throw,必定会抛出异常
自定义异常:
Java可以通过继承Exception类自定义异常类
简单的代码:
public class ExceptionTest extends Exception{//创建自定义异常,继承Exception类
public ExceptionTest(String message){//构造方法
super(message);//调用父类构造方法
}
}
public class Test {
static void age(int a) throws ExceptionTest{
if (a<0) {
throw new ExceptionTest("年龄不能为负数");
}
else {
System.out.println("今年"+a+"岁");
}
}
public static void main(String[] args) {
try {
age(-21);
} catch (ExceptionTest e) {
e.printStackTrace();
}
}
}