异常层次结构简化示意图
派生于 RuntimeException 的异常包含下面几种情况:
•错误的类型转换。
•数组访问越界
•访问 null 指针
不是派生于 RuntimeException 的异常包括:
•试图在文件尾部后面读取数据。
•试图打开一个不存在的文件。
•试图根据给定的字符串查找 Class 对象, 而这个字符串表示的类并不存在,,
“ 如果出现 RuntimeException 异常, 那么就一定是你的问题” 是一条相当有道理的规则。
两个类之间调用:
public class Test {
public static void main(String[] args) {
try {
m1();
//访问磁盘
//传输数据
//处理数据
}catch(wyException e) {//捕获异常
System.out.println("错误原因:"+e.getMessage());
System.out.println("错误原因:"+e.getMessage1());
System.out.println("错误原因:"+e.getMessage2());
}finally {
//关闭close
}
}
public static void m1 () throws wyException{
throw new wyException("信息","信息2");
}
}
package com.weiyang;
public class wyException extends Exception{
private String msg2;
public wyException(String x,String y) {
super(x);
msg2=y;
}
public wyException(String x) {
super(x);
}
public String getMessage1() {
return msg2;
}
public String getMessage2() {
return msg2+super.getMessage();
}
}
1、finally执行哪些操作?
Io操作关闭,in.close() 能保证百分之百关闭,一定会关闭,一定会执行,关闭之后减少内存消耗
2、final和finally:
finally 异常中总能执行的代码区,finally 肯定会执行 ,return也阻止不了
final 用于定义常量的关键字
finalize() 垃圾回收,该方法是系统调用,不用程序员手动调用
执行顺序简单的例子:
下图中
return先执行,后执行finally
m2先执行 后finally 后return 最终终止
public static int m1 () {
try {
return m2();
}catch(Exception e) {
}finally {
System.out.println("nice!");
}
System.out.println("hi!");
return 1;
}
public static int m2 () {
return 0;
}