个人博客网: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. 认识mysql3个基本库

    一.3个基本库 数据库初始化安装完毕会有三个基本库mysql .information_schema.performace_schema.作为应用程序开发者,平时较少关注这些数据库尤其是后两者.但是通 ...

  2. 201771010113 李婷华 《面向对象程序设计(Java)》第十三周总结

    一.理论知识部分 第十一章 事件处理 事件源 (event source):能够产生事件的对象都可 以成为事件源 ,如文本框 .按钮等 .一个事件源是一个能够注册监听器并向发送事件对象的对象. 监听器 ...

  3. GroupJoin()各参数的意义及用法

    EF Core中GroupJoin的注释比较复杂: public static IEnumerable<TResult> GroupJoin<TOuter, TInner, TKey ...

  4. Luogu P3389 高斯消元

    https://www.luogu.com.cn/problem/P3389 主元消元法[模板] 高斯消元是解决多元线性方程组的方法,再学习它之前,先引入一个东西--行列式 行列式的性质: 这里我们只 ...

  5. 《C程序设计语言》 练习2-8

    问题描述 练习 2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值. Write a function rightr ...

  6. layui select下拉菜单联动

    做的比较简单,先从后台直接把第一级菜单输出,然后点击二级菜单的时候再动态展示 <div class="layui-inline"> <label class=&q ...

  7. Android fragment 使用replace并保存状态

    Fragment的地位在开发中可是举足轻重的,掌握它的的生命周期以及使用特性是非常重要的,例如在开发中常使用的模板: 点击菜单,中心内容跟随菜单变化,但是在菜单间切换时,需要保存之前输入的信息或其他状 ...

  8. 桥接模式(c++实现)

    外观模式 目录 外观模式 模式定义 模式动机 UML类图 源码实现 优点 缺点 总结 模式定义 桥接模式(Bridge),将抽象部分与它的实现部分分离,使他们都可以独立的变化.什么叫抽象与他的实现分离 ...

  9. webpack指南(四)shimming

    shimming 将一个新的 API 引入到一个旧的环境中,而且仅靠旧的环境中已有的手段实现. ProvidePlugin 我们在程序中暴露一个变量,通知webpack某个库被使用,webpack将在 ...

  10. Django之urls.py路由配置(URLConf)

    urls.py路由配置(URLConf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 基本格式: Django1.x版本 ...