个人博客网: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. (二)Redis在Mac下的安装与SpringBoot中的配置

    1 下载Redis 官网下载,下载 stable 版本,稳定版本. 2 本地安装 解压:tar zxvf redis-6.0.1.tar.gz 移动到: sudo mv redis-6.0.1 /us ...

  2. Spring杂谈 | Spring中的AutowireCandidateResolver

    接口定义 用于推断一个特定的beanDefinition是否能作为指定依赖的候选者的策略接口 public interface AutowireCandidateResolver { // 默认情况下 ...

  3. Spring 学习 之 再探publish-event机制

    之前的文章链接:https://blog.csdn.net/qq_41907991/article/details/88544777 我们要知道的是,Spring的publish-event使用的是监 ...

  4. node能做的性能优化

    开发中,我们就离不开性能优化,那么在使用node开发的时候,我们可以使用那些代码来优化性能呢 一.释放内存 当node运行检测到错误的时候,释放掉内存 http.get(str,(res)=>{ ...

  5. Spring Cloud Alibaba系列(三)使用feign进行服务调用

    什么是Feign Feign是spring cloud提供的一个声明式的伪http客户端,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一天注解即可. Nacos很好的兼容了Fe ...

  6. 多线程测试时的辅助类--CountDownLatch

    多线程时,很多时候由于mian线程与多线程结束时间不可控,造成无法测试 辅助测试类---CountDownLatch 我看的视频教程匿名内部类无法使用外部的变量,所以CountDownLatch定义为 ...

  7. [hdu4713 Permutation]DP

    题意:将一个数拆成若干数的和使得它们的最小公倍数最大 思路:一个数x可以拆成p1k1 + p2k2 + ... + pnkn形式,其中pi是质数或1.对于最小公倍数最大的情况,一定可以表示成这种形式. ...

  8. [hdu4576]dp

    题意:1-n围成1圈,从1出发,第i次走a[i]步,问走m次后出现在[L,R]的概率L<=R. 思路:明显的DP,把编号变成0~n-1,令dp[i][j]表示走完i步之前停在了j上,则有dp[i ...

  9. calc less 下不起作用

    在 less中不能使用css3 calc属性不能 css3 新增长度计算属性 可以根据不同单位计算宽度 .test{ width: calc(100% - 150px); } 但是当我们在less中使 ...

  10. EOS基础全家桶(十一)智能合约IDE-EOS_Studio

    简介 我们马上要进入智能合约的开发了,以太坊最初提供了智能合约的功能,并宣告区块链进入2.0时代,而EOS的智能合约更进一步,提供了更多的便利性和可能性.为了进一步了解智能合约,并进行开发,我们需要先 ...