异常

定义

表示程序在运行过程中出现的非正常情况,编写代码的过程中尽可能少的减少异常出现的情况

分类

  • Throwable

    • Error 代码级别无法解决的异常情况
    • Exception
      • 运行时异常:在程序运行过程中,由于输入的参数值的不同,可能会发生也可能不会发生
      • checked异常 :编译时异常,在ide中会显示的检查出来

异常的处理

捕获异常1、

try{可能出现异常的语句
}catch(可能出现的异常){捕捉异常后执行的语句
}
//
try{int x = 1 /0;
}catch(ArithmeticException e){e.printStack();
}

捕获异常2、

try{可能发生异常的代码
}catch(发生的异常){捕捉异常后执行的语句
}finally{不管是否发生异常都要执行的语句
}//
try{int x = 1 /0;
}catch(ArithmeticException e){e.printStack();
}finally{System.out.println("finally")
}

注意

  1. 当发生异常时,在try代码块中异常语句后面的语句不会再执行

  2. try、catch、finally以及try…catch…finally之外的代码是互相独立的,在try中定义的变量在其他的部分无法访问,改变了仅作用于try部分,其他catch、finally情况类似,但是外部定义的变量在try、catch、finally中可以使用

  3. 在进行异常捕获的时候,return语句的不同位置会造成结果的不同

    1. 首先讨论try…catch…finally后面有代码的情况

//此时注意一个关键的点:checked异常,即return语句后面不能再跟语句
// 例如
return;
System.out.println("after return");// 这条语句ide直接报错,相当于多余的
// 故return的语句只能有一下几种情况
//1try{System.out.println("1");System.out.println(1 / 0);return;}catch (Exception e){System.out.println("2");
//            return;}finally {System.out.println("3");
//            return;}System.out.println("4");}
// 此时return语句永远都不会被执行,也就不会报错。
//2try{System.out.println("1");
//            System.out.println(1 / 0);return;}catch (Exception e){System.out.println("2");
//            return;}finally {System.out.println("3");
//            return;}System.out.println("4");
//此时,当程序执行到return语句时,并不会立即执行,而是先挂起,等执行完finally中的语句之后再执行return语句结束程序,故try、catch、finally之外的其他代码不会再执行
//其他的catch、finally中都不能再存在return语句了

2.try…catch…finally后面没有代码的情况

//第一种情况
try{System.out.println("1");System.out.println(1 / 0);return;}catch (Exception e){System.out.println("2");
//            return;}finally {System.out.println("3");
//            return;}
// 此时return语句永远不会执行
// 第二种情况,此时return语句有没有都没有关系
try{System.out.println("1");
//            System.out.println(1 / 0);return;}catch (Exception e){System.out.println("2");
//            return;}finally {System.out.println("3");
//            return;}
//第三种情况
try{System.out.println("1");System.out.println(1 / 0);
//            return;}catch (Exception e){System.out.println("2");return;}finally {System.out.println("3");
//            return;}
//此时,还是跟前面一样的,return先挂起,执行完finally中的代码后再结束程序
//第三种情况
public class Demo {public static void main(String[] args) {System.out.println(method());}public static int method(){try{System.out.println("1");System.out.println(1 / 0);
//            return;}catch (Exception e){System.out.println("2");return 1;}finally {System.out.println("3");
//            return 2;}
//        System.out.println("4");return 0;}
}
// 此时会执行最近的return语句

综上:

  1. return语句会被挂起,等执行完finally中的语句后再执行
  2. 当存在两个return语句时且都能被执行时,优先执行finally中的return

抛出异常

throws

将异常情况抛出给调用者

注意,如果整个程序的运行过程中都没有异常的处理的话,最终异常会抛给jvm,不太友好,一般都要对异常进行处理

import java.io.FileInputStream;
import java.io.FileNotFoundException;public class Demo1 {public static void main(String[] args) throws FileNotFoundException {FileInputStream fileInputStream = new FileInputStream("test.txt");}
}

自定义异常

java中提供了非常多的异常类,但是在某些项目中需要自己定义独特的异常处理方式,此时需要自定义异常

  1. 继承Exception
  2. 编写构造方法,可以传入自己想打印的异常信息
  3. 调用的时候通过throw向外抛出异常
public class MyException extends Exception{public MyException(){System.out.println("自定义异常");}
}
public class Demo1 {public static void main(String[] args) throws MyException {throw new MyException();}
}

另外,还可以自定义异常信息

public class Demo1 {public static void main(String[] args) throws Exception {throw new Exception("test");}
}

希望对大家有所帮助。

Java 异常 总结 try catch finally Exception相关推荐

  1. java异常中的Error和Exception的区别是什么?

    java异常中的Error和Exception的区别是什么? 参考文章: (1)java异常中的Error和Exception的区别是什么? (2)https://www.cnblogs.com/Tr ...

  2. java 异常管理员_GitHub - kangZan/JCatch: Exception异常管理平台,支持Java、PHP、Python等多种语言...

    什么是JCatch 当程序发生异常(Exception),处理方式一般是通过日志文件记录下来,这种方式很容易被忽略,而且查询起来比较麻烦. JCatch提供了一种方案,当程序发生异常时,通过JCatc ...

  3. java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    前言: java 中的异常处理机制你真的理解了吗?掌握了吗? catch 体里遇到 return 是怎么处理? finally 体遇到 return 怎么办?finally 体里有 System.ex ...

  4. mfc try catch 捕获并显示_“全栈2019”Java异常第十七章:Error该不该被捕获?

    难度 初级 学习时间 30分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 友情提示 本教学属于系列教学,内容具有连贯性,本章使用到的内 ...

  5. java exception e抛异常_抛出的异常在上层catch到,但是e.getMessage()为NULL,为什么会这样?...

    1.在一个代码里catch到Exception,throw new Exception(e.getMessage()); 在上级代码里catch到抛出的Exception,想得到错误的信息,结果发现e ...

  6. JAVA→异常、异常类体系结构、try→catch→finally处理异常、throw new Exception(“重构异常“);、throws Exception{ }、自定义异常

    没有异常处理的话,程序发生异常,将终止. 有了异常处理的话,程序发生异常,也继续执行. 有try时,不发生异常执行try→finally,发生异常执行try→catch→finally 多个catch ...

  7. java异常return笔试题_Java笔试面试总结—try、catch、finally语句中有return 的各类情况...

    前言 之前在刷笔试题和面试的时候经常会遇到或者被问到 try-catch-finally 语法块的执行顺序等问题,今天就抽空整理了一下这个知识点,然后记录下来. 正文 本篇文章主要是通过举例的方式来阐 ...

  8. Java 异常基础 Exception

    Java中的异常 Exception java.lang.Exception类是Java中所有异常的直接或间接父类.即Exception类是所有异常的根类. 比如程序: public class Ex ...

  9. java异常 子类_Java异常 Exception类及其子类(实例讲解)

    C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象. Java异常处理通过5个关键字try.ca ...

最新文章

  1. 安装终端服务和终端服务授权,激活终端服务授权
  2. Xamarin.Android 使用ListView绑定数据
  3. 每天一个linux命令(56):netstat命令
  4. 你还不会手写SpringBoot启动器吗
  5. Elasticsearch 5.6.5 安装head插件
  6. javascript动态合并纵向单元格
  7. 太棒了!PyTorch 1.7发布,支持CUDA 11、Windows分布式训练
  8. word敲空格文字不后退_你还在敲“空格”对齐Word?快瞧瞧效率达人是怎么做的吧!...
  9. sitemap.xml生成方法(asp和php)(转)
  10. sublime 3 3083验证码
  11. Deepin-15.10-custom-LiveCD 定制版本已经发布
  12. app通用功能测试用例
  13. Ubuntu服务器长时间运行爬虫程序
  14. 用简单的语句讲解浏览器输入地址进入servlet原理
  15. elementui表格序号自增
  16. 手机浏览器获取某东cookie
  17. REVIT模型空间句法分析
  18. Excel如何将商品名称中的商品型号提取出来
  19. 基于传统方法的单目深度估计
  20. 用友畅捷通T+,现金流量相关档案从一个帐套复制到另个帐套

热门文章

  1. 深度学习总结:GAN,3种方式实现fixedGtrainD,fixedDtrainG, retain, detach
  2. java并发编程之美-阅读记录10
  3. 机器学习之异常点检测
  4. 当你感到学习困难的时候,你在走上坡路!
  5. 【MongoDB】增删改查基本操作
  6. 在as3中只有事件(或该事件的子级)的发送者才能侦听事件
  7. linux dd命令参数及用法详解---用指定大小的块拷贝一个文件
  8. rndis ethernet gadget 驱动 安装方法
  9. 关于ubantu软件包的相关记录
  10. 编译tslib1.4出现错误undefined reference to rpl_malloc错误