菜鸟学Java(十八)——异常

时间:2022-03-21 11:29:05

每个学编程的人在编程的过程中都会遇到各种异常。那么当我们遇到异常的时候该怎么处理呢?针对不同的异常我们又该采取什么具体的处理方式呢?这些问题在我开始学编程的很长一段时间里我都不太清楚,还好随着不断的学习,慢慢地对它有了一些了解。下面我们一起看看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(十八)——异常的更多相关文章

  1. 菜鸟学Java(八)——dom4j详解之读取XML文件

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...

  2. 菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven)

    菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven) 2012-02-04 13:11 by 虫师, 11419 阅读, 5 评论, 收藏, 编辑 之前我就讲过一种方试来搭 ...

  3. 菜鸟学Java(十五)——Java反射机制(二)

    上一篇博文<菜鸟学编程(九)——Java反射机制(一)>里面,向大家介绍了什么是Java的反射机制,以及Java的反射机制有什么用.上一篇比较偏重理论,理论的东西给人讲出来总感觉虚无缥缈, ...

  4. 菜鸟学Java(十四)——Java反射机制(一)

    说到反射,相信有过编程经验的人都不会陌生.反射机制让Java变得更加的灵活.反射机制在Java的众多特性中是非常重要的一个.下面就让我们一点一点了解它是怎么一回事. 什么是反射 在运行状态中,对于任意 ...

  5. 菜鸟学java开篇

    从事it工作已有接近两年的时间了, 一直从事的是php的工作, 一直都想学java ,原因就不多说了, 毕竟优秀的php程序员,都会是一个其他方面的高手, 例如java ,并不是说java有多好,ph ...

  6. 菜鸟学Java(二十二)——重新认识泛型

    泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引 ...

  7. 菜鸟学Java(十二)——搭建一个完整的Java开发环境

    作为一个Java程序员,配置一个java开发环境是必备的技能,今天给广大菜鸟初学者补上一课.环境的配置,大概就分三个1,JDK 2,Tomcat(或者其他的)3,eclipse(或者myeclipse ...

  8. 菜鸟学Java(二十二)——又一次认识泛型

    泛型是Java SE 1.5的新特性,泛型的本质是參数化类型,也就是说所操作的数据类型被指定为一个參数.这样的參数类型能够用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言 ...

  9. 菜鸟学Java(二十)——你知道long和Long有什么区别吗?

    Java中数据类型分两种: 1.基本类型:long,int,byte,float,double 2.对象类型:Long,Integer,Byte,Float,Double其它一切java提供的,或者你 ...

随机推荐

  1. 算法:poj1066 宝藏猎人问题。

    package practice; import java.util.Scanner; public class TreasureHunt { public static void main(Stri ...

  2. Python 代码优化常见技巧

    代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方 ...

  3. java适配器模式随笔记

    今天学习了一下java中的适配器模式,在这里做个记录,方便以后查看 什么是适配器,适配就是连接源到目标的中间件,简单的例子就是我们的港水货手机充电器是大三角,我们想要在大陆正常使用我们需要一个转接充电 ...

  4. 用linux的shell脚本把目录下面的所有文件的文件内容中的小写字母改成大写字母

    最近工作中,产品组的同事给出的数据里面都是小写字母 ,但是引擎组的同事要求他们拿到的从数据里面解析出的结构体里面存储的要都是大写结构,这让我们数据预处理组很尴尬啊,,所以在写了个这么样的脚本,在解析数 ...

  5. ubuntu16&period;04x下搜狗输入法无法输入中文

    使用如下命令: cd ~/,config find . -name sogou* 找到sogou-qimpanel ,sudo rm -r ./sogou-qimpanel删除 find . -nam ...

  6. javascript的作用域和优先级

    变量的作用域是在定义时决定的,不是在运行时活动对象是在运行时决定的?如果就创建一个对象,使用完毕就完了,就使用json字面量的方式如果对象被反复创建,反复使用,就使用自定义的构造函数方式优先级内部变量 ...

  7. ReactiveCocoa&lpar;I&rpar;

    ReactiveCocoa常见类 1. RAC中最核心的类RACSiganl: RACSiganl:信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据 解析: 信号类 ...

  8. 大数据处理框架之Strom:认识storm

    Storm是分布式实时计算系统,用于数据的实时分析.持续计算,分布式RPC等. (备注:5种常见的大数据处理框架:· 仅批处理框架:Apache Hadoop:· 仅流处理框架:Apache Stor ...

  9. Java 读取Excel 文件内容

    在一个项目中,有一个需求,是把excel文件的内容转换为xml格式展示.在学习如何操作的过程中,首先是如何获取excel文件,其中操作的代码如下: 1.首先是导入需要的 jar, 下载地址:https ...

  10. 20155338 《网络攻防》 Exp7 网络欺诈防范

    20155338 <网络攻防> Exp7 网络欺诈防范 基础问题回答 通常在什么场景下容易受到DNS spoof攻击 在一些公共场所,看到有免费的公用WIFI就想连的时候就容易受到 在日常 ...