Core Java第十二章知识点总结——异常处理
知识点预览
异常的概念
异常处理的概念
Java中异常的分类
Java中常见未检查异常
throw关键字
异常的传递
异常处理的方式(throws try…catch)
异常信息
方法覆盖中的异常
自定义异常
异常处理的概念
1. 异常的概念
一个软件正常运行时发生的意外情况
2. 异常处理
当发生异常时,采取补救措施,减少用户损失。
Java中的异常与异常分类
Exception的子类
1. 非检查异常
RuntimeException的子类,可以避免,不需要必须处理
2. 检查异常
不可避免,必须进行异常处理,要不编译器报错
常见未检查异常
1.ArithmeticException
2.ArrayIndexOutOfBoundsException 数组下标越界异常
3. NullPointerException 空指针异常
4.ClassCastException 类型转换异常
检查异常
Class.forName(“com.mysql.jdbc.Driver”);
throw关键字
1. throw关键字
产生异常(抛出异常)
2. throw异常对象
thrownew NullPointerException();
产生异常后以后的代码不会执行
异常的传递
沿方法调用链反向传递
main()
m1()
m2() throw newNullPointerException();
package chp12.ex07;
/**
*
* @Author: Wentasy
* @FullName: TestException.java
* @Description: 异常的传递:沿方法调用反向传递
* 打印结果: main 1
m1 1
m2 1
* @Create Date: 2012-8-16
*/
public class TestException {
public static void main(String args[]){
System.out.println("main 1");
m1();
System.out.println("main 2");
}
public static void m1(){
System.out.println("m1 1 ");
m2();
System.out.println("m1 2");
}
public static void m2(){
System.out.println("m2 1");
throw new NullPointerException();
//System.out.println("m2 2");//Unreachable code
}
}
异常处理的方式
1. 异常处理的第一种方式
a) throws声明处理异常
eg:餐馆退菜(往上推卸责任)
b) throws后面可以声明多个异常
c) throws 可以应用父类异常代替子类异常
2.异常处理的第二种方式
a) try…catch处理异常
try{
代码1
代码2
// FileNotFoundException 所捕获的异常的类型
}catch(FileNotFoundExceptione){
//异常处理的代码
}
b) 捕获:catch块的顺序
c)catch块的异常:由小往大
d)try…catch…finally异常处理方式
finally中的内容肯定执行
主要用于释放资源
方法覆盖中的异常
子类的覆盖方法不能比父类的被覆盖方法抛出更多的异常
拓展:方法覆盖的要求
package chp12.ex17;
import java.io.IOException;
/**
*
* @Author: Wentasy
* @FullName: TestSuper.java
* @Description: 子类的覆盖方法不能比父类的被覆盖方法抛出更多的异常
* @Create Date: 2012-8-16
*/
class Super{
public void m1() throws Exception{
}
}
/*
class Sub extends Super{
public void m1() throws Exception{
}
}
class Sub extends Super{
public void m1(){
}
}
*/
class Sub extends Super{
@Override
public void m1() throws IOException{
}
}
public class TestSuper {
}
message属性与异常追踪
1. Exception/printStackTrace();
2. Exception类中定义了一个message属性可以用于存储异常消息,还提供了构造方法。
自定义异常
1. extends Exception检测异常:当产生时需要异常处理
package chp12.ex20;
/**
*
* @Author: Wentasy
* @FullName: TestException.java
* @Description: 自定义异常 extends Exception
* @Create Date: 2012-8-16
*/
class MyException extends Exception{
public MyException(){
}
public MyException(String message){
super(message);
}
}
public class TestException {
public static void main(String args[]){
}
public static void m1() throws MyException{
throw new MyException();
}
}
2. extends RuntimeException 不需要强制处理
package chp12.ex21;
/**
*
* @Author: Wentasy
* @FullName: TestException.java
* @Description: 自定义异常:extends RuntimeException
* @Create Date: 2012-8-16
*/
class MyException extends RuntimeException{
public MyException(){
}
public MyException(String message){
super(message);
}
}
public class TestException {
public static void main(String args[]){
}
public static void m1(){
throw new MyException();//可以不用处理 因为是非检查型异常
}
}