Throwable
包含error 和Exception
Exception又分CheckedException异常和UncheckedException,
UncheckedException就是RuntimeException,可以避免的异常
CheckedException必须捕获
包含error 和Exception
Exception又分CheckedException异常和UncheckedException,
UncheckedException就是RuntimeException,可以避免的异常
CheckedException必须捕获
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
运行时异常比如数组脚本越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常( ClassCastException);
普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。
- 自己抛异常
<span style="font-family:Microsoft YaHei;font-size:14px;">public static void demo1() {
int a = 6;
int b = 0;
try { // try监控区域
if (b == 0)
throw new ArithmeticException(); // 通过throw语句抛出异常
System. out.println( "a/b的值是:" + a / b);
} catch (ArithmeticException e) { // catch捕捉异常
System. out.println( "程序出现异常,变量b不能为0。" );
}
System. out.println( "程序正常结束。" );
}
</span>
- 自动抛异常
<span style="font-family:Microsoft YaHei;font-size:14px;">public static void demo2 () {
int a = 6;
int b = 0;
try {
System. out.println( "a/b的值是:" + a / b);
} catch (ArithmeticException e) {
System. out.println( "程序出现异常,变量b不能为0。" );
}
System. out.println( "程序正常结束。" );
}
</span>
一旦某个catch捕获到匹配的异常类型,将进入异常处理代码。一经处理结束,就意味着整个try-catch语句结束。其他的catch子句不再有匹配和捕获异常类型的机会
- 自定义异常
<span style="font-family:Microsoft YaHei;font-size:14px;">public class MyException extends Exception {
public MyException() {
super();
}
public MyException(String msg) {
super( msg);
}
}
//调用
public static void execute(String a) throws MyException {
System. out.println( "execute...");
if ( "true".equals(a)) {
throw new MyException( "参数不能为 true" );
}
}
public static void main(String[] args) throws MyException {
execute("true");
}
</span>
- 抛异常 给上一层
<span style="font-family:Microsoft YaHei;font-size:14px;">public static void readFile(String file) throws FileNotFoundException {
try {
BufferedInputStream in = new BufferedInputStream( new FileInputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
System. err.println( "不知道如何处理该异常或者根本不想处理它,但是不做处理又不合适,这是重新抛出异常交给上一级处理" );
// 重新抛出异常
throw e;
}
}
public static void printFile(String file) {
try {
readFile(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws MyException {
// execute("true");
printFile("D:/file");
}
</span>
- printStackTrace()、toString()、getMessage()