个人博客网:https://wushaopei.github.io/    (你想要这里多有)

1、异常体系结构

说明:

|-----Throwable
|-----Error :没针对性代码进行异常的处理 |-----Exception :针对性代码进行异常处理
|-----编译时异常 : 代码在编译的时候发生的异常(必须进行处理否则无法运行)
|----ParseException |-----运行时异常 : 代码在运行时发生的异常
|-----NullPointerException
|-----ClassCastException
|-----IndexOutofBoundsException

2、异常的处理

格式 :

try{
可能会发生异常的代码
}catch(异常的类型 e(变量名)){
关于该异常的处理方式;
}finally{
一定会执行的代码;
}

说明:

  1. finally是可的,finally中的代码一定会执行
  2. 当try中的代码发生异常时,会根据对应的异常类创建相应的对象,并将异常向外抛出。根据catch后面的异常类型进行匹配,一旦匹配成功则执行catch对应的异常处理方式。异常处理的代码执行完毕则跳出try-catch结构,继续向下执行其它的代码。一旦匹配不成功则抛出异常程序终止。
  3. 可以多个catch,如果多个catch后面的异常类型是子父类关系那么应该(子类在上父类在下)如果是兄弟可系谁上谁下都可以。
  4. catch可以省略不写,但必须要try-finally组合。目的是发生异常不处理,但一定要执行某些代码
  5. 输出异常信息 : ①getMessage()  ②printStackTrace()
  6. 在try声明的变量在try-catch结构外访问不到。因为作用域的问题。

finally:

  1. 就算catch中发生了异常,finally也一定会执行。
  2. 就算catch中有return,finally中的代码也一定会执行。
public int getNumber3(){
int a = 10;
try {
return a;
} catch (Exception e) { }finally{
a++;
return a;
}
} public int getNumber2(){
int a = 10;
try {
return a;
} catch (Exception e) { }finally{
a++;
// return 30;
}
return 30;
} public int getNumber(){
try {
System.out.println(1 / 0);
return 10;
} catch (Exception e) {
return 20;
}finally{
System.out.println("aaaaa");
return 30;
}
}

代码:

             try{
System.out.println("aaa");
System.out.println("bbb");
System.out.println(1 / 0);
}catch(NullPointerException e){
System.out.println("空指针异常");
}catch(IndexOutOfBoundsException e){
System.out.println("下角标越界");
}catch(RuntimeException e){
System.out.println("算术运算异常");
}finally{
System.out.println("我是一定会执行的代码");
}
System.out.println("程序执行完/毕");

2.2 throws

格式 :方法名() throws 异常类型1,异常类型2...{}
throws :抓到异常后自己不处理直接向上抛,抛给方法的调用者。

throws和try-catch-fianlly的区别?

  1. try-catch-finally真正的处理了异常

  2. throws没真正的处理异常,只是将异常向上抛,抛给方法的调用者,最后还是需要try-catch真正的处理异常

throws和try-catch-finally的使用场景?

  1. 需要真正解决异常时需要使用try-catch
  2. 必须使用throws : 在main方法中如果需要连续的调用多个方法,每个方法都有可能需要处理异常,那么方法中的异常建议向上抛,抛给方法的调用者。(比如买飞机票输入身份证号的问题)
  3. 一定不能使用throws : 子类继承父类后。父类被重写的方法没有抛异常,那么子类重写的方法也不能抛出异常

(详见ThrowsTest2.java)

2.3 手动抛出异常类对象 – throw

抛 :
java程序在正常执行的过程中,一旦执行到某行代码发生了异常,系统会根据对应的异常类创建相应的对象并向外抛出,抛出给调用者。同时终止程序的运行。
①系统向外抛异常    ②手动向外抛异常
格式 :

throw new 异常类型();

2.4自定义异常类

代码:

  1. 继承Exception或RuntimeException
  2. 提供重载的构造器。一个无参,一个有参
  3. 提供一个序列版本号(讲IO流再说)

代码:

public class MyException extends RuntimeException{

	/*
* 也可以不写,系统会自动帮我们生成一个序列版本号
建议手动添加
*/
private static final long serialVersionUID = -75646546882580L; public MyException(){ } public MyException(String message){
super(message);
}
}

JAVASE(十三) 异常处理的更多相关文章

  1. Java匹马行天下之JavaSE核心技术——异常处理

    Java匹马行天下之JavaSE核心技术——异常处理 异常的简介 在Java中,异常就是Java在编译.运行或运行过程中出现的错误. 程序错误分为三种:编译错误.运行时错误和逻辑错误 编译错误是因为程 ...

  2. 04 - JavaSE之异常处理

    异常的概念(运行期出现的错误) java 异常是 java 提供的用于处理程序中错误的一种机制. 所谓的错误是指在程序运行的过程中发生的一些异常事件.(如:除0溢出,数组下标越界,所要读取的文件不存在 ...

  3. ethereum(以太坊)(十三)--异常处理/元祖

    pragma solidity ^0.4.4; contract Students{ uint[] data= new uint[](4); address _owner = msg.sender; ...

  4. Java基础10:全面解读Java异常

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  5. java初学者必看的学习路线

    不管在编程语言的排行榜中,还是在大多数企业应用的广泛程度来看,Java一直都是当之无愧的榜首.Java语言有着独特的魅力吸引着广大的年轻人去学习,每个人学习的方式方法不一样. 第一步:首先要做好学习前 ...

  6. 夯实Java基础系列10:深入理解Java中的异常体系

    目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...

  7. javaSE第二十三天

    第二十三天    338 1.进程和线程的概述    338 2.多线程(理解)    339 (1)多线程:一个应用程序有多条执行路径    339 (2)Java程序的运行原理及JVM的启动是多线 ...

  8. javaSE第十三天

    第十三天    76 1. StringBuffer(掌握)    76 (1)说明:    77 (2)StringBuffer的构造方法    77 (3)StringBuffer的常见功能    ...

  9. JavaSE(十一)之异常处理详解

    一.异常概述 在我们日常生活中,有时会出现各种各样的异常,例如:职工小王开车去上班,在正常情况下,小王会准时到达单位.但是天有不测风云,在小王去上班时,可能会遇到一些异常情况,比如小王的车子出了故障, ...

随机推荐

  1. LeetCode--LinkedList--141.Linked List Cycle(Easy)

    141. Linked List Cycle(Easy)2019.7.10 题目地址https://leetcode.com/problems/linked-list-cycle/ Given a l ...

  2. Java并发编程实战 04死锁了怎么办?

    Java并发编程文章系列 Java并发编程实战 01并发编程的Bug源头 Java并发编程实战 02Java如何解决可见性和有序性问题 Java并发编程实战 03互斥锁 解决原子性问题 前提 在第三篇 ...

  3. [hdu5101]计数问题

    http://acm.hdu.edu.cn/showproblem.php?pid=5101 题目大意:给n个集合,求从两个不同集合里面各取一个数使得它们的和大于给定数的方案数. ans=从所有数里面 ...

  4. Istio的流量管理(实操一)(istio 系列三)

    Istio的流量管理(实操一)(istio 系列三) 使用官方的Bookinfo应用进行测试.涵盖官方文档Traffic Management章节中的请求路由,故障注入,流量迁移,TCP流量迁移,请求 ...

  5. 关于oracle怎么看清楚字段的一些实践

    在oracle存储过程或者平时编码中会有很多时候对不上字段,这时候在字段逗号后面可以主动加上--数字. 还有的是应该注意尽量让每个字段都占有一行的空间.下面部分截图说明

  6. Linux,Unix,GNU 到底有什么样的渊源?

    Linux,Unix, GNU,你可能经常听到这些名字被放在一起,比如 “Linux是类Unix系统”, “Linux其实应该叫 GNU/Linux” 等等.为什么会有这些说法,这些名词的历史渊源和背 ...

  7. libevent到底是同步还是异步,是阻塞还是非阻塞

    应该从不同角度看libevent的同步/异步.阻塞/非阻塞: IO数量的角度:select出来之前,会阻塞在一个io上,处理完成后再阻塞在下一个io上:之后就是把所有的io fd拿过来,都不阻塞,一个 ...

  8. 编译nginx的时候报错 需要安装PCRE

    ./configure --prefix=/mynginx/ 本地编译nginx的时候 报错 提示需要安装PCRE 错误信息: ./configure: error: the HTTP rewrite ...

  9. SpringBoot 整合Mail发送功能问题与解决

    SpringBootLean 是对springboot学习与研究项目,是根据实际项目的形式对进行配置与处理,欢迎star与fork. [oschina 地址] http://git.oschina.n ...

  10. 2018-06-17 js数组

    数组的定义:① var arr=new Array(xx,xx,xx); ②var arr=[yy,yy,,yy]; 数组的查看:arr[x]; 数组的修改:arr[x]=xx; 数组的遍历:①for ...