java异常处理
软件程序在运行过程中,可能出现意外(Exception),运行中不期而至的问题。
- 检查性异常:用户错误或问题引起的异常,程序员无法预见的
- 运行时异常:可能被程序员避免的异常,可以在编译时被忽略
- 错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如栈溢出
java把异常当做对象来处理,基于java.lang.Throwable
api定义了许多异常类,主要分为错误(Error)和异常(Exception)两类
部分如下图:

error类对象由java虚拟机生成抛出,大多数与执行者无关
例如:
- OutOfMemoryError:虚拟机运行错误
- NoClassDefFoundError:类定义错误
- LinkageError:链接错误
异常:
运行时异常:

这些异常一般是程序逻辑错误引起的,和程序员有关
区别:
- Error是灾难性的致命错误,程序无法控制,一般java虚拟机(jvm)会选择终止线程
- Exception通常情况是可以被程序处理的
异常处理机制
五个关键词:
try,catch,finally,throw,throws- int a = 1;
- int b = 0;
- //捕获多个异常从小到大
- try {//监控区域
- System.out.println(a/b);
- }catch (ArithmeticException e){//如果出现ArithmeticException错误
- System.out.println("程序出现错误");
- //打印错误跟踪
- System.out.println(e.fillInStackTrace());
- System.exit(0);
- }catch (Exception e){
- System.out.println("程序出现错误11");
- System.out.println(e.fillInStackTrace());
- }finally {
- //不论是否出现错误都执行
- System.out.println("finally");
- }
- /*程序出现错误
- java.lang.ArithmeticException: / by zero
- finally
复制代码 选中代码块快捷键ctrl+alt+t(surround with)- int a = 1;
- int b = 0;
- if(b==0){
- throw new ArithmeticException();//主动抛出异常
- }
- }
- /*out :Exception in thread "main" java.lang.ArithmeticException
- */
- //方法抛出异常
- int a = 1;
- int b = 0;
- isZero(b);
- //假设这个方法处理不了异常,向上抛出异常
- public static void isZero(int b) throws ArithmeticException{
- if(b==0){
- throw new ArithmeticException();
- }
- System.out.println("aa");
- }
- /* out:Exception in thread "main" java.lang.ArithmeticException
- at com.xxx.Student.isZero(Student.java:12)
- at com.xxx.Student.main(Student.java:7)
复制代码 自定义异常
继承Exception- public class MyException extends Exception{
- //传递数字大于10
- private int detail;
- public MyException(int detail) {
- this.detail = detail;
- }
- //打印异常信息
- @Override
- public String toString() {
- return "MyException{" +
- "detail=" + detail +
- '}';
- }
- }
- //b=11
- public static void isZero(int b) throws MyException {
- if(b>10){
- throw new MyException(b);
- }
- }
- //out:MyException{detail=11}
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |