异常小知识,自定义异常

本文介绍了两种异常处理方式:捕获并打印异常信息继续执行,及声明并抛出异常。探讨了编译异常与运行时异常的区别,并通过实例展示了如何创建及使用自定义异常。

异常

第一种处理方式

捕获异常,将异常信息打印,并继续执行剩余代码

try{

        可能会出现异常的代码

}catch(异常的类名        变量名){

        打印异常信息

}catch(异常的类名        变量名){

        ...这些catch中的异常类中,如果没有什么直接的继承关系,先后是没有顺序的

                                                 但如果有继承关系,父类需要放在子类后面,父类会将子类的异常捕获到,导致没有显示具体的异常信息而是显示父类的信息

}finally{

        无论是否捕获到异常,finally中的内容都会执行

}

 

Throwable

在catch中调用
     方法
       String getMessage()   获取异常的简短信息 只有异常的信息   例:"文件没找到"
       String toString()     获取异常的简短信息 有异常的类名 和异常的信息         java.io.FileNotFoundException: 文件没找到

      默认: void printStackTrace()  直接打印异常的详细信息 异常的类名 异常的信息 异常的位置等等
        

第二种异常的处理方式

throw      异常对象

        声明此处可能会有异常
            throw new FileNotFoundException("文件没找到");

调用者 throws 异常的类名

public static void main(String[] args)

throws FileNotFoundException,ClassNotFoundException {

声明后需要将异常抛出,抛给调用者,如果不try{}catch(){}        会一直抛到jvm虚拟机,虚拟机直接中断进程,报异常. 

 编译异常与运行时异常

       

Exception: 编译时异常  编译时就报错 必须处理 要么使用throws 要么使用try catch

RuntimeException:运行时异常 编译时不报错 运行时才报错 可以处理 也可以不处理 推荐不处理 因为一般出现运行时异常
                 都是代码写的有问题 需要改代码

自定义异常

先定一个普通类,在set方法中使用异常,对使用set方法进行一些限制

public class Person {
     private int age ;


    public int getAge() {
        return age;
    }

    public void setAge(int age) throws NoAgeException {

        if(age>=200 || age<0){
            throw new NoAgeException("年龄有问题(0-200):"+age);//异常的声明
        }


        this.age = age;
    }
}

然后定义异常

/*
     自定义异常
          1. 定义一个异常继承Exception 或者 RuntimeException
          2.定义一个空参构造 定义一个带参构造
 */
public class NoAgeException extends Exception{


    public NoAgeException(){}



    public NoAgeException(String message){
//        System.out.println(message);

        super(message);
    }
}

测试一下

public class Test {
    public static void main(String[] args) throws NoAgeException {
        Person p = new Person();
//        p.age = -100;

        p.setAge(-10);//小于0,编译时异常,将其抛出即可,运行后,控制台爆出异常

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值