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自定义对象抛出。

相关文章
|
15天前
|
Java 测试技术 应用服务中间件
常见 Java 代码缺陷及规避方式(下)
常见 Java 代码缺陷及规避方式(下)
43 0
|
23天前
|
监控 JavaScript 前端开发
《理解 WebSocket:Java Web 开发的实时通信技术》
【4月更文挑战第4天】WebSocket是Java Web实时通信的关键技术,提供双向持久连接,实现低延迟、高效率的实时交互。适用于聊天应用、在线游戏、数据监控和即时通知。开发涉及服务器端实现、客户端连接及数据协议定义,注意安全、错误处理、性能和兼容性。随着实时应用需求增加,WebSocket在Java Web开发中的地位将更加重要。
|
3天前
|
存储 Java 程序员
JavaSE&Java的异常
JavaSE&Java的异常
19 0
|
3天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
8天前
|
IDE Java 数据库连接
使用 Java 进行桌面应用开发
【4月更文挑战第19天】Java 是一款广泛应用于企业级、网络和桌面应用开发的编程语言。其跨平台特性使Java程序能在不同操作系统上运行,而JDK提供了开发所需工具和库。使用Swing等GUI库构建用户界面,结合JDBC进行数据库操作,Socket实现网络通信。虽然面临性能和用户体验的挑战,但通过优化和选用合适的IDE,Java仍能开发出高效稳定的桌面应用。
|
9天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
9天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
151 10
|
9天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
15天前
|
监控 安全 Java
常见 Java 代码缺陷及规避方式(中)
常见 Java 代码缺陷及规避方式(中)
27 1
|
16天前
|
运维 NoSQL 算法
Java开发-深入理解Redis Cluster的工作原理
综上所述,Redis Cluster通过数据分片、节点发现、主从复制、数据迁移、故障检测和客户端路由等机制,实现了一个分布式的、高可用的Redis解决方案。它允许数据分布在多个节点上,提供了自动故障转移和读写分离的功能,适用于需要大规模、高性能、高可用性的应用场景。
16 0