Java学习总结:18
认识异常
异常是程序中导致程序中断的一种指令流。
例:产生异常
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相关推荐
- JAVA学习日记(18)——反射和枚举
1.反射 1.1 定义 Java的反射(reflection)机制是在运行状态下,对于任何一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意属性和方法,既然能够拿到那么我们 ...
- java学习第18步——Docker镜像
Docker管理镜像的一个工具软件 1 简介(3个小时搞定) 1.1 Docker介绍 1.2 解决2个问题(开发时依赖的包版本不一致,软件不一致) 2 Docker和虚拟机 3 Docker镜像和容 ...
- Java学习笔记18
Objects是Java 7新增的一个工具类,它提供了一些工具方法来操作对象,这些工具方法大多是"空指针"安全的. Objects实现的方法如下: 在源码中Objects工具类中e ...
- java学习(18):巩固练习
/任务 4 白大壮和白二壮是双胞胎兄弟, 白大壮的身高增加1厘米正好是白二壮的身高 ,白二壮体重正好是妹妹白无瑕体重,编写程序完成白大壮 和白二壮身高的计算并输出,并计算白无瑕的体重输出是多少/ im ...
- Java学习_Day 18(学习内容:尚硅谷IO流JAVA零基础P598-P612)
P598 IO流-缓冲流课后练习1 // 异或的加解密操作 P599 IO流-缓冲流课后练习2 P600 IO流-转换流概述与InputStreamReader的使用 // 字节输入流 ---> ...
- Java学习笔记18:Java_Map集合_HashMap集合_可变参数_Stream流_多线程_线程同步_生产者消费者
文章目录 1.Map集合 1.1Map集合概述和特点[理解] 1.2Map集合的基本功能[应用] 1.3Map集合的获取功能[应用] 1.4Map集合的遍历(方式1)[应用] 1.5Map集合的遍历( ...
- JAVA萌新学习day17.18天 数据库MySQL
JAVA萌新学习day17.18天 数据库MySQL基本操作 MySQLDemo // name age address 小明 18 大连 小明 18 大连 小明 18 大连/*** 1.数据库 -& ...
- java demo在哪里下载_[Java教程]Java学习 (一)、下载,配置环境变量,第一个demo...
[Java教程]Java学习 (一).下载,配置环境变量,第一个demo 0 2016-03-01 22:00:18 一.在 http://www.oracle.com 下载java JDK 安装到自 ...
- java学习笔记12--异常处理
java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...
- java学习笔记十三
11. 凡是继承了FilterOutputStream或FilterInputStream的类都是过滤流,也就是说他们不能直接跟目标(键盘,文件,网络等,节点流可以)数据打交道,只能包装 Intput ...
最新文章
- JSON快速转C#实体类
- Servlet+MySQL使用DBCP数据库连接池实现用户登录
- cacti监控添加thold插件
- Kaneboy:临时启事:寻找在北京,熟悉SPS、ASP.NET,有两周空闲时间的朋友
- WebBrowser介绍——Javascript与C++互操作
- app中使用用户名/邮箱/手机号登录的思路分析
- CALayer 4 详解 -----转自李明杰
- Software Defined Perimeter白皮书
- win10samba服务器配置_win10访问samba配置共享目录,踩坑记
- keras 中 reuse 问题
- mysql可重复度能解决幻读吗
- 计算机专业技术卷,全国计算机技术与软件专业技术资格(水平)考试1990-2009软件设计师历年真题及答案...
- Eviews建立Var模型1
- FME中的栅格数据操作之十二——矢量数据栅格化
- Java | Java模拟实现扑克牌洗牌、发牌过程
- w ndoWs10开机时间长,如何解决Win10正式版开机慢且开机黑屏时间长问题【图文教程】...
- 怎么获取股票历史数据?获取股票历史数据Excel
- windows蓝屏原因速查表(常见蓝屏原因与解决方法速查(适用于Windows 7/8/8.1/10/11))
- android 打开和关闭输入法
- Mongodb副本集部署(Centos7)