错误与异常
错误与异常
参照范例:
String[] strs = {"123","456"};
System.out.println(strs[3]); //会下标越界,跑RuntimeException
整体说明
Throwable: 有两个重要的子类:Exception(异常)和 Error(错误)
-
Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。例如JVM需要的内存不足,出现OutOfMemeory或者类找不到ClassNotFoundException; Error不需要代码进行处理
- Error 属于可查的异常(checked exceptions)
-
Exception(异常):是程序本身可以处理的异常。 异常分为运行时异常( RuntimeException)和可查的异常(例如IOException)
-
可查的异常(checked exceptions)
- RuntimeException及其子类
-
不可查的异常(unchecked exceptions)
这种异常的特点是Java编译器会检查它,就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
- 除了RuntimeException及其子类以外,其他的Exception类及其子类
-
异常处理机制
异常处理机制:抛出异常 处理异常
-
捕获异常: try、catch 和 finally
- 处理异常
try { // 可能会发生异常的程序代码 } catch (Type1 id1) { // 捕获并处理try抛出的异常类型Type1 } catch (Type2 id2) { // 捕获并处理try抛出的异常类型Type2 } finally { // 无论是否发生异常,都将执行的语句块 }
-
抛出异常
-
throw 自己抛出
-
使用throw抛出异常:可以创建异常类的实例对象通过throw语句抛出。该语句的语法格式为: throw new exceptionname;。异常流设计思路也需要方法内部的异常抛出。示例:
public void doMethod() { System.out.println("123"); throw new RuntimeException("1234"); }
-
-
throws 向上抛出
-
方法中throws出异常 methodname throws Exception1,Exception2,..,ExceptionN {}当方法抛出异常列表的异常时,方法将不对这些类型及其子类类型的异常作处理,而抛向调用该方法的方法,由他去处理。异常流设计思路就是用方法抛出异常实现的。示例:
public void doMethod() throws Exception { //方法的具体实现 }
-
-
Throwable类中的常用方法:
- getCause():返回抛出异常的原因。如果 cause 不存在或未知,则返回 null。
- getMessage():返回异常的消息信息。
- printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。
/**
* 出现类似的错误可以跳转continue,进行后续处理.
* @author Administrator
*
*/
public class ContinueException extends Exception {
/**
*
*/
private static final long serialVersionUID = -5869067215256123060L;
//code码
private String code;
public String getCode() {
return code;
}
public ContinueException(String code) {
this.code = code;
}
public ContinueException(String code, String message) {
super(message);
this.code = code;
}
public ContinueException(String code, String message, Throwable cause) {
super(message, cause);
this.code = code;
}
}
异常练习题
-
【单选题】下面有关Java异常类的描述,说法错误的是?
A.异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
B.非RuntimeException一般是外部错误(非Error),其必须被try {}catch语句块所捕获
C.Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
D.RuntimeException体系包括错误的类型转换、数组访问越界和试图访问空指针等,必须被try{}catch语句块所捕获- D
-
【不定项】以下关于JAVA语言异常处理描述正确的有?
A.throw关键字可以在方法上声明该方法要抛出的异常。
B.throws用于抛出异常对象。
C.try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
D.finally语句块是不管有没有出现异常都要执行的内容。
E.在try块中不可以抛出异常- CD
异常流开发模式
异常流是实际项目中常用的开发模式,最里面代码抛出某个异常例如IOException,然后外围代码try{}catch(Exception ex) {throw ex},这样调用方就知道最内层代码出什么问题,方便快速跟踪