异常处理,
出现的问题有很多种,比如角标越界,空指针等都是。就对这些问题进行分类。而且这些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系。
--------java.lang.Throwable:
Throwable:可抛出的。
|--Error:错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正。
|--Exception:异常,可以有针对性的处理方式
无论是错误还是异常,它们都有具体的子类体现每一个问题,它们的子类都有一个共性,就是都以父类名才作为子类的后缀名。
这个体系中的所有类和对象都具备一个独有的特点;就是可抛性。
可抛性的体现:就是这个体系中的类和对象都可以被throws和throw两个关键字所操作。
在开发时,如果定义功能时,发现该功能会出现一些问题,应该将问题在定义功能时标示出来,这样调用者就可以在使用这个功能的时候,预先给出处理方式。
如何标示呢?通过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 ,输出语句
标签:java,处理,抛出,try,catch,异常,throws From: https://blog.51cto.com/u_16084838/6217463