Java学习分享-常见的异常类型
在学习异常的时候,不免被各种各样的异常类型弄晕,本文主要是从具体的异常类型为出发点来进一步的对异常有一个更清晰的认识。如果能做到对各种常见异常心中有数,就能在写代码的时候有意识的避免一些逻辑上的错误,抛出异常的时候也能快速判断出为什么会出现异常,属于什么类型的异常,是否必须处理,如何改进代码来避免等。为对各种常见异常类型有一直观认识,下面是我自己整理的常见异常类型的一张图表供大家参考~
一、常见异常一览图
二、异常的分类
异常在Java中是以类的形式存在的。Throwable类是所有错误和异常的超类,Throwable有两个直接子类:一个是Error,一个是Exception,表示可抛出的。
Error:
Error类及其子类,表示程序在运行过程中出现了严重的错误,一般是和JVM相关的,而这些问题不应该再交给Java的异常处理机制来处理,程序会直接崩溃掉。Error类错误发生时,JVM一般会选择线程终止。按照Java的惯例,不应该实现任何的新的Error子类。
Exception:
Exception类及其子类,表示的是程序如果设计合理的话就不会发生的异常,即使发生,也是程序可以捕获并且处理的异常。Exception异常又可分为两大类:
编译时异常:Exception的直接子类,也就是除RuntimeException及其子类之外的Exception异常称为编译时异常。
- 编译时异常并不是说程序发生在编译阶段,而是程序员必须在编写阶段就对这些程序进行处理,否则程序无法编译通过,因此也叫受检异常。
- 从语法角度讲,编译时异常必须进行预先处理,要么上抛,要么捕获,否则不能通过编译!
运行时异常:运行时异常
Animal a6 = new Bird();
Cat c = (Cat)a6;
分析:程序会编译通过,因为对编译器来说,Animal和Cat之间是存在继承关系的,是可以向下转型的,Cat c = (Cat)a6;没有语法错误,编译通过。但是在运行阶段,引用变量a6底层实际上对应的是一只Bird,Bird和Cat之间是不存在继承关系的,将Bird类型强转为Cat类型就会抛出
System.out.println(10/0);
String str=null;
System.out.println(str.equals("hello"));
Exception in thread "main" java.lang.NullPointerException,所以最好在调用某个对象的方法的时候先判断以下此对象是否为null
6、NumberFormatException(数字格式异常)
NumberFormatException通常出现在试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常.
Integer.parseInt("Hello123");
Exception in thread "main" java.lang.NumberFormatException: For input string: "Hello123",这表明"Hello123"不是一个可解析为数字的字符串
........
编译时异常
1、CloneNotSupportedException(克隆不支持异常)
Object中的克隆方法clone()被调用,来克隆对象,但该对象的类没有实现可克隆接口Cloneable时,就会抛出异常。要实现克隆,必须先实现Cloneable接口,并重写clone()方法来实现,否则就会抛出异常CloneNotSupportedException
2、SQLException
SQLException提供关于数据库访问错误类的信息
3、ClassNotFoundException(类找不到异常)
当动态加载class对象时找不到对应的类时抛出该异常,原因可能是要加载的类不存在或者类名写错了!
4、IOException
一般在读写数据的时候会出现此类异常,由失败或中断的I/O操作引起,常见的子类有EOFException、FileNotFoundException等
........
以上是对常见的异常类型一些简单的总结,在以后碰到新的异常类型的时候还是要多多完善,如有不当之处欢迎大家指正!
- 点赞
- 收藏
- 关注作者
评论(0)