Java开发过程中 异常及日常如何规避

简介: Java开发过程中 异常及日常如何规避

1、前言

异常是程序在编译或执行的过程中可能出现的问题,语法错误不算在异常体系
提前处理异常,可以让程序会更加安全、稳定。

2、异常三大体系

  • Error:

       系统级别问题、JVM退出等,代码无法控制
  • Exception:

       Java.lang包下,称为异常类,它表示程序本身可以处理的问题
       Runtime Exception及其子类:
         运行时异常,编译阶段不会报错(如空指针,数组索引越界异常)
    
  • 除Runtime Exception之外所有异常:

       编译时异常,编译期必须处理的,否则程序不能通过编译(如日期格式化)
    

3、java异常有哪些?

1、java中异常分类

Throwable类有两个直接子类:

  • Exception:出现的问题是可以被捕获的
  • Error:系统错误,通常由JVM处理

2、被捕获的异常分类

  • Check异常: 派生自Exception的异常类,必须被捕获或再次声明抛出
  • Runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象 throw new ArithmeticException(…);

3、发生异常的原因

  • 用户输入了非法数据。
  • 要打开的文件不存在。
  • 网络通信是连接中断。
  • JVM内存溢出。

    我们知道了java异常之后,我们在程序中要做的就是合理的设计解决异常,让程序不崩溃,让程序恢复到原本的状态!

4、 异常处理

1. 通过try...catch语句块来处理:

try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}

Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。
如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
2. 在具体位置不处理,直接抛出
通过throws/throw到上层再进行处理,具体的,如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

下面方法的声明抛出一个 Exception 异常:
import java.io.*;
public class className
{

public void fileDeal(string fileRow) throws Exception
{
    // Method implementation
    throw new Exception();
}
//Remainder of class definition

}
3. finally关键字

finally 关键字用来创建在 try 代码块后面执行的代码块。
无论是否发生异常,finally 代码块中的代码总会被执行。
在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
finally 代码块出现在 catch 代码块最后,语法如下:

try
{
    // 程序代码
}
catch (异常类型1 异常的变量名1)
{
    // 程序代码
}
catch (异常类型2 异常的变量名2)
{
    // 程序代码
}
finally
{
    // 程序代码
}

4、自定义异常
JAVA无法为所有的问题提供异常类,如果我们想通过异常的方式来管控某个业务问题,就需要自定义异常类了。
自定义的异常应该总是包含如下的构造函数:

- 一个无参构造函数
- 一个带有String参数的构造函数,并传递给父类的构造函数。
- 一个带有String参数和Throwable参数,并都传递给父类构造函数。
- 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。

注意:如果自定义异常是为了提示,在使用的时候,一定要用try..catch,不要直接用throw往外抛。

自定义编译时异常 定义一个异常类继承Exception
重写构造器
public class Ageilleagaleception extends Exception{

public Ageilleagaleception (){

}
public Ageilleagaleception(String message){
    super(message);
}

}
在出现异常的地方用throw new自定义对象抛出

public static void checkFee(int fee) throws Feeilleagaleception {

    if(fee< 0 || fee> 1000000){
        throw new Feeilleagaleception (fee+"is illegal");
    }else {
        System.out.println("费用合理");
    }
}

自定义运行时异常

定义一个类继承RuntimeException
重写构造器
在出现异常的地方用throw new自定义对象抛出。

相关文章
|
12天前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
12天前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
36 0
|
1月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
95 2
|
1月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
138 3
|
1月前
|
移动开发 Cloud Native 安全
Java:跨平台之魂,企业级开发的磐石
Java:跨平台之魂,企业级开发的磐石
|
1月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
190 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
2月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
135 1
|
2月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
126 1
|
2月前
|
IDE Java API
Java 17 新特性与微服务开发的实操指南
本内容涵盖Java 11至Java 17最新特性实战,包括var关键字、字符串增强、模块化系统、Stream API、异步编程、密封类等,并提供图书管理系统实战项目,帮助开发者掌握现代Java开发技巧与工具。
170 1