文章目录

  • 异常
    • 概念
    • 必要性
    • 分类
      • Throwable(可抛出的)
        • Error(错误)
        • Exception
      • 常见异常
    • 异常的产生
      • 自动抛出异常
      • 手动抛出异常(throw)
    • 异常处理
      • try...catch()...
      • 案例(用户输入)
      • 多重catch
      • try...catch()...finally...
    • 自定义异常
      • 6.2 异常中方法覆盖
      • 异常中方法覆盖

异常

概念

异常指在程序中出现的特殊情况

必要性

如果对于异常置之不理,就会导致程序的中断,甚至对程序造成毁灭性打击

分类

Throwable(可抛出的)

一切错误或异常的爸爸,无论是错误还是异常,都隶属与它

Error(错误)

JVM(一般为误删jdk或配置文件)、硬件、执行逻辑错误(概率最高)、不能手动处理(不能通过其他代码处理)
避免出现Error错误

Exception

程序在运行和配置中产生的问题,可处理

常见异常

异常 描述
NullPointerException 空指针异常
ArrayIndexOutOfBoundsException 数组越界异常
ClassCastException 类型转换异常
NumberFormatException 数字格式化异常
ArithmeticException 算术异常

异常的产生

自动抛出异常

当程序在运行时遇到不符合规范的代码或结果时,会产生异常

手动抛出异常(throw)

在可能发生的异常处添加语句throw new 异常类型(),这样抛出就需要在方法上声明可能要抛出的各种异常类型
语法:

throw new 异常类型("实际参数");
//手动抛出运行时异常
RuntimeException e = new RuntimeException("想抛出什么就写什么");
throw e;

示例:

public class A {public static void main(String[] args) throws Exception {int i = 2;if (i % 2 == 0) {throw new Exception("异常错误!");}}
}

### 异常产生后的结果 抛出异常后结束程序,相当于遇return语句 try{}catch(){}可以对于在异常抛出后不终止语句,到运行结束后再抛出

异常处理

try…catch()…

try{//这里填可能出现异常的代码
}catch(Exception e){//这里写异常产生后要怎么处理//可以输出语句,不对异常进行抛出处理,这样就可以继续运行代码,但是不会进行定位点1以后的代码//建议e.printStackTrace(),在代码全部运行结束后输出异常,会执行定位点1以后的代码
}
//定位点1
System.out.println("异常后的代码");
public class A {public static void main(String[] args) throws Exception {try {int num = 1;int a = 0;int b = num / a;System.out.println(b);} catch (Exception e) {e.printStackTrace();//可以执行后面的代码}System.out.println("hello word!");int i = 2;if (i % 2 == 0){throw new Exception("异常错误!");//在这里已经抛出异常了}System.out.println("你好世界!");//不会被执行}}
//代码结果
/*java.lang.ArithmeticException: / by zeroat com.wjs.properise.A.main(A.java:9)Exception in thread "main" java.lang.Exception: 异常错误!at com.wjs.properise.A.main(A.java:17)hello word!
*/

案例(用户输入)

当程序需要用户输入一个int类型的数,而用户输入的是一个非数字类型的数时程序会自动抛出异常,那么我们可以把这个异常不执行,一直循环让用户输入数字为止

public class A {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int age;while (true) {System.out.println("请输入一个年龄:");try {age = scanner.nextInt();System.out.println(age);} catch (InputMismatchException e) {System.out.println("输入有误,请重新输入!");}}}
}
/*截截取片段请输入一个年龄:s输入有误,请重新输入!请输入一个年龄:输入有误,请重新输入!请输入一个年龄:输入有误,请重新输入!
*/

这么做呢虽然不会爆出InputMismatchException(类型不匹配异常),但是会一直无限循环下去,不会给用户继续输入的机会。

  • 原因很简单,在用户第一次输入不匹配值的时候,虽然对异常行为进行了处理
  • 但是用户输入的值一直存储在缓存空间中当中(nextInt接收到的数据会存储在缓存空间中,没有任何变量接收时不会清理掉接收到的值,当接受的值赋值给变量时就会清理缓存空间的值),所以才会一直无限循环
  • 所以处理方法就是清理缓存空间的值
  • 在**System.out.println(“输入有误,请重新输入!”);**下行加上
  • scanner.nextLine();
  • 这样就可以清理缓存空间的值

多重catch

/*
子类异常在前,父类异常在后。
发生异常时按顺序逐个匹配。
只执行第一个与异常类型匹配的catch语句。
*/
public class A{public static void main(String[] args) {Scanner input=new Scanner(System.in);int result=0;try {//          String string=null;
//          System.out.println(string.equals("hello"));System.out.println("请输入第一个数字");int num1=input.nextInt();//InputMismatchExceptionSystem.out.println("请输入第二个数字");int num2=input.nextInt();result=num1/num2;//发生异常// ArethmicException}catch (ArithmeticException e) {//捕获 Exception:是所有异常的父类   System.out.println("算术异常");}catch (InputMismatchException e) {System.out.println("输入不匹配异常");}catch (Exception e) {System.out.println("未知异常");}System.out.println("结果是:"+result);System.out.println("程序结束了...");}
}

try…catch()…finally…

无论如何,finally{//执行语句}中的都会被执行
代码规范:

try {//可能出现异常的代码
} catch(Exception e) {​   //异常处理的相关代码,如:getMessage()、printStackTrace()
} finally{//是否发生异常都会执行,可以释放资源等。
}

自定义异常

  • 需继承Exception或Exception的子类,代表特定问题。
  • 异常类型名称望文生义,可在发生特定问题时抛出对应的异常。

常用构造方法:

  • 无参数构造方法。
  • String message参数的构造方法。

6.2 异常中方法覆盖

带有异常声明的方法重写:

  • 方法名、参数列表、返回值类型必须和父类相同。
  • 子类的访问修饰符合父类相同或是比父类更宽。
  • 子类中的方法,不能抛出比父类更多、更宽的检查时异常。

异常中方法覆盖

带有异常声明的方法重写:

  • 方法名、参数列表、返回值类型必须和父类相同。
  • 子类的访问修饰符合父类相同或是比父类更宽。
  • 子类中的方法,不能抛出比父类更多、更宽的检查时异常。
public class Animal {public void eat(){System.out.println("父类吃方法..........");}
}
public class Dog extends Animal{@Overridepublic void eat() throw Exception{ //出现错误,父类没有声明异常,子类不能声明异常System.out.println("子类的吃的方法..........");}
}

Java笔记(异常)相关推荐

  1. Java笔记-异常机制中try(...)中括号的用法

    今天在看到某位Java大佬这样的写法,也让大家一起来观摩下: 这里可以看到,将某些变量,和流放到了括号里面,在后面的代码中,也没有finally,也没见将其释放. 经过查阅资料,发现,在java7后有 ...

  2. Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)

    Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...

  3. Java笔记11-【异常、线程】

    主要内容 异常.线程 第一章 异常 1.1 异常概念 异常,就是不正常的意思.在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指 ...

  4. Java笔记-08 异常

    文章目录 异常 运行时异常RuntimeException 受检异常CheckedException throws 自定义异常 异常 异常指程序运行过程中出现的非正常现象,例如用户输入错误.除数为零. ...

  5. java checked异常有那些,java checked exceptions

    当前位置:我的异常网» 热门搜索 » java checked exceptions java checked exceptions www.myexceptions.net  网友分享于:2013- ...

  6. Java笔记05-Collection、泛型、迭代器

    Java笔记05-Collection.泛型.迭代器 [Collection.泛型] 主要内容 Collection集合 迭代器 增强for 泛型 第一章 Collection集合 1.1 集合概述 ...

  7. Java笔记03-Constructor Override

    Java笔记03-Constructor & Override 构造方法基本概念 构造方法是类中的一种特殊方法 它是在类创建对象(实例化)的时候自动调用的方法 这个和python中的__ini ...

  8. 【java笔记】线程(3):Thread类的常用方法

    [JAVA笔记]线程(1):多线程的介绍和实现_m0_52043808的博客-CSDN博客 [java笔记]线程(2):多线程的原理_m0_52043808的博客-CSDN博客 获取线程的名称: St ...

  9. 6.4-全栈Java笔记:异常处理办法(下)

    自定义异常 在程序中,可能会遇到任何标准异常类都没有充分的描述清楚的问题,这种情况下可以创建自己的异常类. 从Exception类或者它的子类派生一个子类即可 . 习惯上,定义的类应该包含2个构造器: ...

最新文章

  1. Java项目:前后端分离疫情防疫平台设计和实现(java+springmvc+VUE+node.js+mybatis+mysql+springboot+redis+jsp)
  2. Pandas中xs()函数索引复合索引数据的不同切面数据(索引复合索引中需要的数据):索引列复合索引中的一个切面、索引行复合索引中的一个切面
  3. 基于人工智能智商研究的智能定律初探
  4. php-fpm 参数及配置详解
  5. Boost:使用Qt加载图像,应用简单的框模糊滤镜
  6. 上传源文件至虚拟服务器,C# 通过WebService上传视频文件到服务器虚拟机下源码...
  7. 一个10篇一作SCI博士的走心分享----宏组学研究之“道” (完整收藏版)!!
  8. hive serde 序列化与反序列化 - 一行数据写入hive表
  9. Openflow协议规范
  10. LG新能源新设首席数字官 首任是英伟达前数据科学家
  11. 在线开关MySQL5.7 GTID_MySQL5.7 GTID在线开启与关闭【转】
  12. Unity Plastic SCM (无法托管/当前仓库地址错误/创建新项目无法托管/由于目标计算机积极无法连接)
  13. 读《大秦帝国》第二部
  14. @ResponseBody对象有空属性报错
  15. Windows如何彻底删除.sys后缀的流氓文件
  16. 大龄码农从北京到荷兰的躺平生活
  17. 自动打开搜狗搜索的前五个链接
  18. MyEclipse中jer配置
  19. 为什么物理诺奖颁给量子信息科学?——量子信息的过去、现在和未来
  20. 人物专访|大家好,我是橡树,研究车联网安全

热门文章

  1. 同步异步/阻塞非阻塞
  2. Nginx网络架构下的反向代理负载均衡upstream配置
  3. 鸿蒙畅享20pro,【华为畅享20 Pro 5G】价格_参数_图片_怎么样 - 华为商城
  4. centos7 安装gcc7.5
  5. GitHub+Git
  6. 华为鸿蒙智慧屏和手机,大屏手机还是智能电视?华为用鸿蒙系统增智慧
  7. Ajax请求不带上cookie的原因
  8. 亲爱的家长们,是时候展示你们的魅力了,教孩子学编程了
  9. linux scandir 排序,linux scandir 的使用
  10. 请写一段代码 把cv2 imshow窗口可以保存为动图