认识异常

异常是程序中导致程序中断的一种指令流。
例:产生异常

package com.study.Demo;public class Test1 {public static void main(String args[]){System.out.println("1.除法计算开始");System.out.println("2.除法计算:"+(10/0));   //此处产生异常//产生异常并且没有正确处理之后,异常之后的语句将不再执行System.out.println("3.除法计算结束");}
}
//结果
//1.除法计算开始
//Exception in thread "main" java.lang.ArithmeticException: / by zero
//  at com.study.Demo.Test1.main(Test1.java:6)

为了让程序在出现异常后仍能正常执行完毕,必须引入异常处理语句来完善代码编写。

处理异常

Java针对异常处理提供了3个核心的关键字:try、catch、finally。

格式:

try{//有可能出现异常的语句
}[catch(异常类型 对象){//异常处理;
}catch(异常类型 对象){//异常处理;
}catch(异常类型 对象){//异常处理;
}...][finally{;不管是否出现异常,都统一执行的代码
}]

注意:finally块是可以省略的,如果省略了finally块不写,则在catch()块运行结束后,程序将继续向下执行。
例:应用异常处理格式

package com.study.Demo;public class Test2 {public static void main(String args[]){System.out.println("1.除法计算开始");try {System.out.println("2.除法计算:"+(10/0));//异常产生之后的语句将不再执行,此处在try中产生异常,所以下面的输出不会执行System.out.println("666");}catch (ArithmeticException e){ //处理算术异常System.out.println("***出现异常***");}System.out.println("3.除法计算结束");}
}
//结果
//1.除法计算开始
//***出现异常***
//3.除法计算结束

例:输出异常的完整信息

package com.study.Demo;public class Test2 {public static void main(String args[]){System.out.println("1.除法计算开始");try {System.out.println("2.除法计算:"+(10/0));   //此处产生异常//异常产生之后的语句将不再执行,此处在try中产生异常,所以下面的输出不会执行System.out.println("666");}catch (ArithmeticException e){ //处理算术异常e.printStackTrace();    //输出异常的完整信息}System.out.println("3.除法计算结束");}
}
//结果
//1.除法计算开始
//3.除法计算结束
//java.lang.ArithmeticException: / by zero
//  at com.study.Demo.Test2.main(Test2.java:7)

例:使用finally

package com.study.Demo;public class Test2 {public static void main(String args[]){System.out.println("1.除法计算开始");try {int x=Integer.parseInt(args[0]);    //接收参数并且转型int y=Integer.parseInt(args[1]);    //接收参数并且转型System.out.println("2.除法计算:"+(x/y));   //此处产生异常//异常产生之后的语句将不再执行,此处在try中产生异常,所以下面的输出不会执行System.out.println("666");}catch (ArithmeticException e){ //处理算术异常e.printStackTrace();    //输出异常的完整信息}finally {System.out.println("不管是否出现异常我都执行!");}System.out.println("3.除法计算结束");}
}
//结果
//1.除法计算开始
//不管是否出现异常我都执行!
//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: //Index 0 out of bounds for length 0
//  at com.study.Demo.Test2.main(Test2.java:7)

由于上程序只处理了算术异常(catch (ArithmeticException e)),所以当出现其他异常后,程序依然无法处理,会中断执行。

例:加入多个catch进行异常处理

package com.study.Demo;public class Test2 {public static void main(String args[]){System.out.println("1.除法计算开始");try {int x=Integer.parseInt(args[0]);    //接收参数并且转型int y=Integer.parseInt(args[1]);    //接收参数并且转型System.out.println("2.除法计算:"+(x/y));   //此处产生异常//异常产生之后的语句将不再执行,此处在try中产生异常,所以下面的输出不会执行System.out.println("666");}catch (ArithmeticException e){ //处理算术异常e.printStackTrace();    //输出异常的完整信息}catch (NumberFormatException e){e.printStackTrace();}catch (ArrayIndexOutOfBoundsException e){e.printStackTrace();} finally {System.out.println("不管是否出现异常我都执行!");}System.out.println("3.除法计算结束");}
}
//结果
//1.除法计算开始
//不管是否出现异常我都执行!
//3.除法计算结束
//java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
//  at com.study.Demo.Test2.main(Test2.java:7)

异常的处理流程


通过这两个异常类可以发现所有的异常类型最高的继承类是Throwable,并且在Throwable下还有两个子类。
Error:指的是JVM错误,这时的程序并没有执行,无法处理;
Exception:指的是程序运行中产生的异常,用户可以使用异常处理格式处理。


例:使用Exception处理异常

package com.study.Demo;public class Test2 {public static void main(String args[]){System.out.println("1.除法计算开始");try {int x=Integer.parseInt(args[0]);    //接收参数并且转型int y=Integer.parseInt(args[1]);    //接收参数并且转型System.out.println("2.除法计算:"+(x/y));   //此处产生异常//异常产生之后的语句将不再执行,此处在try中产生异常,所以下面的输出不会执行System.out.println("666");}catch (Exception e) {   //处理所有的异常类型e.printStackTrace();} finally {System.out.println("不管是否出现异常我都执行!");}System.out.println("3.除法计算结束");}
}
//结果
//1.除法计算开始
//不管是否出现异常我都执行!
//3.除法计算结束
//java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
//  at com.study.Demo.Test2.main(Test2.java:7)

上程序的异常使用Exception进行处理,这样不管程序中出现了何种异常问题,程序都可以捕获处理。

注意:处理多个异常时,捕获范围小的异常要放在捕获范围大的异常之前处理。
按照继承的关系来看ArithmeticException一定是Exception的子类,所以在编写异常处理时,Exception的处理一定要写在ArithmeticException处理之后,否则将出现语法错误。
例:错误的异常捕获顺序

package com.study.Demo;public class Test2 {public static void main(String args[]){System.out.println("1.除法计算开始");try {int x=Integer.parseInt(args[0]);    //接收参数并且转型int y=Integer.parseInt(args[1]);    //接收参数并且转型System.out.println("2.除法计算:"+(x/y));   //此处产生异常//异常产生之后的语句将不再执行,此处在try中产生异常,所以下面的输出不会执行System.out.println("666");}catch (Exception e){   //已经处理完所有的异常类型e.printStackTrace();}catch (ArithmeticException e){ //此处无法处理,Exception已处理完e.printStackTrace();    //输出异常的完整信息} finally {System.out.println("不管是否出现异常我都执行!");}System.out.println("3.除法计算结束");}
}
//结果
//Error:(15, 9) java: 已捕获到异常错误java.lang.ArithmeticException

Java学习总结:18相关推荐

  1. JAVA学习日记(18)——反射和枚举

    1.反射 1.1 定义 Java的反射(reflection)机制是在运行状态下,对于任何一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意属性和方法,既然能够拿到那么我们 ...

  2. java学习第18步——Docker镜像

    Docker管理镜像的一个工具软件 1 简介(3个小时搞定) 1.1 Docker介绍 1.2 解决2个问题(开发时依赖的包版本不一致,软件不一致) 2 Docker和虚拟机 3 Docker镜像和容 ...

  3. Java学习笔记18

    Objects是Java 7新增的一个工具类,它提供了一些工具方法来操作对象,这些工具方法大多是"空指针"安全的. Objects实现的方法如下: 在源码中Objects工具类中e ...

  4. java学习(18):巩固练习

    /任务 4 白大壮和白二壮是双胞胎兄弟, 白大壮的身高增加1厘米正好是白二壮的身高 ,白二壮体重正好是妹妹白无瑕体重,编写程序完成白大壮 和白二壮身高的计算并输出,并计算白无瑕的体重输出是多少/ im ...

  5. Java学习_Day 18(学习内容:尚硅谷IO流JAVA零基础P598-P612)

    P598 IO流-缓冲流课后练习1 // 异或的加解密操作 P599 IO流-缓冲流课后练习2 P600 IO流-转换流概述与InputStreamReader的使用 // 字节输入流 ---> ...

  6. Java学习笔记18:Java_Map集合_HashMap集合_可变参数_Stream流_多线程_线程同步_生产者消费者

    文章目录 1.Map集合 1.1Map集合概述和特点[理解] 1.2Map集合的基本功能[应用] 1.3Map集合的获取功能[应用] 1.4Map集合的遍历(方式1)[应用] 1.5Map集合的遍历( ...

  7. JAVA萌新学习day17.18天 数据库MySQL

    JAVA萌新学习day17.18天 数据库MySQL基本操作 MySQLDemo // name age address 小明 18 大连 小明 18 大连 小明 18 大连/*** 1.数据库 -& ...

  8. java demo在哪里下载_[Java教程]Java学习 (一)、下载,配置环境变量,第一个demo...

    [Java教程]Java学习 (一).下载,配置环境变量,第一个demo 0 2016-03-01 22:00:18 一.在 http://www.oracle.com 下载java JDK 安装到自 ...

  9. java学习笔记12--异常处理

    java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...

  10. java学习笔记十三

    11. 凡是继承了FilterOutputStream或FilterInputStream的类都是过滤流,也就是说他们不能直接跟目标(键盘,文件,网络等,节点流可以)数据打交道,只能包装 Intput ...

最新文章

  1. JSON快速转C#实体类
  2. Servlet+MySQL使用DBCP数据库连接池实现用户登录
  3. cacti监控添加thold插件
  4. Kaneboy:临时启事:寻找在北京,熟悉SPS、ASP.NET,有两周空闲时间的朋友
  5. WebBrowser介绍——Javascript与C++互操作
  6. app中使用用户名/邮箱/手机号登录的思路分析
  7. CALayer 4 详解 -----转自李明杰
  8. Software Defined Perimeter白皮书
  9. win10samba服务器配置_win10访问samba配置共享目录,踩坑记
  10. keras 中 reuse 问题
  11. mysql可重复度能解决幻读吗
  12. 计算机专业技术卷,全国计算机技术与软件专业技术资格(水平)考试1990-2009软件设计师历年真题及答案...
  13. Eviews建立Var模型1
  14. FME中的栅格数据操作之十二——矢量数据栅格化
  15. Java | Java模拟实现扑克牌洗牌、发牌过程
  16. w ndoWs10开机时间长,如何解决Win10正式版开机慢且开机黑屏时间长问题【图文教程】...
  17. 怎么获取股票历史数据?获取股票历史数据Excel
  18. windows蓝屏原因速查表(常见蓝屏原因与解决方法速查(适用于Windows 7/8/8.1/10/11))
  19. android 打开和关闭输入法
  20. Mongodb副本集部署(Centos7)

热门文章

  1. 在Ubuntu 14.04 64bit上安装python-pyqt5软件包(python 2.7)
  2. 与后台通讯,首先要了解AMF协议
  3. 从 SSLTLS 的底层实现来看 网络安全的庞大复杂体系
  4. 关于timewait状态
  5. 使用jvisualvm远程监控tomcat(阿里云ECS)
  6. 性能测试之二——常用的性能测试策略
  7. Cacti安装详细步骤
  8. mysql主从库配置ps:mysql5.6
  9. 基于node.js的压缩合并安装
  10. winform动态的文字效果