|
[笔记]java学习笔记8--异常
1 异常的定义:java将所有的错误封装成为一个对象,
其根本父类为Throwable.异常处理可以提高系统的容错性.
Object
|
Throwable
| |
Error Exception
| |
runtimeException 非runtimeException
(1)Error: 严重的不可避免,不可挽救的错误.一般是底层错误,比如说虚拟机崩溃,不处理.
(2)runtimeException:运行时异常,也称未检查异常,一般是因为程序员的粗心而造成的,
是本来可以避免的,可处理,可不处理.
几个常见的未检查异常:
java.lang.ArithmeticException 分母为0;
java.lang.NullPointerException 空指针操作;
java.lang.ArrayIndexOutOfBoundsException 数组越界;
java.lang.ClassCastException 类型转换异常;
(3)非runtimeException:已检查异常,必须处理.
2 异常对象的产生和传递:如果一个方法中有了异常没有处理,异常会延方法调用顺序向上传递,
传递到虚拟机,虚拟机会终止运行.
3 异常的处理,主要针对已检查异常.
(1)消极: throws 在方法的声明中抛出异常,表示不处理,让上一级处理
(2)积极: try-catch 捕获异常
try {可能出现异常的代码块}
catch(捕获异常类型){进行处理的代码};
try{c1.Class.forName("Student");
}catch(ClassNotFoundException e){
e.printStackTrace(); //打印栈跟踪信息
}
一个异常捕获只会匹配一次try-catch.允许写多个catch
但要求必须先捕获子类异常再捕获父类异常.
一个异常一旦被捕获就不存在了.
(3)try-catch-finally finally肯定执行,一般释放资源的代码写在里面
try-finally 可以连用,可以嵌套
try{c1.Class.forName("Student"); //1
}catch(ClassNotFoundException e){ //2
e.printStackTrace();
}finally{
System.out.println("finally block"); //3
}
System.out.println("after try-catch-finally"); //4
}
三种情况下的执行顺序:
没有异常:1->3->4
有异常: 被捕获 1->2->3->4
有异常: 没有捕获 1->3->退出
在catch里写了System.exit(0),finally里的代码不执行.
4 自定义异常:与一般异常的用法没有区别
class MyException extends Exception{
public MyException(){}
public MyException(String message){
super(message);
}
}
5 什么时候try-catch,什么时候throws
配合使用,把异常抛给最能处理这个异常的对象.
6 方法的覆盖: 子类不能抛出比父类更多的异常,抛出的异常可以是父类异常的子类型.
7 断言:关键字assert,1.4引入的,调试工具
好好学习,天天向上 |
|