首页 > 编程语言 >java(16)java异常

java(16)java异常

时间:2023-02-01 23:01:23浏览次数:40  
标签:java 自定义 16 抛出 编译 报错 catch 异常


异常指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。简单来说就是程序在运行时的时候,发生的不正常事件,就是所谓的异常。

异常,:在 Java 中都是以类, 进行体现的。

异常体系:
Throwable:可抛出异常

Error:系统级别问题,JVM退出等,代码无法控制。

Exception:java.lang包下,称为异常类,他表示程序本身可以处理的问题。

RuntimeException:运行时异常,在编译阶段是不会报错的。(例如:空指针异常、数组索引越界异常)。
非RuntimeException:编译时异常,编译阶段报错提醒,必须处理,不然不会通过编译(日期格式化异常)。

 

 

 

 

 

 

 

异常的分类 :
编译时异常 ( 受检异常 ): 编译期间 ,代码格式, 语法全部没有错误, 但就是出现了红色波浪线。这是因为代码有可能会错误,

解决方法:抛出异常或捕获异常。

 

 

运行时异常:编译过了, 运行错了。重点 : 在Exception下, RuntimeException 和其子类, 都是运行时异常, 反之, 都是编译时异常。

 

 

 

Java 默认处理异常的方式(报错) :
1. 虚拟机会在出现异常的代码那里自动的创建一个异常对象:ArithmeticException。

2. 异常会从方法中出现的点这里抛出给调用者,调用者最终抛出给JVM虚拟机。

3. 虚拟机接收到异常对象后,先在控制台直接输出异常栈信息数据。

4. 直接从当前执行的异常点干掉当前程序。

5. 后续代码没有机会执行了,因为程序已经死亡。

 

异常处理方法:
try...catch :
介绍 :

try...catch 的方式就是捕获异常。

捕获异常:Java中对异常有针对性的语句进行捕获

格式:

try{

可能会出现错误的代码.......

}catch(要捕获的异常类 变量名){ //异常类可自定义(必须自己先写类)

捕获到之后,编写异常的处理方式 //也可以是异常对象方法

}

try...catch...finally:
finally:常规情况下 finally 代码块中的代码, 是一定要执行的 !!!

try...catch ....catch.....catch....
1. 可以使用多个catch捕获异常, 但是父类的异常要放在最后

2. 多个异常直接, 也可以使用 | 进行隔开

 

 

 

抛出异常Thorw

         有些异常, 我们自己是不能处理的,  应该将问题暴露给使用者,这时候就需要将问题抛出。

    public void setAge(int age) throws Exception {
        if(age>=1&&age<=120){
            this.age = age;
        }else {
             //不满足上面情况就抛出异常
            throw new Exception("请输入1-120之间的整数年龄");
        }
    }

 

1.在类名后他声明异常类(thiows 异常类)

2.在代码中抛出异常(throw new 异常类)

 

重点理解 : throw 和 throws 的区别 :
throws : 声明异常的, 告知方法的调用者, 我这个方法里有异常,你调用的时候, 需要准备好应对方案。

throw : 干力气活的, 抛出异常对象

细节 : 如果抛出的是 RunTimeException 或者其子类, 就不需要 throws 声明

注意事项:
1. 子类不能抛出父类没有的, 或者比父类大的异常

2. 父类方法没抛异常, 子类重写父类方法, 如果有异常, 只能 try

自定义编译时异常(作用”:编译时异常是编译时提示报错):
定义一个异常类来继承Exception

 

自定义异常 :
自定义编译时异常(作用”:编译时异常是编译时提示报错):
定义一个异常类来继承Exception

重新构造器

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

自定义运行时异常(作用:编译时不提醒不报错,在运行时才可能报错):
定义一个异常类来继承RuntionException

重新构造器

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

标签:java,自定义,16,抛出,编译,报错,catch,异常
From: https://www.cnblogs.com/zhbx/p/17084421.html

相关文章

  • TQ2440移植u-boot2016.11全过程记录-【4】LCD驱动移植并显示
    TQ2440移植u-boot2016.11-LCD驱动移植并显示LCD初始化流程分析u-boot的LCD初始化代码是在​​common/lcd.c​​中,我们找到​​lcd_init​​函数:该函数功能流程为:​​lcd_ctr......
  • TQ2440移植u-boot2016.11全过程记录-【5】设置从NOR FLASH启动U-BOOT
    TQ2440移植u-boot2016.11-设置从NORFLASH启动u-boot​​geditinclude/configs/tq2440.h​​屏蔽掉宏​​CONFIG_SKIP_LOWLEVEL_INIT​​,修改宏​​CONFIG_SYS_TEXT_BASE​......
  • TQ2440移植u-boot2016.11全过程记录-【7】NAND FLASH方式启动U-BOOT
    TQ2440移植u-boot2016.11-NANDFLASH方式启动U-BOOTS3C2440U-BOOT启动方式说明:NORFLASH启动:S3C2440会直接在NOR上运行程序,在NOR上中的代码需要初始化芯片时钟、初始化SDR......
  • TQ2440移植u-boot2016.11全过程记录-【6】NAND FLASH驱动移植
    TQ2440移植u-boot2016.11-NANDFLASH驱动修改s3c24x0的NAND控制结构体:​​​geditarch/arm/include/asm/arch-s3c24x0/s3c24x0.h​​找到:​​structs3c24x0_nand​​结构......
  • TQ2440移植u-boot2016.11全过程记录-【3】NOR FLASH驱动移植
    TQ2440移植u-boot2016.11NORFLASH驱动移植TQ2440开发板上板载一片NORFLASH,型号为​​EONEN29LV160AB​​,挂载到了0x0000_0000~0x001F_FFFF地址,2M字节,16bit位宽。编辑配......
  • JavaScript逻辑运算符:与(&&)和或(||)
    前置知识:在javascript的逻辑运算中,0、""、null、undefined和NaN都会判定为false,其它都为true或||用于判断运算的操作数可以是任意类型的值。操作数是布尔值时,除了两......
  • 补获异常
    当我们在新增员工时输入的账号已经存在,由于employee表中对该字段加入了唯一约束,此时程序会抛出异常:此时需要我们的程序进行异常捕获,通常有两种处理方式:1、在Controller方......
  • TQ2440移植u-boot2016.11全过程记录-【2】DM9000网卡驱动移植
    TQ2440移植u-boot2016.11dm9000网卡驱动uboot中含有成熟的DM9000网卡驱动,只做简单的修改即可使用。编辑文件:​​geditboard/samsung/tq2440/tq2440.c​​将​​board_eth_......
  • java(15)java数据保存
    存储数据1.寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直......
  • Java(14)数组
    一、数组的基本概念1、什么是数组数组是相同类型元素的集合。创建数组的时候,Java就会再内存中分配一段连续的空间来存放数组的内容。每一个数组内容都有自己的编号,这......