java基础-异常处理(六)

异常处理,

出现的问题有很多种,比如角标越界,空指针等都是。就对这些问题进行分类。而且这些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系

--------java.lang.Throwable

Throwable可抛出的。

    |--Error错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正。

    |--Exception异常,可以有针对性的处理方式

无论是错误还是异常,它们都有具体的子类体现每一个问题,它们的子类都有一个共性,就是都以父类名才作为子类的后缀名

 

这个体系中的所有类和对象都具备一个独有的特点;就是可抛性

可抛性的体现:就是这个体系中的类和对象都可以被throws和throw两个关键字所操作。

在开发时,如果定义功能时,发现该功能会出现一些问题,应该将问题在定义功能时标示出来,这样调用者就可以在使用这个功能的时候,预先给出处理方式。

扫描二维码关注公众号,回复: 10453123 查看本文章

 

如何标示呢?通过throws关键字完成,格式:throws 异常类名,异常类名...

这样标示后,调用者,在使用该功能时,就必须要处理,否则编译失败。

 

处理方式有两种:1、捕捉;2、抛出。

对于捕捉:java有针对性的语句块进行处理。

异常的代码块固定格式

try {

    需要被检测的代码;

}

catch(异常类 变量名){

    异常处理代码;

}

fianlly{

    一定会执行的代码;

}

 

异常处理原则:功能抛出几个异常,功能调用如果进行try处理,需要与之对应的catch处理代码块,这样的处理有针对性,抛几个就处理几个。

 

特殊情况:try对应多个catch时,如果有父类的catch语句块,一定要放在下面。

 

不要简单定义一句,e.printStackTrace();

也不要简单的就书写一条输出语句,这些异常信息要打印到一个文件里

 

自定义异常:

必须是自定义类继承Exception

继承Exception原因:

异常体系有一个特点,因为异常类和异常对象都被抛出 

他们都具备可抛性,这个可抛性是Throwable这个体系中独有特点,只有这个体系中的类和对象才能被 throw 和throws 操作

 

对多异常的处理:

1、声明异常时,建议声明更为具体的异常,这样处理的可以更具体

2、对方声明几个异常,就对应有几个catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系,父类异常catch块在最下面

 

throws和throw的区别

throws使用在函数上

throw使用在函数内

throws后面跟的异常类,可以跟多个,用逗号隔开

throw后跟的异常对象

 

自定义异常时,如果该异常的发生,无法在继续进行计算

就让自定义异常继承RuntimeException。 

 

对于异常可以分类两种:

1、编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。

声明的原因:是需要调用者对该异常进行处理。

2、运行时异常如果在函数内被抛出,在函数上不需要声明。

不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正

 

定义异常处理时,什么时候定义try,什么时候定义throws呢?

功能内部如果出现异常,如果内部可以处理,就用try;

如果功能内部处理不了,就必须声明出来,让调用者处理。

 

 

自定义异常的步骤:

1:定义一个子类继承Exception或RuntimeException,让该类具备可抛性。

2:通过throw 或者throws进行操作。

class Demo
{
    int div(int a ,int b)
    {
        return a/b;
    }
}
class ExceptionDemo
{
    public static void main(String[] args)
    {
        
        Demo d = new Demo();
        int x = d.div(4,1);
        System.out.println("x+"+x);
        System.out.println("over");

    }    
}

总结:

异常是什么,是对问题的描述,将问题进行对象封装

异常体系:

Throwable

       |--Errror

       |--Exception

                |--RuntimeException

异常体系的特点:异常体系的所有类以及建立的对象都具有可抛性

                            也就是说可以被throw和throws关键字所操作

                            只有异常体系具备这个特点

throw 和throws的用法:

throw 是在函数内,抛出的异常对象

throws是在函数上,抛出的是异常类,并且可以抛出多个 用逗号隔开

当函数内有异常抛出的时候,需要再函数上声明异常,否则编译失败

但是函数内如果有个特殊的是抛出RuntimeException异常的时候,在函数上不用声明

当函数上声明了异常的时候,调用者就要用try {}catch(){}  或者抛出throws给虚拟机

异常的有两种:

编译时的异常,该异常在编译时,如果没有处理(没有抛也没有try),编译失败

该异常被标识,代表这可以被处理

运行时的异常,(编译时不检测)

在编译时,不需要处理,编译不检查

该异常的发生建议不处理,让程序停止,需要对代码进行修正。

异常的处理代码块有三种:

1、try

{

}catch()

{

}

2、try

{

}

catch()

{

}

finally

{

3、try

{

}

finally

{

}

记住一点:catch是处理异常的,如果没有catch就代表没有处理异常,如果这个异常是检测时异常,那么必须声明

自定义异常的 继承的两个类 一个Exception 一个是RuntimeException 

1、让自定义类具备可抛性

2、让该类具备操作异常的共性方法

异常信息传递给父类的构造函数

class MyException extends Exception
{
    MyExcetpion(String msg)
    {    
        super(msg);
    }
}

异常的好处,

1、将问题进行封装

2、将正常流程代码和问题处理代码相分离,方便阅读

异常的处理原则

1、处理方式有两种一种是 try 一种是throws 

2、调用到抛出异常的功能时,抛出几个,就处理结果

3、多个catch,父类的catch放到最下面

4、catch内,要定义针对性的处理方式,不要简单的定义printStackTrace ,输出语句

发布了311 篇原创文章 · 获赞 58 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/qq_30353203/article/details/103007623