首页 > 编程语言 >Java---异常【详细】

Java---异常【详细】

时间:2024-06-08 16:29:30浏览次数:25  
标签:try Java 处理 抛出 --- finally 详细 catch 异常

 1.异常的简介


1.编译错误:基本语法错误,编译器进行语法检查,如果没有通过,程序违背了计算机编程语言的语法。
2.运行错误:程序可以执行,在执行过程中发生异常,导致程序提前退出,没有得到预计的执行效
果。
3.逻辑错误:程序可能执行,结果不对。
4.异常体系,保证程序的健壮性。

2.java异常体系结构

 

RuntimeException:运行时异常:程序运行时抛出,可以通过反复测试尽量避免,不应该靠异常处理机制来解决。 

运行时异常说明
ArithmeticException算术异常,如除零操作
ArrayIndexOutOfBoundsException数组下标越界异常
NullPointerException访问null对象引用
RuntimeException运行时异常父类
NumberFormatException数字格式异常
java.lang.ClassCastExceptio类型转换异常

CheckedException:检查型异常:编译器对代码进行检查,如果没有处理异常,不允许程序通过。

检查型异常说明
InterruptedException线程中断异常
FileNotFoundException文件找不到异常
IOException输入输出流异常
ClassNotFoundException类找不到异常

 3.异常处理

用于异常处理的有五个关键字:throw,throws,try,cath,finally,throws 

3.1不处理

运行时异常

3.2捕获

try{
   //可能会出现异常,需要监视的代码
}catch(异常类型 e){//e可以自定义
   //当异常发生后,处理预案
}

注意事项:
throws必须跟在方法的参数列表之后

声明的异常必须是Exception或它的子类

方法内部若是抛出了多个异常,throws后面可以跟多个异常类型,用逗号隔开,若是抛出的多个异常具有继承关系,声明父类即可。

 

在一个try块中,可能会产生多个异常,在后面可以接多个catch,去捕获不同的异常。如果try块中,出现异常,直接进入对应的catch块中,try块中出现异常后的代码不会继续执行。

try{

}catch(异常类型1 e){


}catch(异常类型2 e){

}

 

 

由上面俩幅图我们得出一些结论:

try块内抛出异常位置之后的代码将不会执行,但是处理完异常后续的代码能正常运行。

try中可能会抛出多哥不同的异常,必须用catch来一一捕获。

异常消息的处理
e.getMessage():获取异常信息
e.toString():获取异常类和信息
e.printStackTrace():打印异常堆栈轨迹
如果try和catch操作出现嵌套情况,内部的catch如果不能处理内部try代码块的异常,则由外部的catch块进行捕捉 

4.finally:

执行流程

1.使用finally完成资源释放。例如:关闭打开的连接,删除临时文件,关闭打开文件
2.inally不管是否出现异常,都会被执行到。如果try和catch块中,有return语句,finally在return代
码之前执行 

3.如果try或catch代码块中,执行了System.exit(0)推出虚拟机操作,finally代码块中的语句不在乎执行,try,catch,finally不能使用

4.try和catch使用
   try、catch和finally使用
   try和finally使用

总结

程序先执行try中代码

try中代码如果出现异常,看看是否与catch捕获类型匹配

要是匹配,执行catch内代码

要是不匹配,会将异常传递给上层调用者

无论匹不匹配,finally都会被执行到

上层调用者如果不匹配会一直传递给上上层,直到main方法也没有处理,则会给JVM进行处理,程序回异常终止

5.自定义异常

1.定义

继承Throwable或者他的子类Exception的用户自己定义的异常类。前面的内容提到的都是系统有的异常类。

2.在程序中使用自定义异常的步骤

  • 创建自定义异常类
  • 在方法中通过throw抛出异常对象
  • 如果在当前方法中对抛出的异常对象作处理,可以使用try-catch语句块捕获抛出异常对象并且处理,否则要在方法的声明处通过throws关键字指明要抛出给方法调用者的异常。
  • 在出现异常方法的调用者中捕获并处理异常

3.结构语法

class UserException extends Exception {
    UserException(){
        super();
        ...//其他语句
    }
}

举例 

public class ID extends Exception{
    public ID(String message) {
        super(message);
    }
}
import java.util.Scanner;

public class Hotels {
    public static void main(String[] args) {
        Inspect();

    }
    public static void Inspect(){
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入身份证");
        String x=scanner.next();
        String y="123456789";
        if(y.equals(x)){
            try {
                throw  new ID("身份号码一样,可能是逃犯");
            }catch (ID e){
                e.printStackTrace();//自定义异常
            }
        }
        else
            System.out.println("可以入住");
    }
}

等于123456789的话就会抛出自定义异常 

 

 

4.系统定义的异常与用户定义的异常区别

系统定义的异常是特定情况出现的问题,而此时用来对可能遇到的问题进行处理。用户定义的异常是自己觉得可能会出现问题时,需要处理的。这样避免程序中断或是出现未知错误。
系统异常有两种一种是运行时异常,一种是普通异常,普通异常要求用户捕获或者抛出的,不捕获或者抛出就会编译不通过。运行时异常编译可以通过,但是运行时才显露出来。

 

 

 

 

标签:try,Java,处理,抛出,---,finally,详细,catch,异常
From: https://blog.csdn.net/2302_80969025/article/details/139423990

相关文章

  • 宝塔搭建javaweb_宝塔工具+javaweb+mysql+tomcat部署项目
    1.首先我们得有一个安装了宝塔工具的云服务器首先我们要在服务器安全组开放宝塔常用的端口,看你是什么服务器,然后对应下面官网的教程就行了。腾讯云:https://www.bt.cn/bbs/thread-1229-1-1.html阿里云:https://www.bt.cn/bbs/thread-2897-1-1.html华为云:https://www.bt.cn/bbs/t......
  • 宝塔搭建javaweb_宝塔工具+javaweb+mysql+tomcat部署项目
    1.首先我们得有一个安装了宝塔工具的云服务器首先我们要在服务器安全组开放宝塔常用的端口,看你是什么服务器,然后对应下面官网的教程就行了。腾讯云:https://www.bt.cn/bbs/thread-1229-1-1.html阿里云:https://www.bt.cn/bbs/thread-2897-1-1.html华为云:https://www.bt.cn/bbs/t......
  • 前端使用 Konva 实现可视化设计器(13)- 折线 - 最优路径应用【思路篇】
    这一章把直线连接改为折线连接,沿用原来连接点的关系信息。关于折线的计算,使用的是开源的AStar算法进行路径规划,启发方式为曼哈顿距离,且不允许对角线移动。请大家动动小手,给我一个免费的Star吧~大家如果发现了Bug,欢迎来提Issue哟~github源码gitee源码示例地址灵感......
  • 【Python】DQN处理CartPole-v1
    DQN是强化学习中的一种方法,是对Q-Learning的扩展。通过引入深度神经网络、经验回放和目标网络等技术,使得Q-Learning算法能够在高维、连续的状态空间中应用,解决了传统Q-Learning方法在这些场景下的局限性。Q-Learning可以见之前的文章。算法的几个关键点:1.深度学习估计状态动......
  • TCP_CLOSING_13:[已关闭] RST -> [已关闭]
    测试目的:本测试用例的目的是验证当TCP处于CLOSED状态时,对于接收到的RST(重置)控制消息的处理机制。根据TCP协议规范,当TCP在CLOSED状态时,它应该忽略任何接收到的RST消息,并且不会产生任何响应。描述:TCP连接在CLOSED状态下是完全关闭的,不准备进行任何数据传输或连接建立。在这......
  • 睿抗赛-智能侦察-新手BUG汇总
    本文章主要记录本人和同学学习过程中所遇bug,报错及问题解决方法,如有雷同纯属教程看的一样。大部分问题都是没有按照流程去运行文件造成的。流程为:启动ros环境-编译-刷新环境变量-运行如果所遇问题可以通过正常流程排除掉则不需要继续阅读。1.编译报错提示“空间”不存在原......
  • 从零手撕一个网页版图形编辑器之前端代码框架-整体(2)
    ​本编辑器(土豆猫图形编辑器)社区版代码已开源,开源库地址:https://gitee.com/longhan13/lgxmap_community.git从此章节开始,后续开始讲代码框架、关键模块代码、数学工具(向量、矩阵),感兴趣的朋友最好把代码下载下来,对着代码来阅读文章更有助于理解。本文开始讲解前端代码框架。n......
  • Java——数组排序
     一、排序介绍1、排序的概念排序是将多个数据按照指定的顺序进行排列的过程。2、排序的种类排序可以分为两大类:内部排序和外部排序。3、内部排序和外部排序1)内部排序内部排序是指数据在内存中进行排序,适用于数据量较小的情况。数据可以完全装入内存。常见的内部排序算......
  • C++U7-08-拓扑排序
    拓扑:是指把实体抽象成与其大小形状无关的点,把连接实体的线路抽象成线,研究这些点线之间的相连关系。而表示点和线之间关系的图就被称为拓扑结构图。 拓扑学原本是一个数学概念,描述的是几何图形或空间在连续改变形状后还能保持不变的性质,它只考虑物体间的位置关系而......
  • 23201405-pta的总结blog-二
    前言本次作业blog主要对于答题判题程序4、家具强电电路模拟1-2进行分析说明和总结。这三次题目集的题目量和难度不必多说,题不在多,而在精。题目主要是为了提高能力,区分层次而出,难度不小。知识点主要有,抽象类、输入输出的处理,正则表达等。更重要的是分析题目,设计程序并实现的能......