异常机制

概念

异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。

异常的分类

1)所有异常的根类为java.lang.Throwable


注意:RuntimeException:可以不进行捕获处理,但CheckException必须进行处理,否则无法通过编译(异常处理的方式见后面的异常处理方式)

2)几种常见的运行时异常

1.算术异常:java.lang.ArithmeticException

2.输入不匹配异常:java.lang.InputMismatchException

3.空指针异常,试图访问空对象的属性或方法:java.lang.NullPointerException

4.数组下标越界异常: java.lang.ArrayIndexOutOfBoundsException

5.字符串下标越界:java.lang.StringIndexOutOfBoundsException

6.类型转换异常:java.lang.ClassCastException

7.数字转换异常:java.lang.NumberFormatException


异常的处理方式(1)(2)(3)

(1)如何避免运行时异常:通过严谨的判断防止潜在的运行时异常发生(if条件语句)

编写代码及运行结果:

(2)捕获异常

try...catch...finally关键字
1.try...catch

try{

可能出现的异常代码;

}catch(异常代码 e){

异常处理;

}

2.try...finally

try{

可能出现的异常代码;

}finally{

一定会被执行的代码;

}

3. try...catch...finally

try{

可能出现的异常代码;

}catch(异常类型 e){

异常处理;

}finally{

一定会被执行的代码;

}

编写代码:

运行结果:


注意:1.出现的异常和catch中异常一致时,才会打印输出异常处理中的内容

          2.finally中的内容一定会被执行

编写代码:

运行结果1:


运行结果2:


注意:3. try...catch...finally的另一种写法

try{

可能出现异常的代码;

}catch(异常类型1|异常类型2...){

异常处理;

  } finally{

一定会被执行的代码;

}

编写代码:


运行结果:


(3)声明异常

1)throws和throw

throws

作用: 通过throws声明异常,跟在方法声明的后面,用于告知方法的调用者该方法可能存在异常

如何解决异常:(1)方法的调用者可以使用try..catch...finally捕获异常

                          (2)通过throws继续将异常声明出去

throw:作用:通过throw抛出异常,放在方法内部,用于抛出具体的异常,经常与throws结合使用

2)throw和throws的区别

1.位置不同:throws跟在方法声明的后面,用于声明异常,提醒调用者该方法可能存在异常,而throw位于方法内部,用于抛出具体的异常

2.类型不同:throws后跟的是异常类型,throw后跟的是具体的异常


3)继承关系中的声明异常

1.父类方法声明了 Exception 类型的异常,子类在重写该方法时,可以声明也可以不声明异常。但是如果子类重写后的的方法使用 super 关键字调用父类的方法,那么要求必须对异常进行处理:给子类中重写的的方法也声明异常

2.如果父类的方法没有异常,并且子类的方法如果一定会有 Exception 或 Checked 异常,要求子类必须自己使用 try-catch 处理,或者给父类方法加上异常的声明

3.如果子类在重写父类的方法时,产生的异常是RuntimeException 异常时,那么可以不用处理

编写代码:


自定义异常

1)为什么需要自定义异常
在程序中,可能会遇到JDK提供的任何标准异常类都无法充分描述清楚我们想要表达的问题,这种情况下可以创建自己的异常类,即自定义异常类。

2)自定义异常的步骤

1.编写一个类继承Exception

2.编写该类的构造方法,并在构造方法中调用父类(Exception)中的构造方法为消息赋值

3.可以通过getMessage()方法获取消息信息

编写代码:


运行结果:


你可能感兴趣的:(异常机制)