当前位置: 首页 > news >正文

Java,异常处理 - 教程

Java,异常处理 - 教程

一、异常的概述
    -什么是异常?
    指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。
    -异常的抛出机制
    Java中把不同的异常用不同的类表示,一旦发生某种异常,就创建该异常类型的对象,并且抛出(throw),然后程序员就可以捕获(catch)到这个异常对象,并处理;如果没有捕获到异常对象,那么这个异常对象将会导致程序终止。
    -如何对待异常?
    对于程序出现的异常,一般有两种解决办法:一是遇到错误就终止程序运行。另一种是程序编写时,就充分考虑各种可能的异常或错误,极力预防和避免。

二、异常的体系结构及常见异常
    如图

三、异常处理的方式


    -try catch finally
        >基本结构:
            try
            {
                .....//可能产生异常的代码
            }
            catch(异常类型1 e)
            {
                .....//当产生异常类型1时的处理措施
            }
            catch(异常类型2 e)
            {
                .....//当产生异常类型2时的处理措施
            }
            finally
            {
                .....//无论是否发生异常,都会无条件执行的语句
            }
        >使用细节:
            ①将可能出现异常的代码声明在try语句中,一旦代码出现异常,就会自动生成一个对应异常类的对象,并将此对象抛出。
            ②针对try中抛出的异常类的对象,使用之后的catch语句进行匹配。一旦匹配上,就进入catch语句块进行处理。一旦处理接触,代码就可继续向下执行。
            ③如果声明多个catch结构,不同的异常类型在不存在子父类关系的情况下,顺序没有要求,但是如果存在子父类关系,则必须将子类声明在父类结构的上面。
            ④catch中处理异常的方式:自己编写输出语句;printStackTrace()打印异常详细信息;getMessage()获取发生异常的原因。
            ⑤try中声明的变量,在try外部无法使用。

import org.junit.Test;
import java.util.InputMismatchException;
import java.util.Scanner;
public class ExceptionHandTest
{@Testpublic void test1(){try{Scanner scan = new Scanner(System.in);int num = scan.nextInt();System.out.println(num);}catch (InputMismatchException e){System.out.println("出现了InputMismatchException");}catch (NullPointerException e){System.out.println("出现了NullPointerException");}catch (RuntimeException e){System.out.println("出现了RuntimeException");}System.out.println("异常处理结束,代码继续执行");}@Testpublic void test2(){try{String str = "123";str = "abc";int i = Integer.parseInt(str);System.out.println(i);}catch (NumberFormatException e){e.printStackTrace();}System.out.println("程序结束");}
}

    -throws
        >基本结构:throws 异常类型1,异常类型2...
        >使用细节:
            ①从编译的角度看,看成是给出异常出现时的解决方案。此方案就是继续向上抛出(throws)。
            ②throws的方式仅是将异常抛给了此方法的调用者,调用者仍然需要考虑如何处理相关异常,从这个角度看,throws的方式并不是真正意义上处理了异常。
            ③子类重写的方法抛出的异常类型可以与父类被重写抛出的异常类型相同,或是父类被重写方法抛出的异常类型的子类。

四、手动抛出异常对象
    -方法内部,满足指定条件下,使用"throw 异常类的对象"的方式抛出。

public class ThrowTest
{public static void main(String[] args){Account account = new Account();try{account.regist(10);account.regist(-10);System.out.println(account);}catch (RuntimeException e){
//            e.printStackTrace();System.out.println(e.getMessage());}}
}
class Account
{int id;public void regist(int id){if(id>0){this.id=id;}else{throw new RuntimeException("输入的id非法");}}@Overridepublic String toString(){return "Account{" +"id=" + id +'}';}
}

五、自定义异常类
    -基本结构:
        ①继承于现有的异常体现。通常继承于RuntimeException \ Exception
        ②通常提供几个重载的构造器
        ③提供一个全局常量,声明为:static final long serialVersionUID;
    -使用细节:
        ①在具体的代码中,满足指定条件的情况下,需要手动使用"throw + 自定义异常类的对象"方式,将异常对象抛出。
        ②如果自定义异常类是非运行时异常,则必须考虑如何处理此异常类的对象。

http://www.jsqmd.com/news/287932/

相关文章:

  • Paraformer-large语音识别标准化:输出格式统一实战
  • 运动会综合管理系统|基于springboot + vue运动会综合管理系统(源码+数据库+文档)
  • Qwen All-in-One如何实现零显存开销?技术原理解析
  • FSMN VAD高级参数展开技巧:webUI操作细节图解
  • Sambert语音自然度提升:自回归GPT合成参数详解
  • 完整教程:Django中的clean()方法和full_clean()方法
  • 一键启动FSMN-VAD,开箱即用的语音检测工具
  • 输出文件在哪?/root/cv_fft_inpainting_lama目录结构说明
  • AI绘画2025趋势实战:Z-Image-Turbo开源模型+Gradio快速上线指南
  • 黄金一直上涨,猜测跟霉国债务挂钩
  • 2024年AI开发者入门必看:Llama3-8B开源模型部署全流程
  • Qwen3-Embedding-4B省算力方案:动态维度输出实战案例
  • 如何为不同需求选装修公司?2026年上海装修公司全面评测与推荐,直击增项与工艺痛点
  • rc5.d目录作用揭秘,搭配测试脚本更好懂
  • 微信联系作者,技术支持就在身边
  • 新消费品牌如何布局AI搜索?2026年GEO优化推荐与评价,直击场景化营销痛点
  • AB实验的关键认知(六)分流单元与分析单元
  • AB实验的关键认知(五)综合评估标准 OEC
  • 2026年热门的垂直式压缩垃圾站/压缩垃圾站设备行业热度TOP榜
  • Llama3-8B科研辅助应用:论文润色系统部署实战教程
  • 2026年GEO公司招商加盟推荐:基于多场景实测评价,解决信息过载与信任构建痛点
  • YOLOv9推理只需一条命令,官方镜像真香
  • AutoGLM-Phone支持哪些设备?Android 7.0+适配部署指南
  • unet person image cartoon compound常见问题避坑指南:转换失败解决方案
  • 2026年AI搜索优化服务市场深度解析:五大服务商甄选策略与实效案例洞察
  • Qwen3-Embedding-4B分布式部署:多GPU负载均衡实践
  • Z-Image-Turbo提示词不生效?argparse参数绑定避坑部署教程
  • IQuest-Coder-V1成本优化方案:小团队也能用的40B模型部署法
  • Qwen3-Embedding-0.6B部署进阶:自定义指令增强特定任务效果
  • 基于提示词的精准控制:Qwen儿童图像生成参数调整指南