JAVA中的异常可以大体上分为三大类:

Error,RuntimeException,Exception 基类Throwable派生的。

使用的方法也是基本一致的,都是通过关键字throw+Throwable的形式报告这个异常或错误。

但是这三类Throwable对象所代表的错误的含义和使用的场景是不同的:

1.Error,这个一般是指程序无法处理的异常,如内存溢出,进程被强行结束等。

2.RuntimeException是指由于代码编写方式不当而造成的异常,比如如下语句:

public voidfunc1()

{

String str1= null;

str1.subString(1);

}

还有一种情况就是,你设计了一个类,而且这个类有几个public方法。你希望这个类的使用者按一定的顺序来调用这个方法,

而如果调用者没有按照你预期的方式来调用,你就可以抛出一个RuntimeException告诉他需要先做一些什么样的处理。

比如下面这个SQLite读写的类:

packagecom.aj.client.jwtpt.storage;importandroid.content.Context;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQLiteOpenHelper;/*** Created by pwz on 2016/9/18.*/

public class MyBaseHelper extendsSQLiteOpenHelper {

MyBaseHelper(Context context) {super(context, "users.db", null, VERSION);

}public static final int VERSION = 1;

@Overridepublic voidonCreate(SQLiteDatabase db) {

db.execSQL("create table " + "table1" + "(" +

"id" + " text primary key not null," +

"title" +")");

}

@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion) {

}

}

packagecom.aj.client.jwtpt.storage;importandroid.content.ContentValues;importandroid.content.Context;importandroid.database.sqlite.SQLiteDatabase;/*** Created by pwz on 2016/9/18.*/

public classDBStorage {private SQLiteDatabase mDateBase = null;private static DBStorage _instance = null;public staticDBStorage getInstance() {if (_instance == null) {

_instance= newDBStorage();

}return_instance;

}privateDBStorage() {

}public voidinit(Context context)

{

mDateBase= newMyBaseHelper(context).getWritableDatabase();

}public voidinsertTitle(String sTitle)

{if(mDateBase==null)

{throw new RuntimeException("请先调用init方法");

}else{

ContentValues values= newContentValues();

values.put("title",sTitle);

mDateBase.insert("table1",null,values);

}

}

}

当使用者拿到DBStorage的实体之后,如果在没有调用init()方法之前就调用了insertTitle(String sTitle)就收到一个RuntimeException.

有人可能会问,我把throw new RuntimeException("请先调用init方法");替换成throw new Exception("请先调用init方法");有何不妥呢?

这里之所以用RuntimeException还因为它是一个非检查异常(Unchecked Exception),也就是说你不在抛出该异常对应的函数名后面声明throws RuntimeException

编译也能通过,而且通常情况下。你也不希望调用者去捕获处理这个异常,你仅仅是希望他知道,他的调用方式有问题。

3.Exception

这类异常,就更像是一般意义上的异常。它一般是指程序在运行时碰到了一些意外,但是程序还可以处理的情况。比如网络断开了,用户弹出了SD卡等等。这类异常属于检查异常

(checked exception),也就是说如果你在函数体内抛出了一个异常。函数名后面就必须用throws Exception的形式告诉调用者必须处理这个异常。否则编译会报错。

java异常分类三大类_JAVA 中异常的分类相关推荐

  1. java的异常有哪些类_Java中的异常类型有哪些

    1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...

  2. java bean的反射类_JAVA中反射机制五(JavaBean的内省与BeanUtils库)

    内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...

  3. java 对象 转换 工具类_Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)...

    通用excel与对象相互转换的工具类 前言:最近开发需要一个Excel批量导入或者导出的功能,之前用过poi-ooxml开发过一个导入的工具类,正好蹭着这次机会,把工具类的功能进行完善. 使用说明: ...

  4. java 不能继承的类_java中不能继承的类有哪些?

    在Java中,只要是被定义为final的类,也可以说是被final修饰的类,就是不能被继承的. 因为jdk的开发者认为,有一些最基本的类没要必要对开发者开放,如果用户继承时操作有误,很可能引入很多问题 ...

  5. java如何调用static类_Java中的static的使用指南

    一.Java中的static使用之静态变量 1.Java 中被static修饰的成员称为静态成员或类成员.它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享.且优先于对象存在.静态成员可以使 ...

  6. java 参数代替所有类_Java中的常用类

    1      常用类NO13 [ Int    Interger short  Short byte   Byte double Double float   Float Boolean Boolea ...

  7. zip: stdin: unexpected end of file tar: 归档文件中异常的 EOF tar: 归档文件中异常的 EOF tar: Error is not recoverable

    在linux解压报错 zip: stdin: unexpected end of file tar: 归档文件中异常的 EOF tar: 归档文件中异常的 EOF tar: Error is not ...

  8. 什么是计算机嵌套分类汇总,excel嵌套分类汇总 Excel表格中创建嵌套分类汇总和查看嵌套分类汇总明细的方法...

    excel嵌套分类汇总 Excel表格中创建嵌套分类汇总和查看嵌套分类汇总明细的方法,我们在工作中会遇到很多文章,像excel嵌套分类汇总这类问题应该大家也都遇到过吧,今天这篇excel嵌套分类汇总 ...

  9. java异常类_java中常见的异常类

    展开全部 从异常类的继承架构图中可以看出:Exception 类扩展出数个子类,其中 IOException.RunntimeException 是较常用的两种. 习惯上将 Error 与 Excep ...

最新文章

  1. 最简单的Evernote,最专业的活用方法 by 电脑玩物站长
  2. Golang之变量去哪儿
  3. SQL工作笔记-达梦(MySQL)将一个模式(库)中的一个表迁入到其他模式(库)
  4. python最新版安装图集_通过python简单的实现了plist、json图集的切割
  5. Linux内核和Linux发行版(了解)
  6. golang学习的点点滴滴:if、switch使用
  7. 【MySQL】java应用开发与实践读书笔记
  8. Java Spring Security 安全框架:(四)PasswordEncoder 密码解析器详解
  9. Blazeds文档(二)-------Blazeds体系结构(一)【转载】
  10. linux 安装 迅雷
  11. 用python写生日快乐说说_生日快乐的说说(精选50句)
  12. 均匀裁剪图片(3000X3000到1000X1000)
  13. 除了迅雷,目前还有什么下载软件好用?以下这3款你听过吗?
  14. Centos 7安装Quagga
  15. 用注销脚本清除上网所留下的痕迹
  16. vCenter 6.7 HTML web console连接vm黑屏
  17. OpenCV简介、OpenCV的发展历程
  18. Matlab app 实现键盘按键和鼠标单击按钮一样的功能
  19. python 异步 async/await -1.一文理解什么是协程
  20. Mac 自带拼音输入法卡顿?一行代码起效,百试百灵。

热门文章

  1. 经过这几年的磨练_通过构建这15个项目来磨练您JavaScript技能
  2. 自制口袋妖怪_承诺和口袋妖怪-我如何学会异步思考
  3. es6生成器_ES6生成器
  4. Python 中如何自动导入缺失的库?
  5. jQuery——高级(js对象、json、ajax)
  6. 单链表的增、删、查、改、python实现,超详细讲解
  7. Python 正则表达式re模块的使用
  8. working space和working set关系
  9. ScriptManager和ClientScriptManager
  10. 和Hibernate3.6相比,Hibernate 5.x中的增删改性能降低了