异常

异常的概念

异常:
在程序运行过程中出现的不正常的情况

注意:
1.相同的代码在运行的时候,根据输入参数或者操作的不同,有可能会发生异常,有可能不会
————应该在写代码的过程中尽可能保证代码的正确性
2.如果要解决代码中的异常,需要添加非常复杂的代码逻辑来进行判断,会使代码变得非常臃肿,不利于维护
————推荐使用异常机制来处理程序中的异常问题
3.程序在执行过程中如果出现了问题会导致后面的代码无法执行
而使用异常机制之后,对异常情况进行处理,同时后续的代码会继续执行,不会中断整个程序
4.在异常处理的过程中,不要只是简单的输出错误,要尽可能地将异常的详细信息进行输出
e.printStackTrace():打印异常的堆栈信息【可以从异常信息的最后一行进行追踪,寻找自己所编写的java类】
System.out.println(e.getMessage()); 输出异常的错误信息(用的很少)

异常处理方式

1.捕获异常

try(代码逻辑)catch(Exception e){异常处理逻辑}
try(代码逻辑)catch(具体的异常Exception e){}(具体的异常Exception e){}catch…
好处:可以针对每一种具体的异常做更丰富的处理
注意:当使用多长catch的时候,一定要注意相关异常的顺序,将子类放在最前面的catch,父类放在后面的catch
执行过程中可能出现的情况:
1.正常执行,只执行try中的代码
2.遇到异常情况,会处理try中异常之前的代码的逻辑,后面的逻辑不会执行,最后会执行catch中的代码
3.使用多重catch的时候会遇到异常子类不匹配的情况,此时依然会报错,因此建议在catch最后将所有异常的父类写上

public class TestException {public static void main(String[] args) {Scanner in = new Scanner(System.in);try{System.out.println("请输入被除数:");int num1 = in.nextInt();System.out.println("请输入除数:");int num2 = in.nextInt();System.out.println(String.format("%d / %d = %d", num1,num2,num1/num2));
//        }catch (Exception e){//            System.out.println("出现异常");
//            e.printStackTrace();//java.lang.ArithmeticException: / by zero// at TestException.main(TestException.java:32)//            System.out.println("-------------");
//            System.out.println(e.getMessage());  // /by zero}catch(ArithmeticException e){System.out.println("数学异常,除数不能是0");e.printStackTrace();}catch (InputMismatchException e){System.out.println("输入的参数值类型不匹配");e.printStackTrace();}catch (NullPointerException e){//异常类型不匹配System.out.println("空指针异常");e.printStackTrace();}catch (Exception e){//建议在catch最后将所有异常的父类写上System.out.println("出现异常");}System.out.println("感谢使用本程序");}
}

关于finally

public class FinallyDemo {/*在程序运行过程中,如果处理异常的部分包含finally处理,那么无论代码是否会出现异常,finally代码块总会执行finally中包含哪些处理逻辑1.IO流的关闭操作一般设置在finally中2.数据库的连接关闭操作设置在finally中*/public static void main(String[] args) {try{System.out.println(1/0);}catch (Exception e){e.printStackTrace();}finally {System.out.println("我是finally处理块");}}
}

2.声明异常、抛出异常、用户自定义异常

/*用户自定义异常:在java的API中提供了非常丰富的异常类,但是在某些情况下不太满足我们的需求,此时需要自定义异常步骤:1.继承Exception类2.自定义实现构造方法3.需要使用的时候,使用throw new自定义异常名称;什么时候需要使用自定义异常:一般情况下不需要,但是在要求明确或是要求异常格式统一的时候是必须要自己实现的*/
public class GenderException extends Exception{public GenderException(){System.out.println("性别异常");}public GenderException(String message){System.out.println("message");}
}
/*声明异常throws:在异常情况出现的时候,可以使用try...catch...finally的方式对异常进行处理,除此之外,可以将异常向外抛出,由外部进行处理1.在方法调用过程中,可能存在多个方法之间的调用,假如每个方法中都包含了异常情况,那么就需要在每个方法中进行try...catch...另外一种比较简单的方式,就是在方法最外层调用一次调用处理一次即可即使用throws的方法,对所有执行过程中所有方法出现的异常进行统一集中处理2.如何判断使用throws还是try...catch最稳妥的方式实在每个方法中都进行异常的处理偷懒的方式是判断在整个调用过程中,外层的调用是否有对异常的处理,如果有,直接使用throws抛出异常throw使用throw new 异常名称;(通常配合声明异常使用)*/
public class Exception2 {public static void main(String[] args) {try{show();}catch (GenderException e){e.printStackTrace();}System.out.println("hh");}public static void show() throws GenderException{String gender = "1234";if(gender.equals("man")){System.out.println("man");}else if(gender.equals("woman")) {System.out.println("woman");}else {//            throw new Exception("性别出现错误");throw new GenderException();}}
}

常见的异常类型

1.Exception:异常层次结构的父类
2.ArithmeticException:算术错误情形,如以0作为除数
3.ArrayIndexOutOfBoundsException:数组下标越界
4.NullPointerException:尝试访问null对象成员
5.ClassNotFoundException:不能加载所需的类
6.IllegalArgumentException:方法接收到非法参数
7.ClassCastException:对象强制类型转换出错
8.NumberFormatException:数字格式转换异常,如把“abc”转换成数字

异常的分类

Throwable的两个子类:Exception和Error

Exception又分为Checked异常和运行时异常

​ Checked异常必须捕获或者声明抛出

​ 运行时异常不要求

【java学习之路】(java SE篇)006.异常相关推荐

  1. 个人开发经历--我的java学习之路(学校篇)

    个人开发经历--我的java学习之路(学校篇) 个人介绍: 姓名: 不在这里说明 联系信息: 个人历程 jdbc阶段 sql生成器 一代代码生成器 servlet阶段 servlet项目中,sql生成 ...

  2. java学习之路---java学习的方法和java学习路线

    转载于: http://blog.csdn.net/zhangerqing 前段时间逛论坛,总会有很多新手很迷茫,问到:到底该怎么学好Java,这个问题很重要,尤其对于像我们这样大多数都是靠自学的人来 ...

  3. Java学习之路-----Java基础简介,基础语法,Java标识符,修饰符,关键字与注释

    这里写目录标题 Java简介 Java发展历程 Java语言平台版本 Java语言的特点 Java语言跨平台原理--JVM JRE和JDK JDK安装路径下的目录解释 Java基础语法 Java标识符 ...

  4. Java学习之路 -- Java怎么学?

    文章目录 java基础怎么学? 学完基础学什么? 几个常用框架学完学什么? MQ JVM的知识跑不掉 微服务等等 其他 数据结构和算法 java基础怎么学? 当时,作为懵懂的小白,大一学习了c和c++ ...

  5. JAVA学习之路--基础篇三

    目录 关于Java中从键盘输入的语句 nextxxx().next().nextLine()的区别 语句 if和if else语句 Switch语句 for语句 while和do..while bre ...

  6. java学习之路目录(已完结)

    java学习之路目录(持续更新中-) 第一阶段 javaSE(完结) 序号 标题 内容 001 java初识 java语言特点.体系结构.运行机制 002 java SE基础语法 注释.关键字.变量. ...

  7. 我的Java学习之路2009-11-17

    -------------------------------2009年3月19日开始----------------------------- 下载JDK Myeclipse Netbeans JB ...

  8. 菜鸟haqima的Java学习之路第一天

    菜鸟haqima的Java学习之路第一天 导读:DOS命令 常用快捷键 Java的简单概述 (第一章 Java开发环境的搭建) 1.常用的DOS命令 1.1.怎么打开DOS命令窗口 win键+r(组合 ...

  9. Java学习之路02_选择方向_旺旺老师

    提示:请您先阅读第一部分:Java学习之路01_软件江湖_旺旺老师 第二部分:帮派之争 就好像玩游戏要先选择角色种族,进入江湖要先选择帮派,那搞软件开发也要选择方向.个人总结的软件开发的方向:嵌入式开 ...

  10. Java学习之路-预科

    Java学习之路-预科 第一章 学习计算机的基本知识 文章目录 Java学习之路-预科 前言 一.什么是计算机? 二.硬件及冯诺依曼结构 1.计算机硬件 1.1 计算机硬件组成 1.2 什么是装机 1 ...

最新文章

  1. 计算机三级考试网络技术怎么复习,2017计算机三级考试的三大复习阶段(网络技术为例)...
  2. python selenium爬虫爬京东评论_Python 不用selenium 带你高效爬取京东商品评论
  3. 基于云的SD-WAN骨干接入服务
  4. Ubuntu14.04安装Octave
  5. 视图编辑php,PhpStorm视图模式
  6. spark学习-Spark Streaming初次理解
  7. mysql存储过程之异常处理篇
  8. 计算机领域CCF推荐会议列表+
  9. 程序员客栈(项目简介)
  10. 药品计算机数据备份管理制度,药品记录与数据管理规范(征求意见稿)
  11. Excel论文画折线图
  12. Chrome笔试平台 摄像头无法开启 | 摄像头图像黑屏 问题解决
  13. qq飞车手游服务器找不到了,QQ飞车手游服务器拉取失败是怎么回事
  14. Mac M1 上 丝滑跑 Docker
  15. Obj文件解析相关bug心得
  16. excel2007整体调整行间距
  17. python的CUDA加速编程科普
  18. boss显示服务器,阴阳师:寝肥BOSS开启服务器却崩了,官方补偿让人难以接受
  19. 校园网页设计成品 学校班级网页制作模板 dreamweaver网页作业 简单网页课程成品 大学生静态HTML网页源码
  20. ftp免费下载工具,五大容易上手的ftp免费下载工具

热门文章

  1. 实验2-3-7 求平方与倒数序列的部分和 (C语言)
  2. Java内存分析—栈,堆,方法区
  3. C#写文本写Csv文件操作
  4. java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...
  5. spring cloud简介之最好参考
  6. cisco路由器基本实验之六 CHAP and RIP (Boson NetSim)
  7. python用一维数组存储学号和成绩、然后按成绩排序输出_九度oj 题目1196:成绩排序...
  8. lol云顶之奕助手_云顶之奕小小英雄介绍 除了棋子以外它也很重要!
  9. python模拟足球_使用K-Means算法划分亚洲国家的三个足球梯队
  10. 图片切换ajax,jQuery AJAX全屏图文幻灯切换