菜鸟学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提供的,或者你 ...
随机推荐
- CentOS7 下 配置Docker远程访问 与 windows下使用maven构筑Spring Boot 的 Docker镜像到远程服务端
1.设置Docker服务端,以支持远程访问: 修改docker服务端配置文件,命令: vim /usr/lib/systemd/system/docker.service 修改后: [Unit] De ...
- Netstat命令详解(windows下)
Netstat 用于显示与IP .TCP .UDP 和ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况. 如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,T ...
- Inno Setup入门(八)——有选择性的安装文件
这主要使用[Components]段实现,一个演示的代码如下: [setup] ;全局设置,本段必须 AppName=Test AppVerName=TEST DefaultDirName=" ...
- 用命令行发邮件——让你更加了解smtp
本文演示用命令行发送邮件的过程. SMTP 首先介绍下smtp协议--简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是事实上的在Internet传输em ...
- 【C#入门经典视频教程】-第001课-C#入门-认识C#
C#入门-认识C# C ---> C++ --> C# (C++++) j++ j++ 有一门可能比这个C#更流行的语言 java 使用的教程:c#入门经典第五版 操作系统:windows ...
- kubernetes-pod分配CPU和RAM资源以及计算方法
例子: Containers: cpu-ram-demo-container: ... image: busybox:latest resources: Limits: cpu: 1 memory: ...
- 一个使用Servlet文件实现文件下载的实例
一个使用Servlet文件实现文件下载的实例 (可以扩充本实例实现:对用户隐藏他要下载文件的路径,或者在下载文件时要做一些其他的工作,如检查用户有没有下载此文件的权限等) 了解在Servlet中如何控 ...
- db_table--Spring Security3.1 最新配置实例
2011-04-28 这几天学习了一下Spring Security3.1,从官网下载了Spring Security3.1版本进行练习,经过多次尝试才摸清了其中的一些原理.本人不才,希望能帮助大家. ...
- [Spring学习笔记 2 ]装配各种类型的属性 map,list,array,null,properties
一.spring Ioc容器补充(1) Spring Ioc容器 DI(依赖注入): 注入的方式:设值方法注入setter(属性注入)/构造子注入(构造函数传入依赖的对象)/字段注入field(注解) ...
- session会话保持原理
1. 什么是会话保持? 会话保持是负载均衡最常见的问题之一,也是一个相对比较复杂的问题.会话保持有时候又叫做粘滞会话(Sticky Sessions).会话保持是指在负载均衡器上的一种机制,可以识别客 ...