第四章 异常处理

学习 java 、刷算法题时,很少有人会在乎异常处理, 要不 try catch 、 要不就 throw 。但在做项目时候, 异常处理混乱会导致程序可维护性降低。异常本身也是程序的一部分。

第一节 简介

4.1.1 分类

Throwable 接口又分为“异常”、“错误”。异常是程序可以自己处理的, 错误一般是程序无法处理。

2020-07-22_210628.png

一旦捕获了异常,该段程序进入异常处理流程,不会在执行。try 后的代码还是会继续执行的。

public static void main(String[] args) {

try {

System.out.println(13/0);

}catch (Exception e){

e.printStackTrace();

}

System.out.println("会往下执行码?");

}

out

会往下执行码?

java.lang.ArithmeticException: / by zero

at com.awork.common.utils.Test.main(Test.java:6)

4.1.2 检测性异常

异常的另一种分类 : 受检异常 checked、 非受检异常 unchecked。

区别: 在编译的过程中, 非受检异常不会提示,只有当程序运行到异常位置触发异常, 程序寻找异常是否被处理。

非受检异常: RuntimeException 、 Error

受检异常: IOException 、 SQL …

注:

jvm 认为受检异常是可修复的,在编译时会提出, 不会通过编译。诸如 RuntimeException 之类的非受检异常,可以通过编译。 但 jvm 认为程序本身有问题,应该本身捕获异常并处理,再重新运行程序。

第二节 异常与错误

4.2.1 区别

异常是程序可以自己处理的, 错误一般是程序无法处理。 异常处理是程序的一部分,处理过后程序依然可以继续执行流程 。 错误可能需要重新分配 jvm 资源,(如爆栈) 程序已经无法通过 try catch 处理了 。

第三节 异常的处理方式

4.3.1 处理

常规 try ... catch ... finally ...

public static void main(String[] args) {

try {

System.out.println(13/0);

}catch (Exception e){

e.printStackTrace();

} finally {

System.out.println("finally");

}

System.out.println("会往下执行码?");

}

out :

finally

java.lang.ArithmeticException: / by zero

会往下执行码?

可见 , 即使抓到异常, finally 代码块还是会执行 , 并且先于后续代码。

throws

声明在方法中 ,表示方法可能会抛出异常,上层调用者需要捕获异常。

throw

手动抛出异常 : throw new MyException(params);

4.3.2 自定义异常

便于对一类异常进行自定义分类, 遵循 java 封装原则。 便于捕获异常迅速定位。(比如, 是某类 service 出错)

继承 Exception , 重写构造方法 , 例如:

public class MyException extends Exception {

public MyException() {

super();

}

public MyException(String str) {

super(str);

}

}

4.3.3 获取异常信息的常用方法

方法1

e.printStackTrace();

方法2

StackTraceElement[] stackTrace = e.getStackTrace();

for (StackTraceElement stackTraceElement : stackTrace) {

String className = stackTraceElement.getClassName();

System.out.println(className);

}

java异常处理简介_【自学java】异常处理简介相关推荐

  1. java进度条_自学java你需要知道的,适合编程小白

    1. java学习网站 之前在很多学习网站上学习过Java,踩过很多坑,今天给大家推荐一个比较好用的Java学习网站,希望大家能少踩坑 Java教程 | 项目实践一站式java学习 这个网站的针对性强 ...

  2. java 入门程序_自学 Java 怎么入门?

    自学Java的确不易,但是有一份好的学习路线图,跟着路线图来一步一步踏踏实实的学下来,相信你也一定可以成为大牛. 分享给大家一套学习线路图,内容还是很全面的,每个阶段需要学习的内容罗列的也很清楚,这样 ...

  3. 达内学java要多久_自学Java需要学多久才能达到工作的程度

    目前Java以上IT市场中最受企业欢迎的开发语言,所以很多人想自学Java,学精通后转行做Java开发类的工作.今天小编就来给大家讲讲自学Java需要学多久才能达到工作的程度. 其实不同的人学习Jav ...

  4. 自学java的难度_自学java难不难 搞定这十三步就够了

    自学java难不难,对不同的人来说可能不一样,有着编程基础的来说,相对容易.如果是完全小白,就会稍微困难点,下面总结了十三步来自学java的步骤. 第1步:自学JAVA的开发环境配置.开发首个Java ...

  5. java short 后缀_自学java的新手问个问题,为什么写个代码中的int能自动转

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 你学一个东西 先学会他的定义 java语法是这样定义的 类型修饰符 变量名 = 值 其中左边是被赋值的 右边是赋值的 类型修饰符有 八种 int bool ...

  6. java short后缀_自学java的新手问个问题,为什么写个代码中的int能自动转

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 你学一个东西 先学会他的定义 java语法是这样定义的 类型修饰符 变量名 = 值 其中左边是被赋值的 右边是赋值的 类型修饰符有 八种 int bool ...

  7. java 数组赋值_自学JAVA每日记录(10)-欢迎指点欢迎共勉

    接上一篇 编程练习:编写一个JAVA程序,创建指定长度的 int 型数组,并生成 100 以内随机数为数组中的每个元素赋值,然后输出数组 要求: 1. 要求通过定义带参带返回值的方法来实现 2. 通过 ...

  8. 没有学历学了JAVA怎么找份工作_自学java没学历可以找到工作嘛?

    可以的,假如你的学习能力强,然后能够控制自己不去到处撩妹,有毅力是完全可以自学,然后学出来的技术吊炸天,然后找一份很好的工作的 现在市场上的最低要求的学历是大专,如果说你在这个学历以下的话,我的建议是 ...

  9. 前几天在头条上收到一条私信,内容大致是这样的:“我学校比较垃圾,想自学 Java 可以吗?自学 Java 难吗?毕业后能找到一份 6k左右的工作吗?”

    前几天在头条上收到一条私信,内容大致是这样的:"我学校比较垃圾,想自学 Java 可以吗?自学 Java 难吗?毕业后能找到一份 6k左右的工作吗?" 不知道有没有人有类似的问题, ...

  10. java 提高篇_【Java入门提高篇】Day16 Java异常处理(上)

    当当当当当当,各位看官,好久不见,甚是想念. 今天我们来聊聊Java里的一个小妖精,那就是异常. 什么是异常?什么是异常处理? 异常嘛,顾名思义就是不正常,(逃),是Java程序运行时,发生的预料之外 ...

最新文章

  1. HTML基础第六讲---表格
  2. Ajax系列之三:UpdatePanel
  3. Excel的poi缓存问题
  4. python selenium 小知识点整理笔记(更新中...)
  5. VB6之从1970年1月1日起的秒数 的与C语言类似的时间函数
  6. 学计算机干眼,长时间看电脑致视力模糊?4个动作解决干眼症
  7. 谷歌跟oracle_Google vs Oracle –判决临近,Oracle的知识产权案件步履蹒跚
  8. 【TCP网络编程】C语言实现TCP服务器和客户端之间的通信(linux)
  9. cad中能够既刷新视图又能刷新计算机图形数据库,建筑CAD练习题.doc
  10. ACRush 楼天成回忆录
  11. 1.oracle的dump理解一 BH buffer header
  12. 2016年-2021年【总目录】
  13. 6个的IT技术开发网站
  14. 五分钟,让你掌握学好CNC数控编程的技巧
  15. 微信如何直接跳转外部浏览器
  16. java中什么是异构?
  17. MultipartFile转File
  18. mysql在数据库中创建工作表时,总是报语法错误。(表名字符号有问题)
  19. 中国移动WLAN无线上网清单查询
  20. 【目标检测】交通标识数据集CCTSDB标注处理(转YOLO)

热门文章

  1. 更简洁的方式修改Chrome的User Agent,轻松体验移动版网络
  2. ubuntu进程管理方法
  3. 博弈——巴什博弈(hdu1846,2188,2897)
  4. Centos7访问本地电脑共享文件夹遇到的问题
  5. DNS服务器 安装部署 以及子域授权和转发
  6. 机器学习速成课程 | 练习 | Google Development——编程练习:TensorFlow 编程概念
  7. 【AI视野·今日CV 计算机视觉论文速览 第165期】Mon, 21 Oct 2019
  8. 线程休眠 sleep
  9. 组合框载入数据库的内容
  10. 了解Java的发展史