Java的知识点19——异常机制Exception
异常(Exception)的概念
异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。
Java是采用面向对象的方式来处理异常的。处理过程:
1. 抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE。
2. 捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。
异常分类
JDK 中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有异常对象都是派生于Throwable类的一个实例。如果内置的异常类不能够满足需要,还可以创建自己的异常类。
Error:Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
Exception: Exception是程序本身能够处理的异常,如:空指针异常(NullPointerException)、数组下标越界异常(ArrayIndexOutOfBoundsException)、类型转换异常(ClassCastException)、算术异常(ArithmeticException)等。
通常Java的异常可分为:
1. RuntimeException 运行时异常
2. CheckedException 已检查异常
RuntimeException运行时异常: 派生于RuntimeException的异常,如被 0 除、数组下标越界、空指针等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序可读性和运行效率影响很大。 因此由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理)。这类异常通常是由编程错误导致的,所以在编写程序时,并不要求必须使用异常处理机制来处理这类异常,经常需要通过增加“逻辑处理来避免这些异常”。
NumberFormatException异常
package cn.dym09;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test03 {public static void main(String[] args) {String str="45645wefrewgf";Pattern p=Pattern.compile("^\\d+$");Matcher m=p.matcher(str);if(m.matches()) {//如果str匹配代表数字的正则表达式,才会转换System.out.println(Integer.parseInt(str));}}
}
CheckedException:IOException、SQLException等以及用户自定义的Exception异常。 这类异常在编译时就必须做出处理,否则无法通过编译。
异常的处理方式有两种:使用“try/catch”捕获异常、使用“throws”声明异常。
捕获异常: 捕获异常是通过3个关键词来实现的:try-catch-finally。用try来执行一段程序,如果出现异常,系统抛出一个异常,可以通过它的类型来捕捉(catch)并处理它,最后一步是通过finally语句为异常处理提供一个统一的出口,finally所指定的代码都要被执行(catch语句可有多条;finally语句最多只能有一条,根据自己的需要可有可无)。
注: 一个try语句必须带有至少一个catch语句块或一个finally语句块 。
catch: u-toString ()方法,显示异常的类名和产生异常的原因
u-getMessage()方法,只显示产生异常的原因,但不显示类名。
u-printStackTrace()方法,用来跟踪异常事件发生时堆栈的内容。
catch捕获异常时的捕获顺序:如果异常类之间有继承关系,在顺序安排上需注意。越是顶层的类,越放在下面,再不然就直接把多余的catch省略掉。 也就是先捕获子类异常再捕获父类异常。
finally:finally中关闭程序块已打开的资源,比如:关闭文件流、释放数据库连接等。
注:1. 即使try和catch块中存在return语句,finally语句也会执行。是在执行完finally语句后再通过return退出。
2. finally语句块只有一种情况是不会执行的,那就是在执行finally之前遇到了System.exit(0)结束程序运行。
package cn.dym09;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Test05 {public static void main(String[] args) {FileReader reader=null;try {reader =new FileReader("d://a.txt");char c=(char) reader.read();char c2=(char)reader.read();}catch(FileNotFoundException e){e.printStackTrace();}catch(IOException e) {e.printStackTrace();}finally {try {if(reader!=null) {reader.close();}}catch(Exception e){e.printStackTrace();}}}
}
throws: 当CheckedException产生时,不一定立刻处理它,可以再把异常throws出去。在方法中使用try-catch-finally是由这个方法来处理异常。但是在一些情况下,当前方法并不需要处理发生的异常,而是向上传递给调用它的方法处理。 如果一个方法抛出多个已检查异常,就必须在方法的首部列出所有的异常,之间以逗号隔开。
package cn.dym09;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;public class Test06 {public static void main(String[] args) {try {readFile("joke.txt");}catch(FileNotFoundException e) {System.out.println("所需文件不存在!");}catch(IOException e) {System.out.println("文件读写错误!");}}public static void readFile(String fileName) throws FileNotFoundException,IOException{FileReader in=new FileReader(fileName);int tem=0;try {tem=in.read();while(tem!=-1) {System.out.print((char)tem);tem=in.read();}}finally {in.close();}}
}
注: 1. 方法重写中声明异常原则:子类重写父类方法时,如果父类方法有声明异常,那么子类声明的异常范围不能超过父类声明的范围。
自定义异常:自定义异常类应该包含2个构造器:一个是默认的构造器,另一个是带有详细信息的构造器。
package cn.dym09;class IllegalAgeException extends Exception{//默认构造器public IllegalAgeException() {super(); }//带有详细信息的构造器,信息存储在message中public IllegalAgeException(String message) {super(message); }
}class Person{private String name;private int age;public void setName(String name) {this.name=name;}public void setAge(int age) throws IllegalAgeException{if(age<0) {throw new IllegalAgeException("人的年龄不应该为负数");}this.age=age;}public String toString() {return "name is "+name+" and age is "+age;}
}public class Test07 {public static void main(String[] args) {Person p=new Person();try {p.setName("代止兮");p.setAge(-9);}catch(IllegalAgeException e) {e.printStackTrace();System.exit(-1);}System.out.println(p);}
}
使用异常机制的建议:1.要避免使用异常处理代替错误处理,这样会降低程序的清晰性,并且效率低下。
2.处理异常不可以代替简单测试---只在异常情况下使用异常机制。
3.不要进行小粒度的异常处理---应该将整个任务包装在一个try语句块中。
4.异常往往在高层处理
Java的知识点19——异常机制Exception相关推荐
- Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)
原文:Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制) 异常机制和File类 异常机制 基本概念 异常就是"不正常"的含义,在 Java 语言中主要指 ...
- Java基础篇:异常机制
目录: 一.为什么使用异常: 二.异常体系: 三.异常的捕捉--try.catch.finally: 四.关于异常的题: 五.自定义异常: 六.异常链: 七.异常的使用误区: 八:throw.thro ...
- 解释java程序中的异常机制_Java编程中的异常机制
本文旨在以初学者的角度来学习Java异常的知识,尽量简单,一些细枝末节的知识不会讲述,但不影响对知识的掌握. (比如try-catch可以嵌套,不太会这么用) 1.什么是异常 我们先举个例子 int ...
- java catch throwable_如何处理异常? catch Exception OR catch Throwable
在Java中,当你需要统一处理异常的时候,你是会选择catch (Exception),还是直接catch (Throwable)? Java的异常体系 Throwable: Java中所有异常和错误 ...
- C++异常处理之abort()、异常机制、exception 类
程序运行时有时会遇到错误,导致程序无法正常运行下去,通常程序员会试图预防这种意外.C++异常为处理这种情况提供了一种功能强大而灵活的工具.这里仅介绍三种: 调用abort()函数 异常机制 excep ...
- java 异常机制_深入理解Java异常处理机制
一.引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我,这个东西可不是想象中 ...
- Java面试知识点:Date类、异常
问题:Java面试知识点:Date类.异常 答案: 1.Date类 代码如下: (1)创建日期: package com.xy;import java.util.Date;/*** @ProjectN ...
- 聊聊Java的异常机制问题
本文分享自华为云社区<Java知识点问题精选之异常机制>,原文作者:breakDraw . java异常指在程序运行时可能出现的一些错误,如:文件找不到.网络连接失败.非法参数等.异常是一 ...
- java深入浅出解析异常机制
java中的异常处理的目的在于通过使用少量的代码,使得程序有着强大的鲁棒性,并且这种异常处理机制会让你变得非常自信:你的应用中没有你没处理过的错误.处理异常的相关手法看起来是这么的难懂,但是如果掌握的 ...
最新文章
- 机器学习评价指标ROC AUC
- python3语法、菜鸟教程_Python3
- asp.net MVC的EF与easyui DataGrid数据绑定
- 实时监控Cat之旅~对Get和Post进行封装,支持分布式消息树
- 表头合并_多个Excel表格合并数据麻烦?试试Power Query轻松帮你解决
- 清华大学医学院 | 体外成熟人卵单细胞多组学研究及总结干细胞分化为配子进展文章...
- 每日一道python的leetcode:冒泡排序
- 历届二级c语言pdf,历年全国计算机二级C语言题库.pdf
- 1.5 万字 + 40 张图解 HTTP 常见面试题(值得收藏)
- 叉乘应用:判断三角形方向正反/三个点顺时针逆时针
- 条码标签软件中如何在二维码输入汉字
- 高德3D动态地图—旋转视角
- 一、计算机基础: 特点、数制、编码、组成
- Java开发专家阿里P6-P7面试题大全及答案汇总(持续更新)
- java edt,Java Swing 学问篇 - EDT
- Piezo Mac 优秀的录音软件
- useradd 无法打开密码文件
- 手机端问题IOS及解决办法
- dw6能编译asp吗_dreamweaver运行asp文件的方法
- 点餐系统mysql设计,酒店点餐系统的设计与实现(JSP,HTML5,MySQL)(含录像)
热门文章
- 在Docker中体验数据库之MySql
- window环境apache服务器在本地添加域名
- 《深入理解JAVA虚拟机》——学习笔记
- [Eclipse的Maven项目搭建,仅为测试Maven功能]如何在Eclipse下搭建Maven项目
- iOS之runtime
- FineUI第七天---文件上传
- android+Unity3D游戏开发之简单的物体运动
- Excel exportExcel.cs 一个生成.xls文件的例子
- jdbc mysql 自动重连_JDBC实现Mysql自动重连机制的方法详解
- IBM发表论文:可能已找到处理量子计算退相干的方法