博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java异常处理
阅读量:2386 次
发布时间:2019-05-10

本文共 2209 字,大约阅读时间需要 7 分钟。

Java异常处理

异常发生的原因有很多,通常包含以下几大类:

用户输入了非法数据。

要打开的文件不存在。

网络通信时连接中断,或者JVM内存溢出。

要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常

检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

finally关键字用来创建在try代码块后面执行的代码块。无论是否发生异常,finally代码块中的代码总会被执行

在finally代码块中,可以运行清理类型等收尾善后性质的语句。finally代码块出现在catch代码块最后

在Java中定义了两种类型的异常和错误

JVM(Java虚拟机)异常:由JVM抛出的异常或错误。

例如:NullPointerException类,ArrayIndexOutOfBoundsException类,ClassCastException类。

程序级异常:由程序或者API程序抛出的异常。例如IllegalArgumentException类,IllegalStateException类。

  • throw与throws区别

throws是用来声明一个方法可能抛出的所有异常信息,而throw则是指抛出的一个具体的异常类型。此外throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。

throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。

throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。

throws格式:方法名(参数)throws 异常类1,异常类2,.....

throw:就是自己进行异常处理,处理的时候有两种方式,要么自己捕获异常(也就是try catch进行捕捉),要么声明抛出一个异常(就是throws 异常~~)

  • 自定义异常的步骤:

1:定义一个子类继承Exception或RuntimeException,让该类具备可抛性(既可以使用throw和throws去调用此类)。

2:通过throw 或者throws进行操作。

异常的转换思想:当出现的异常是调用者处理不了的,就需要将此异常转换为一个调用者可以处理的异常抛出。

 

记住:finally很有用,主要用户关闭资源。无论是否发生异常,资源都必须进行关闭。

System.exit(0); //退出jvm,只有这种情况finally不执行

 

注意:

如果父类或者接口中的方法没有抛出过异常,那么子类是不可以抛出异常的,如果子类的覆盖的方法中出现了异常,只能try不能throws。

如果这个异常子类无法处理,已经影响了子类方法的具体运算,这时可以在子类方法中,通过throw抛出RuntimeException异常或者其子类,这样,子类的方法上是不需要throws声明的。

 

异常(程序运行时可能出现的错误),编程的关键在于“防患于未然”

传统方式:if语句,现代方式:捕获异常机制;异常和处理分离;异常捕获结构:

try(语句块存放可能发生异常的Java语句) catch(从小到大,可以有多个,激发被捕获的异常,异常对象引用记录了异常的详细信息

finally(最后执行的部分,四种情况下不执行:

finally语句块中发生异常、前面代码有System.exit()、线程死亡、关闭CPU);

getMessage() 输出错误性质,

toString() 给出异常的类型与性质

printStackTrace() 指出异常的类型、性质、栈层次及出现在程序中的位置。异常是流程转移的有效手段。

  • 常见异常:

ClassCastException 类型转换异常

ClassNotFoundException找不到相应类异常

ArithmeticException算术异常

ArrayIndexOutOfBoundsException数组下标越界异常

ArrayStoreException数组中包含不兼容的值抛出异常

SQLException操作数据库异常

NullPointerException空指针

NoSuchFieldException字段未找到异常

NoSuchMethodException方法未找到异常

NumberFormatException字符串转换为数字异常

NegativeArraySizeExcepton数组元素个数为负数异常

StringIndexOutOfBoundsException字符串索引超出范围异常

IOException输入输出异常

IllegalAccessException不允许访问某类异常

EOFException文件已结束异常

FileNotFoundException文件未找到异常

 

Throwable类是所有异常类的父类Exception类(RuntimeException类<越界、转换问题、除法错误、空指针>)和error类(内存错误、栈溢出)。

参考地址

你可能感兴趣的文章
python包含中文字符串长度
查看>>
sysbench 0.5 性能测试工具使用手册
查看>>
通过telnet连接查看memcache服务器
查看>>
django不用在数据库中创建新的user表而使用它的后台管理功能
查看>>
php array_unshift()修改数组key
查看>>
mysql性能优化-查询(Query)优化-2
查看>>
MySQL分区表的使用
查看>>
MongoDB 地理位置索引的实现原理
查看>>
MongoDB与MySQL的插入、查询性能测试
查看>>
深入理解OAuth2.0协议
查看>>
https原理:证书传递、验证和数据加密、解密过程解析
查看>>
MySQL在大型网站的应用架构演变
查看>>
sphinx教程1__mysql sphinx引擎插件式热安装
查看>>
sphinx教程2__安装、配置和使用
查看>>
ttserver 缓存使用和过期设置
查看>>
php pconnect 长连接原理
查看>>
php memcached使用中的坑
查看>>
php变量引用和计数_refcount_gc和is_ref_gc
查看>>
windows环境下php和Php扩展编译,扩展dll文件编译
查看>>
magento 验证码
查看>>