-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
异常:就是程序在运行时出现不正常情况。
异常的由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。
其实就是java对不正常情况进行描述后的对象体现。
对于问题的划分:两种:一种是严重的问题,一种非严重的问题。
对于严重的问题,java通过Error类进行描述。
对于Error一般不编写针对性的代码对其进行处理。
对与非严重的,java通过Exception类进行描述。
对于Exception可以使用针对性的处理方式进行处理。
无论Error或者Exception都具有一些共性内容。
比如:不正常情况的信息,引发原因等。
Throwable 类是java语言中所有错误和异常的超类。
Throwable
|------Error
|------Exception
程序举例:
class Demo
{
int div(int a , int b)
{
return a/b;
}
}
public class ExceptionDemo {
public static void main(String[] args) {
Demo d = new Demo();
int x = d.div(4, 0);
}
}
结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Demo.div(ExceptionDemo.java:7)
at ExceptionDemo.main(ExceptionDemo.java:14)
出现异常ArithmeticException(数学异常)。
常见异常:数组角标越界异常
类型转换异常
空指针异常
异常的处理:
java提供了特有的语句进行处理。
try
{
需要被检测的代码;
}
catch(异常类 变量)
{
处理异常的代码;(处理方式)
}
finally
{
一定会执行语句;
}
对捕获到的异常对象进行常见方法操作。
String getMessage() //异常信息
String toSting() //异常的字符串表现形式 异常名称,异常信息。
void printStackTrace() //异常名称,异常信息,异常出现的位置。
//其实jvm默认的异常处理机制,就是在调用printStackTrace方法。
//打印异常的堆栈跟踪信息。
int div(int a , int b ) throws Exception //在功能上通过throws的关键字声明了该功能有可能会出现问题。
关键字: throws
在函数上声明异常。
便于提高安全性,调用出异常进行处理,不处理则编译失败。
对多异常的处理。
1、声明异常时,建议声明更为具体的异常。这样可以处理的更具体。
try语句后面可以跟多个catch解决不同的异常。
2、原则:对方声明几个异常,就对应有几个catch类。
如果多个catch快中的异常出现继承关系,父类异常catch快放在最下面。
建议在进行catch处理时,catch中一定要定义具体处理方式。
不要简单定义一句 e.printStackTrace(),
也不要简单的就书写一条输出语句。
自定义异常:
项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。
所以对于这些特有的问题可以按照java对问题封装的思想。
将特有的问题进行自定义异常封装。
当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
要么在内部try catch 处理。
要么在函数上声明让调用者处理。
一般情况,函数内出现异常,函数上需要声明。
定义异常信息:
方法一: 复写getMessage()
推荐方法二:
因为父类中已经把异常信息的操作都完成了。
所以子类只要在构造时,将异常信息传递给父类通过super语句。
那么就可以直接通过getMessage方法获取自定义的异常信息。
自定义异常:
必须是自定义类继承Exception。
继承Exception原因:
异常体系有一个特点:因为异常类和异常对象都需要被抛出。
他们都具备可抛性,这个可抛性是Throwable这个体系中独有特点。
只有这个体系中的类和对象才可以被throws和throw操作。
throws和throw的区别:
throws使用在函数上。
throw使用在函数内。
throws后面跟的是异常类。可以跟多个。用逗号隔开。
throw后跟的是异常对象。
Exception中有一个特殊的子类异常RuntimeException运行时异常。
如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。
如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过。
之所以不用在函数声明,是因为不需要让调用者处理。
当该异常发送时,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,
对代码进行修正。
自定义异常时:如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException。
自定义异常的两种选择:
1、继承RuntimeException。 不需要抛出异常。
2、继承Exception。需要抛出异常。
对于异常分两种:
1、编译时被检测的异常。
2、编译时不被检测的异常(运行时异常。RuntimeException以及其子类)
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------