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(十一)之异常处理详解
一.异常概述 在我们日常生活中,有时会出现各种各样的异常,例如:职工小王开车去上班,在正常情况下,小王会准时到达单位.但是天有不测风云,在小王去上班时,可能会遇到一些异常情况,比如小王的车子出了故障, ...
随机推荐
- Spring官网阅读(一)容器及实例化
从今天开始,我们一起过一遍Spring的官网,一边读,一边结合在路神课堂上学习的知识,讲一讲自己的理解.不管是之前关于动态代理的文章,还是读Spring的官网,都是为了之后对Spring的源码做更全面 ...
- MySQL数据类型笔记
引言 作为一个做Java后端的开发者,无论是在自己平时项目学习实战还是工作中的真实项目,都离不开和数据库打交道.而MySQL作为当今最流行的关系型数据库之一,也成为了我们必须掌握的一门技术.最近在工作 ...
- 【带着canvas去流浪(15)】threejs fundamentals翻译系列1-scene graph
示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 华为云社区地址:[你要的前端打怪升级指南] 目录 ...
- C#MVC通过AJAX调用API方法进行上传下载
//这是写的一个类,具体是上传图片的上传和下载 public class FileResult { public int Code { get; set; } pub ...
- 用python爬了厦门人才网的.net岗位
为了看看.net的就业行情怎么样,用python爬取了厦门人才网.net岗位的信息,话不多说上代码,python没学多久,如果有什么不妥请指正 import requests from bs4 imp ...
- search(13)- elastic4s-histograms:聚合直方图
在聚合的分组统计中我们会面临两种分组元素类型:连续型如时间,自然数等.离散型如地点.产品等.离散型数据本身就代表不同的组别,但连续型数据则需要手工按等长间隔进行切分了.下面是一个按价钱段聚合的例子: ...
- Hadoop 集群搭建和维护文档
一.前言 -- 基础环境准备 节点名称 IP NN DN JNN ZKFC ZK RM NM Master Worker master1 192.168.8.106 * * * * * * maste ...
- 手机APP自动化环境搭建
1 摘要 近年来,随着移动应用从数量上和逻辑复杂程度上的增长,以及产品发布周期的紧缩,使得回归测试迫在眉睫,鉴于此APP自动化测试变得越来流行,当前主流的APP自动化工具有:Appium.Roboti ...
- Java openrasp学习记录(一)
前言: 最近一直在做学校实验室安排的项目,太惨了,没多少时间学习新知识,不过rasp还是要挤挤时间学的,先从小例子的分析开始,了解rasp的基本设计思路,后面详细阅读openrasp的源码进行学习!欢 ...
- centOS 开启服务器后无法访问(大坑啊)
在开启了nodejs后,发现虽然ssh访问到主机,但是公网不能访问. 一番调试发现程序是正常的,也确实在监听着端口.折腾良久无果,在Vultr上发帖求助.几分钟后Vultr团队的工程师Joshua B ...