1 异常机制
异常是Java中提供的一种识别及响应错误情况的一致性机制。有效地异常处理能使程序更健 壮、易于调试。
异常发生的原因有很多,比如:
- 用户输入了非法数据
- 要打开的文件不存在
- 网络通信时连接中断
- JVM内存溢出
- 这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。
2 系统异常分类
3 Error
系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理。
比如:OOM(内存溢出错误)、VirtualMachineError(虚拟机错误)、StackOverflowError(堆栈溢出错误)等,一般发生这种情况,JVM会选择终止程序。
示例:
//堆栈溢出错误
public class TestError {
public static void recursionMethod() {
recursionMethod();// 无限递归下去
}
public static void main(String[] args) {
recursionMethod();
}
}
报错信息:
Exception in thread "main" java.lang.StackOverflowError
at com.TestError.recursionMethod(TestError.java:5)
at com.TestError.recursionMethod(TestError.java:5)
at com.TestError.recursionMethod(TestError.java:5)
at com.TestError.recursionMethod(TestError.java:5)
at com.TestError.recursionMethod(TestError.java:5)
at com.TestError.recursionMethod(TestError.java:5)
... ...
4 Exception
Exception是所有异常类的父类。分为非RuntimeException和RuntimeException 。
非RuntimeException是编译时需要捕获或处理的异常
RuntimeException 是编译时不需要捕获或处理的异常
常用方法:
public String getMessage() :返回关于发生的异常的详细信息
public void printStackTrace():打印toString()结果和栈层次到System.err
异常处理的两种方式:
1 throws:抛出异常,告诉调用处,这里可能出什么问题,如果你把异常抛给了调用处,那么调用处要么也抛出去要么解决
2 try...catch...:解决异常
Try...catch...
try{
高风险代码;
}catch(异常类型 变量){
解决方案;
}
如果try里有一行出现了错误,那try后面的代码就不执行了,开始执行catch
找不到D:/xxx 错误 123不输出
开始执行catch
try{
高风险代码;
}catch(异常类型 变量){
处理方案;
}catch(异常类型 变量){
处理方案;
}。。
try(开启资源){
高风险代码;
}catch(异常类型 变量){
处理措施;
}
5 Throwsthrows只会抛出异常不会处理,可以同时抛多个且没有先后顺序
6 Finally
简单来说就是必须执行的语句块
不能单独出现,必须和try或者try..catch..一起使用
只有一种不执行情况 ,就是关闭虚拟机System.exit(0);
比如:
try{
int a =0;
int b = 3;
int c = b/a;
System,out,println(c); //除数不能为0 错误
}catch(Exception e){
e.printStackTrace();
return; //终止方法执行
}finally{
System.out.println("2222"); //但是finally必会执行
7 自定义异常类
分三步:
1 继承一个已有的异常类 编译时异常就继承Exception 运行异常继承RuntimeException
2 公共的无参构造
3 公共的有参构造,传入字符串,并在构造方法中把该字符传递给父类
示例:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)