JAVASE(十三) 异常处理
个人博客网:https://wushaopei.github.io/ (你想要这里多有)
1、异常体系结构
说明:
|-----Throwable
|-----Error :没针对性代码进行异常的处理
|-----Exception :针对性代码进行异常处理
|-----编译时异常 : 代码在编译的时候发生的异常(必须进行处理否则无法运行)
|----ParseException
|-----运行时异常 : 代码在运行时发生的异常
|-----NullPointerException
|-----ClassCastException
|-----IndexOutofBoundsException
2、异常的处理
格式 :
try{
可能会发生异常的代码
}catch(异常的类型 e(变量名)){
关于该异常的处理方式;
}finally{
一定会执行的代码;
}
说明:
- finally是可的,finally中的代码一定会执行
- 当try中的代码发生异常时,会根据对应的异常类创建相应的对象,并将异常向外抛出。根据catch后面的异常类型进行匹配,一旦匹配成功则执行catch对应的异常处理方式。异常处理的代码执行完毕则跳出try-catch结构,继续向下执行其它的代码。一旦匹配不成功则抛出异常程序终止。
- 可以多个catch,如果多个catch后面的异常类型是子父类关系那么应该(子类在上父类在下)如果是兄弟可系谁上谁下都可以。
- catch可以省略不写,但必须要try-finally组合。目的是发生异常不处理,但一定要执行某些代码
- 输出异常信息 : ①getMessage() ②printStackTrace()
- 在try声明的变量在try-catch结构外访问不到。因为作用域的问题。
finally:
- 就算catch中发生了异常,finally也一定会执行。
- 就算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的区别?
try-catch-finally真正的处理了异常
throws没真正的处理异常,只是将异常向上抛,抛给方法的调用者,最后还是需要try-catch真正的处理异常
throws和try-catch-finally的使用场景?
- 需要真正解决异常时需要使用try-catch
- 必须使用throws : 在main方法中如果需要连续的调用多个方法,每个方法都有可能需要处理异常,那么方法中的异常建议向上抛,抛给方法的调用者。(比如买飞机票输入身份证号的问题)
- 一定不能使用throws : 子类继承父类后。父类被重写的方法没有抛异常,那么子类重写的方法也不能抛出异常
(详见ThrowsTest2.java)
2.3 手动抛出异常类对象 – throw
抛 :
java程序在正常执行的过程中,一旦执行到某行代码发生了异常,系统会根据对应的异常类创建相应的对象并向外抛出,抛出给调用者。同时终止程序的运行。
①系统向外抛异常 ②手动向外抛异常
格式 :
throw new 异常类型();
2.4自定义异常类
代码:
- 继承Exception或RuntimeException
- 提供重载的构造器。一个无参,一个有参
- 提供一个序列版本号(讲IO流再说)
代码:
public class MyException extends RuntimeException{
/*
* 也可以不写,系统会自动帮我们生成一个序列版本号
建议手动添加
*/
private static final long serialVersionUID = -75646546882580L;
public MyException(){
}
public MyException(String message){
super(message);
}
}
JAVASE(十三) 异常处理的更多相关文章
- Java匹马行天下之JavaSE核心技术——异常处理
Java匹马行天下之JavaSE核心技术——异常处理 异常的简介 在Java中,异常就是Java在编译.运行或运行过程中出现的错误. 程序错误分为三种:编译错误.运行时错误和逻辑错误 编译错误是因为程 ...
- 04 - JavaSE之异常处理
异常的概念(运行期出现的错误) java 异常是 java 提供的用于处理程序中错误的一种机制. 所谓的错误是指在程序运行的过程中发生的一些异常事件.(如:除0溢出,数组下标越界,所要读取的文件不存在 ...
- ethereum(以太坊)(十三)--异常处理/元祖
pragma solidity ^0.4.4; contract Students{ uint[] data= new uint[](4); address _owner = msg.sender; ...
- Java基础10:全面解读Java异常
更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...
- java初学者必看的学习路线
不管在编程语言的排行榜中,还是在大多数企业应用的广泛程度来看,Java一直都是当之无愧的榜首.Java语言有着独特的魅力吸引着广大的年轻人去学习,每个人学习的方式方法不一样. 第一步:首先要做好学习前 ...
- 夯实Java基础系列10:深入理解Java中的异常体系
目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调 ...
- javaSE第二十三天
第二十三天 338 1.进程和线程的概述 338 2.多线程(理解) 339 (1)多线程:一个应用程序有多条执行路径 339 (2)Java程序的运行原理及JVM的启动是多线 ...
- javaSE第十三天
第十三天 76 1. StringBuffer(掌握) 76 (1)说明: 77 (2)StringBuffer的构造方法 77 (3)StringBuffer的常见功能 ...
- JavaSE(十一)之异常处理详解
一.异常概述 在我们日常生活中,有时会出现各种各样的异常,例如:职工小王开车去上班,在正常情况下,小王会准时到达单位.但是天有不测风云,在小王去上班时,可能会遇到一些异常情况,比如小王的车子出了故障, ...
随机推荐
- 认识mysql3个基本库
一.3个基本库 数据库初始化安装完毕会有三个基本库mysql .information_schema.performace_schema.作为应用程序开发者,平时较少关注这些数据库尤其是后两者.但是通 ...
- 201771010113 李婷华 《面向对象程序设计(Java)》第十三周总结
一.理论知识部分 第十一章 事件处理 事件源 (event source):能够产生事件的对象都可 以成为事件源 ,如文本框 .按钮等 .一个事件源是一个能够注册监听器并向发送事件对象的对象. 监听器 ...
- GroupJoin()各参数的意义及用法
EF Core中GroupJoin的注释比较复杂: public static IEnumerable<TResult> GroupJoin<TOuter, TInner, TKey ...
- Luogu P3389 高斯消元
https://www.luogu.com.cn/problem/P3389 主元消元法[模板] 高斯消元是解决多元线性方程组的方法,再学习它之前,先引入一个东西--行列式 行列式的性质: 这里我们只 ...
- 《C程序设计语言》 练习2-8
问题描述 练习 2-8 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值. Write a function rightr ...
- layui select下拉菜单联动
做的比较简单,先从后台直接把第一级菜单输出,然后点击二级菜单的时候再动态展示 <div class="layui-inline"> <label class=&q ...
- Android fragment 使用replace并保存状态
Fragment的地位在开发中可是举足轻重的,掌握它的的生命周期以及使用特性是非常重要的,例如在开发中常使用的模板: 点击菜单,中心内容跟随菜单变化,但是在菜单间切换时,需要保存之前输入的信息或其他状 ...
- 桥接模式(c++实现)
外观模式 目录 外观模式 模式定义 模式动机 UML类图 源码实现 优点 缺点 总结 模式定义 桥接模式(Bridge),将抽象部分与它的实现部分分离,使他们都可以独立的变化.什么叫抽象与他的实现分离 ...
- webpack指南(四)shimming
shimming 将一个新的 API 引入到一个旧的环境中,而且仅靠旧的环境中已有的手段实现. ProvidePlugin 我们在程序中暴露一个变量,通知webpack某个库被使用,webpack将在 ...
- Django之urls.py路由配置(URLConf)
urls.py路由配置(URLConf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 基本格式: Django1.x版本 ...