这几种Java异常处理方法,你会吗?
摘要:我们在软件开发的过程中,任何语言的开发过程中都离不开异常处理。
本文分享自华为云社区《Java异常处理学习总结》,作者: zekelove 。
我们在软件开发的过程中,任何语言的开发过程中都离不开异常处理。如果不处理异常,将会导致软件异常中断,崩溃,退出,严重影响用户的使用和体验。如果合理的应用异常处理那将会减少软件出现的错误,可以友好的提示用户,提升用户的体验。
异常是什么
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。如:用户输入非法数据,做除法运算的时候除数为0,语句少写分号,打开的文件不存在,内存溢出,网络中断等。
异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。
异常类型
Java中所有的异常类是从 java.lang.Exception 类继承的子类。Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。
检查性异常:用户错误或问题引起的异常,这是程序员无法预见的。除了Error 和 RuntimeException的其它异常。
运行时异常: 运行时异常是可能被程序员避免的异常。Error 和 RuntimeException 以及他们的子类。
错误: 错误不是异常,而是脱离程序员控制的问题。通常的做法是通知用户并中止程序的执行。
常见异常
输入输出异常:IOException
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
文件未找到异常:FileNotFoundException
数组下标越界异常:ArrayIndexOutOfBoundsException
数组负下标异常:NegativeArrayException
文件已结束异常:EOFException
字符串转换为数字异常:NumberFormatException
方法未找到异常:NoSuchMethodException
操作数据库异常:SQLException
常用异常方法
getMessage:获取异常的详细信息。
toString:使用getMessage()的结果返回类的串级名字。
printStackTrace:错误输出流。
异常处理
对检查异常处理的方式:使用 try…catch…finally 语句块处理;在函数定义中使用 throws 声明。
语法:
try{
// try 块中放可能发生异常的代码。
}catch(ArithmeticException arithexception){
// 1.每一个 catch 块用于捕获并处理一个特定的异常,或者异常类型的子类。
// 2.catch 后面括号中定义了异常类型和异常参数。
// 3.在 catch 块中可以使用这个块的异常参数来获取异常的相关信息。
// 4.如果 try 块中发生的异常在所有catch中都没捕获到,则去执行finally,然后到这个函数的外部 caller 中去匹配异常处理器。
// 5.如果 try 中没有发生异常,则所有的catch块都不执行。
}catch(Exception exception){
// 捕获异常
}finally{
// 1.finally 块是可选的。
// 2.无论异常是否发生,finally 都会执行。
// 3.一个 try 至少要有一个 catch 块,或者至少要有一个 finally 块。
// 4.finally 块主要做一些关闭清理工作,如关闭文件,关闭数据库连接等。
}
示例
package com.exception;
public class test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
compute();
} public static void compute() {
try {
double num = 10 / 0;
System.out.println(num);
}catch(ArithmeticException exp){
System.out.println(exp.getMessage().toString());
}finally {
System.out.println("执行finally块");
}
}
}
关键字 throws/throw
如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明,throws 关键字放在定义方法的尾部。
也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
throws 语法:
修饰符 返回值类型 方法名(参数) throws 异常类名1, 异常类名2, ... { 代码块 }
package com.exception;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream; public class test { public static void main(String[] args) throws FileNotFoundException {
// TODO 自动生成的方法存根
readFile();
} public static void readFile() throws FileNotFoundException {
InputStream file = new FileInputStream("E:/test.txt");
}
}
throw 语法:
throw new xxxException();
其中 xxxException 必须是 Exception 的派生类。
注意:throw 出的是1个异常对象,所以 new 不能省略。
自定义异常
除了JDK定义好的异常类外,我们可以根据自身业务情况自定义异常处理类。
编写自定义异常类注意点:
1.所有异常都必须是 Throwable 的子类。
2.如果写一个检查性异常类,则需要继承 Exception 类。
3.如果写一个运行时异常类,则需要继承 RuntimeException 类。
语法:修饰符 class 类名 extends Exception { 代码块 }
package com.exception;
/**
* 自定义异常类
* 登录失败异常信息类
*/
public class LoginFailException extends RuntimeException {
public LoginFailException() {
super();
}
public LoginFailException(String message) {
super(message);
}
public void printStackTrace(){
//overwrite
super.printStackTrace();
System.out.printf("This is a LoginFailException excetpion\n");
}
}
public class test { public static void main(String[] args){
// TODO 自动生成的方法存根
Boolean isLogin = false;
if(!isLogin) {
// 登录失败,抛出异常
throw new LoginFailException("Login is fail");
}
}
}
这几种Java异常处理方法,你会吗?的更多相关文章
- Java异常处理机制及两种异常的区别
java异常处理机制主要依赖于try,catch,finally,throw,throws五个关键字. try 关键字后紧跟一个花括号括起来的代码块,简称try块.同理:下面的也被称为相应的块. ...
- 2017.10.28 针对Java Web应用中错误异常处理方法的运用
针对Java Web应用中错误异常处理方法的运用 在javaweb中其异常都需要对Checked Exception之下的Exception进行继承,并且有选择地对发生的错误和异常进行处理.Java同 ...
- Java中的常用异常处理方法
觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 ...
- 几种任务调度的 Java 实现方法与比较
综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺 ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- [论文笔记] 一种Java遗留系统服务化切分和封装方法 (计算机学报, 2009)
李翔,怀进鹏,曾晋,高鹏. 一种Java遗留系统服务化切分和封装方法. 计算机学报, 32(9), 2009, p1084-1815 (gs:5) 1. 本文研究从Java遗留系统中切分并封装出Web ...
- 几种任务调度的 Java 实现方法与比较Timer,ScheduledExecutor,Quartz,JCronTab
几种任务调度的 Java 实现方法与比较 综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quar ...
- 几种任务调度的 Java 实现方法与比较--转载
前言 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务.本文由浅入深介绍四种任务调度的 Java 实现: Timer ScheduledExecutor 开源工具包 Quartz ...
- Java中的五种单例模式实现方法
[代码] Java中的五种单例模式实现方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2 ...
随机推荐
- kubebuilder实战之七:webhook
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Final Cut Pro X 10.4.7 修改长宽比, 截取某一段视频导出
新建项目时设置过长宽比例,现在要修改 窗口 - 项目属性 - 修改 - 自定义 要注意的是,导出时也要选择一下比例 截取某一段视频导出 将鼠标移到你要截取的片段的开始处,点击快捷键 i(标记-设定范围 ...
- 单片机学习(十一)I2C总线和AT24C02的使用
一. 存储器介绍 存储器分类图 1. RAM 这类存储器中的数据都是掉电即失的,例如计算机中的内存就是DRAM,但它们数据读写速度都是要比ROM要快得多的. SRAM:本质是电路,使用电路构成的触发器 ...
- 新来的前端小姐姐问:Vue路由history模式刷新页面出现404问题
摘要:vue-router 默认 hash 模式 -- 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载. 本文分享自华为云社区<学习Vue Rou ...
- [考试总结]noip模拟43
这个题目出的还是很偷懒.... 第一题...第二题...第三题...四.... 好吧... 这几次考得都有些问题,似乎可能是有些疲惫,脑袋也是转不太动,考完总觉得自己是能力的问题,但是改一分钟之后会发 ...
- Python - 如何将 list 列表作为数据结构使用
列表作为栈使用 栈的特点 先进后出,后进先出 如何模拟栈? 先在堆栈尾部添加元素,使用 append() 然后从堆栈顶部取出一个元素,使用 pop() # 模拟栈 stack = [1, 2, 3, ...
- 动态拼接表达式——Expression
我们在项目中会遇到以下查询需求吗? 比如需要查询出满足以下条件的会员: 条件组一:30-40岁的男性会员 条件组二:20-30岁的女性会员 条件组三:60-80岁性别未知的会员 条件组内是并且关系,但 ...
- Python - poetry(4)管理环境
环境隔离 poetry 核心之一:使项目环境隔离,意味着始终和本地全局 Python 环境隔离 poetry 首先会检查当前项目是否在虚拟环境中运行:如果是将直接使用它,而不创建新的:如果不是,poe ...
- RMI源码调试
看RMI漏洞时候,对其漏洞原理并不是很理解,所以简单调试了下源码加强下漏洞理解 由于要调试到RegistryImpl_Stub这种动态类,刚开始用的源码版本是JDK8u141,后来发现源码有些地方进行 ...
- pibbtimq高级使用技术,双向通信
本案例目是是服务端发送客户端,客户端收到反应给服务端,双向通信客户端代码如下:import pikaimport timeconnection = pika.BlockingConnection(pi ...