菜鸟学Java(十八)——异常
每个学编程的人在编程的过程中都会遇到各种异常。那么当我们遇到异常的时候该怎么处理呢?针对不同的异常我们又该采取什么具体的处理方式呢?这些问题在我开始学编程的很长一段时间里我都不太清楚,还好随着不断的学习,慢慢地对它有了一些了解。下面我们一起看看Java中的各种异常。
我们先看下面这张图:
如图所示,Java中所有的异常都是从Throwable继承而来,Throwable被定义在jave.lang包中,并且有两个直接子类——Exception和Error。其中Error指的是Java虚拟机的内部系统错误,而且通常情况下我们无法处理此类错误。今天我们主要讨论Exception,所有其他的异常都是Exception的子类,而且只有这些异常才是程序员可以处理的。
如上图所示,Exception有两个重要的直接子类,分别是IOException和RuntimeException。IOException类用于处理程序的输入输出异常,包括键盘锁定或文件异常等;RuntimeException类用于处理从程序逻辑中产生的错误,例如访问数组下标越界、空指针异常等。
常见异常:
|
异常类名称 |
异常类含义 |
|
ArithmeticException |
算术异常类 |
|
ArrayIndexOutOfBoundsException |
数组下标越界异常类 |
|
ArrayStoreException |
将与数组类型不兼容的值赋值给数组元素时抛出的异常 |
|
ClassCastException |
类型强制转换异常类 |
|
ClassNotFoundException |
未找到相应类异常 |
|
EOFException |
文件已结束异常类 |
|
FileNotFoundException |
文件未找到异常类 |
|
IllegalAccessException |
访问某类被拒绝时抛出的异常 |
|
InstantiationException |
试图通过newInstance()方法创建一个抽象类或抽象接口的实例时抛出的异常 |
|
IOException |
输入输出异常类 |
|
NegativeArraySizeException |
建立元素个数为负数的数组异常类 |
|
NullPointerException |
空指针异常类 |
|
NumberFormatException |
字符串转换为数字异常类 |
|
NoSuchFieldException |
字段未找到异常类 |
|
NoSuchMethodException |
方法未找到异常类 |
|
SecurityException |
小应用程序(Applet)执行浏览器的安全设置禁止的动作时抛出的异常 |
|
SQLException |
操作数据库异常类 |
|
StringIndexOutOfBoundsException |
字符串索引超出范围异常 |
|
IndexOutOfBoundsException |
当某对象(如数组或字符串)的索引超出范围时抛出该异常 |
1、如果无法处理某个异常,那就不要捕获它;
2、捕获异常要按照从小到大的顺序(例如应该先捕获NullPointerException,然后RuntimeException,最后Exception);
3、尽量在靠近异常被抛出的地方捕获异常;
4、在捕获异常的地方将它记录到日志中,除非您打算将它重新抛出;
5、按照您的异常处理必须多精细来构造您的方法;
6、需要用几种类型的异常就用几种,尤其是对于应用程序异常。
捕获适当的异常
正确地处理异常并不是一项轻松的任务,这是因为异常的处理有时会导致程序出现其他不明行为。不过,以下三条规则可以帮助你避免错误处理异常所可能遭遇的风险。
规则 #1: 总是捕获扔出异常的类型而不要理睬异常的超类。 为了遵守通常的代码习惯,你可以采用Exception类的大写字母作为变量名,如下所示:
catch(FileNotFoundException fnfe)
以及
catch(SQLException sqle)
规则 # 2: 决不让catch块留空。在很多情况下虽然确实编写了try/catch块但在代码的catch部分却什么都没有做。或者,如果采用了日志API(Logging API),那么请编写代码把异常写到日志中。
规则 # 3: 决不扔出Exception基类的实例。开发人员应当总是扔出自己创建的异常类。
OK,以上就是我总结整理的关于Java异常的一些学习心得,希望能够给看这篇文章的人一点点帮助。
菜鸟学Java(十八)——异常的更多相关文章
- 菜鸟学Java(八)——dom4j详解之读取XML文件
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...
- 菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven)
菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven) 2012-02-04 13:11 by 虫师, 11419 阅读, 5 评论, 收藏, 编辑 之前我就讲过一种方试来搭 ...
- 菜鸟学Java(十五)——Java反射机制(二)
上一篇博文<菜鸟学编程(九)——Java反射机制(一)>里面,向大家介绍了什么是Java的反射机制,以及Java的反射机制有什么用.上一篇比较偏重理论,理论的东西给人讲出来总感觉虚无缥缈, ...
- 菜鸟学Java(十四)——Java反射机制(一)
说到反射,相信有过编程经验的人都不会陌生.反射机制让Java变得更加的灵活.反射机制在Java的众多特性中是非常重要的一个.下面就让我们一点一点了解它是怎么一回事. 什么是反射 在运行状态中,对于任意 ...
- 菜鸟学java开篇
从事it工作已有接近两年的时间了, 一直从事的是php的工作, 一直都想学java ,原因就不多说了, 毕竟优秀的php程序员,都会是一个其他方面的高手, 例如java ,并不是说java有多好,ph ...
- 菜鸟学Java(二十二)——重新认识泛型
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...
- 菜鸟学Java(十二)——搭建一个完整的Java开发环境
作为一个Java程序员,配置一个java开发环境是必备的技能,今天给广大菜鸟初学者补上一课.环境的配置,大概就分三个1,JDK 2,Tomcat(或者其他的)3,eclipse(或者myeclipse ...
- 菜鸟学Java(二十二)——又一次认识泛型
泛型是Java SE 1.5的新特性,泛型的本质是參数化类型,也就是说所操作的数据类型被指定为一个參数.这样的參数类型能够用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言 ...
- 菜鸟学Java(二十)——你知道long和Long有什么区别吗?
Java中数据类型分两种: 1.基本类型:long,int,byte,float,double 2.对象类型:Long,Integer,Byte,Float,Double其它一切java提供的,或者你 ...
随机推荐
- python之获取微信服务器的ip地址
# -*- coding: cp936 -*- #PYTHON 27 #xiaodeng #获取微信服务器的ip地址 import urllib url='https://api.weixin.qq. ...
- windows下命令行终端使用rz上传文件参数详解
rz命令: (X) = option applies to XMODEM only (Y) = option applies to YMODEM only (Z) = option applies t ...
- Spring Boot 使用Jar打包发布, 并使用 Embedded Jetty/Tomcat 容器
Jar包发布 在项目pom.xml中, 如果继承了Spring Boot的starter parent, 那么默认已经包含打包需要的plugins了, 设置为jar就能直接打包成包含依赖的可执行的ja ...
- [转载]Ubuntu安装配置 git 服务器和客户端
原文地址:Ubuntu安装配置 git 服务器和客户端作者:ding404 1.配置前准备 服务器:安装ssh server另外还装了gitosis做git的权限管理 sudo apt-get ins ...
- Swift中的map 和 flatMap 原理及用法
之前对这两个概念有点糊,今天正好遇到一个相关需求,才深入了解了下. 需求如下: 大概就是对一个数组的model,重构成一个新model,返回得到一个新数组 用map很容易实现,不过后来我需要对其中进行 ...
- QQ模仿之弹窗ADDFriend事件
大家自己分析吧 #pragma once //演示QQ2009 #define WINDOW_WIDTH 250 //窗口宽度 #define WINDOW_HEIGHT 600 //窗口高度 str ...
- Redis学习之路(004)- 报错及问题
在i配置编译的过程中,遇到一下问题: 1. /redis_test: error while loading shared libraries: libhiredis.so.0.13: cannot ...
- Ubuntu菜鸟入门(十四)—— 设置root密码
sudo su - 输入你的账户的密码 passwd 输入新的root密码 再次输入新的root密码
- ubuntu(14.04) 下安装yaf拓展
#wget http://pecl.PHP.net/get/yaf-2.2.9.tgz #tar zxvf yaf-.tgz #cd yaf- [root@bogon yaf-]# whereis p ...
- 记录EntityValidationErrors的详细信息
0.一个问题 使用过EF的人相信都会遇到Validation failed for one or more entities. See ‘EntityValidationErrors’这种异常,这是由 ...