Day 17 异常机制

Day 17 异常机制,第1张

Day 17 异常机制

1 异常机制

      异常是Java中提供的一种识别及响应错误情况的一致性机制。有效地异常处理能使程序更健     壮、易于调试。

异常发生的原因有很多,比如:

  1. 用户输入了非法数据
  2. 要打开的文件不存在
  3. 网络通信时连接中断
  4. JVM内存溢出
  5. 这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。

  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 公共的有参构造,传入字符串,并在构造方法中把该字符传递给父类

示例:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4672146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-07

发表评论

登录后才能评论

评论列表(0条)

保存