12.异常

异常(Exception)

概念

指的是程序在运行中,出现非正常情况

有时候我们编写完程序在运行过程中会出现一些错误,程序编译通过不代表运行时不会出错;

如:

public class ExecptionTest01 {
    public static void main(String[] args) {
        System.out.println(1/0);
    }
}

用0做了除数,会抛出 java.lang.ArithmeticException 的异常。

你可以通过这个异常能够快速知道这个程序出现的问题有助于开发者编写出更加健壮的程序,这是异常最主要的作用

异常的分类

异常主要分为:Error、一般性异常、RuntimeException

对于严重的,java通过Error类进行描述。

  • 对于Error一般不编写针对性的代码对其进行处理。

对与非严重的,java通过Exception类进行描述。

  • 对于Exception可以使用针对性的处理方式进行处理。

Error : 指的是系统级别的异常,最典型的Error的异常是:OutOfMemoryError(内存溢出)

一般性异常:出现了这种异常必须在程序里面显示的处理,否则程序无法编译通过

RuntimeException:此种异常可以不用显示的处理,例如被0除异常,java没有要求我们一定要处理。

异常的处理

关键字:try catch finally throw throws

抛出异常throw

在指定的方法中抛出指定的异常

使用格式:throw new xxxException(“异常产生的原因”)

注意:

  1. 必须写在方法的内部
  2. new的对象必须是Exception或者Exception的子类对象
  3. 抛出指定的异常,必须要处理
  4. 如果后面是RuntimeException或者其子类,可以交给JVM处理
  5. 如果后面是编译异常,我们必须处理,要么throws,要么try catch

try/catch 处理异常

格式

try{

​ 需要被检测的代码;

}catch(异常类 变量){

​ 处理异常的代码(处理方式);

}

finally{

​ 一定执行的语句;

}

Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。

可以使用catch捕捉多个异常,但是catch里面必须从小类型异常到大类型异常进行捕捉,最多执行一个catch语句块里面的内容。

finally关键字

通常跟在最后catch后面,异常如果没有被捕获,会执行finally的代码

throws关键字

在功能上通过throws的关键字声明了该功能有可能会出现问题

自定义异常

因为项目中会出现特有的问题,
而这些问题并未被java所描述并封装对象。
所以对于这些特有的问题可以按照java的对问题封装的思想。
将特有的问题。进行自定义的异常封装。

定义一个IllegalNameExecption异常

package com.kroy;

public class IllegalNameExecption extends  Exception {
    public IllegalNameExecption(){
        super();
    }
    public IllegalNameExecption(String msg){
        super(msg);
    }
}

UserService使用throws抛出给调用者

package com.kopi;

public class UserService {
    public void register(String username) throws IllegalNameExecption{
        if(username.length()<6){
            throw new IllegalNameExecption("用户名小于6位");
        }
        System.out.println("注册成功");
    }
}
package com.kopi;

public class RegistTest {
    public static void main(String[] args){
        UserService us = new UserService();
        try {
            us.register("Ky");
        } catch (IllegalNameExecption e) {
            e.printStackTrace();
        }

    }
}

注意:

  • 声明异常时,声明更具体的的异常,处理的可以 更具体
  • catch 不能独立于 try 存在。
  • 在 try/catch 后面添加 finally 块并非强制性要求的。
  • try 代码后不能既没 catch 块也没 finally 块。
  • try, catch, finally 块之间不能添加任何代码。

throw和throws的区别

  • throws
    • 用在方法声明后面,跟的是异常类名
    • 可以跟多个异常类名,用逗号隔开
    • 表示抛出异常,由该方法的调用者来处理
  • throw
    • 用在方法体内,跟的是异常对象名
    • 只能抛出一个异常对象名
    • 表示抛出异常,由方法体内的语句处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值