Java基础学习(七) - 异常处理
1.异常概念
异常指的是程序在执行过程中出现的非正常的情况,导致JVM的非正常停止。在Java中,异常是一个类,产生异常就是创建异常对象并抛出一个异常对象。
异常指的并不是语法错误,语法错误,编译不会通过,而是编译通过后,程序执行异常。
异常的作用是帮助我们找到程序中的问题。
2.异常产生过程解析
- public class TestException {
- public static void main(String[] args){
- int[] arr = {1,2,3};
- System.out.println(arr[3]);
- }
- }
运行过程解析:
- 在 arr 数组中提取索引 3,由于数组没有索引3,导致了运行异常,JVM对这个异常做了识别,并抛出异常给 main 方法。
- 由于 main 方法并没有异常处理,main 方法又把异常返回给 JVM。
- JVM 收到异常后,打印异常详细信息到控制台,同时中断程序。
3.异常类
java.lang.Throwable 是异常的根类。
Throwable 体系:
- java.lang.Error:严重错误,不在我们处理范围内。
- java.lang.Exception:平时所说的异常是此类。我们可以通过修改代码纠正错误,使程序能正常运行。异常又分为checked异常(编译异常)和runtime异常(运行异常)。
Throwable 常用方法:
- public void printStackTrace():打印异常的详细信息。
- public String getMessage():获取异常发生的原因。
4.异常处理
Java 异常处理的五个关键字: try、catch、finally、throw、throws。
- throw 抛出异常。
- throws 声明异常。
- try...catch...finally 捕获异常。
throw:
- public class TestException {
- public static void main(String[] args){
- int[] arr = {1,2,3};
- int index = 3;
- if (index < 0 || index > arr.length -1){
- throw new ArrayIndexOutOfBoundsException("数组越界");
- }
- System.out.println(arr[index]);
- }
- }
throws 用于方法声明之上,表示当前方法不处理异常,并提醒该方法的调用者来处理异常。
若该方法可能有多种异常情况产生,那么在throws后面可以写多个异常类,用逗号隔开。
- public class TestException {
- public static void getIndex(int index) throws ArrayIndexOutOfBoundsException{
- int[] arr = {1,2,3};
- if (index < 0 || index > arr.length -1){
- throw new ArrayIndexOutOfBoundsException("数组越界");
- }
- }
- public static void main(String[] args) throws ArrayIndexOutOfBoundsException{
- getIndex(4);
- }
- }
try-catch 用于对异常有针对性的语句进行捕获,可以对出现的异常进行制定方式处理。finally代码块无论有无捕获异常都会执行。
- public class TestException {
- public static void main(String[] args){
- int[] arr = {1,2,3};
- //捕获数组越界异常
- try{
- System.out.println(arr[4]);
- }catch (ArrayIndexOutOfBoundsException e){
- e.printStackTrace();//获取异常详细信息
- }finally{
- System.out.println("程序继续执行");
- }
- //继续执行
- System.out.println(arr[2]);
- }
- }
可以写多个catch 捕获多个异常。需要注意的是catch捕获异常不能相同,异常子类一般要写在异常父类上面,否则异常被父类捕获,子类无法捕获详细异常。
在继承关系当中,如果父类抛出异常,那么子类重写父类方法时,抛出和父类相同的异常或者不抛出异常。如果父类没有抛出异常,子类重写父类该方法时也不可抛出异常,若该子类方法产生异常,只能捕获不能声明抛出。
5.自定义异常类
原理:自定义异常类继承 Exception 根类。
- //自定义异常类
- class CustomException extends Exception{
- //无参构造方法
- public CustomException(){};
- //有参
- public CustomException(String msg){
- super(msg);//继承Exception 构造方法
- }
- }
- //测试
- public class TestCustomException {
- public static void main(String[] args){
- int[] arr = {1,2,3};
- int index = 3;
- try{
- if (index<0 || index>arr.length-1){
- throw new CustomException("数组越界");
- }
- }catch (CustomException e){
- e.printStackTrace();
- }
- }
- }
温馨提示
- 如果您对本文有疑问,请在评论部分留言,我会在最短时间回复。
- 如果本文帮助了您,也请评论关注,作为对我的一份鼓励。
- 如果您感觉我写的有问题,也请批评指正,我会尽量修改。
Java基础学习(七) - 异常处理的更多相关文章
- java基础学习总结——异常处理
一.异常的概念 异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误.出现错误时观察错误的名字和行号最为重要.
- Java基础学习之异常处理(6)
@ 目录 1.异常是什么 1.1.Error 1.2.Exception 2.异常处理机制 2.1.捕获异常 2.2.抛出异常 3.自定义异常 3.1.自定义检查性异常 3.2.自定义运行时异常 1. ...
- 转载-java基础学习汇总
共2页: 1 2 下一页 Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3 Java基础学习总结——Java对象的序列化和 ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397 文章- 0 评论- 78 JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- Java基础学习中一些词语和语句的使用
在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...
- java基础学习总结——开篇
java是我学习的第一门编程语言,当初学习java基础的时候下了不少功夫,趁着这段时间找工作之际,好好整理一下以前学习java基础时记录的笔记,当作是对java基础学习的一个总结吧,将每一个java的 ...
随机推荐
- hdu6376 度度熊剪纸条 思维
度度熊剪纸条 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- SpringAop应用
1. 引言 为什么要使用Aop?贴一下较为官方的术语: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方 式和运行期动态代理实现程序功能 ...
- 接口压测工具WRK的学习与使用
之前一直在使用jmeter,第一次接触wrk,记录下使用过程以便自己再次使用. 首先,WRK是linux系统上才可以使用的工具,我也不想剑走偏锋的去研究如何让wrk可以在windows系统上使用. 临 ...
- 【Spring】 IOC Base
一.关于容器 1. ApplicationContext和BeanFactory 2. 配置文件 XML方式 Java-configuration 方式 @Configuration 3. 初始化容器 ...
- 【Offer】[11] 【旋转数组的最小元素】
题目描述 思路分析 Java代码 代码链接 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...
- iptables的删除命令中的相关问题
最近在做一个VPN中间件的配置工作,在配置iptables的时候,当用户想删除EIP(即释放当前连接),发现使用iptables的相关命令会提示错误. iptables: Bad rule (does ...
- tomcat下载镜像地址
镜像地址:http://mirrors.cnnic.cn/apache/tomcat/ typora编写makedown文件 羚羊云api开发:http://doc.topvdn.com/api/in ...
- Cookie的临时存储和定时存储
Cookie解决了不同请求的数据共享问题.是由服务器保存在客户端的小文本文件,包含了用户的信息,可以避免用户重复输入用户名和密码进行登录.浏览器请求Cookie,服务器响应时返回Cookie,浏览器存 ...
- python接口自动化测试七:获取登录的Cookies
python接口自动化测试七:获取登录的Cookies,并关联到下一个请求 获取登录的cookies:loginCookies = r.cookies 把获取到的cookies传入请求:cooki ...
- Java NIO之理解I/O模型(二)
前言 上一篇文章讲解了I/O模型的一些基本概念,包括同步与异步,阻塞与非阻塞,同步IO与异步IO,阻塞IO与非阻塞IO.这次一起来了解一下现有的几种IO模型,以及高效IO的两种设计模式,也都是属于IO ...