------- android培训、java培训、期待与您交流! ----------
异常:是程序在运行时出现的不正常情况
异常的由来:问题也是生活中的具体事物,也可以通过java形式描述并封装成对象,java对不正常情况描述后的对象体现分为严重问题和非严重问题
严重的问题:error 不编写针对性的代码处理
非严重的问题:exception 可以使用针对性的处理方式处理
异常处理语句:
try
{
需要检测的代码
}
catch (异常类 变量)
{
处理异常的代码
}
finally
{
一定会执行的语句
}
对捕捉到的对象常见方法操作:
String getMessage();//返回此 throwable 的详细消息字符串
String toString();// 返回此 throwable 的简短描述
void printStrackTrace();//提供编程访问由 printStackTrace()
输出的堆栈跟踪信息
异常声明:throws
int div(int a ,int b) throws Exception{}
异常的处理:
要么抛出,要么try catch 处理
抛出异常时,最好声明更具体的异常,以便更具体的处理
声明几个异常就要有几个catch块不要定义多余的catch块,如果多个catch块中的异常出现继承关系,父类放在最下面
自定义异常:
项目中会出现特有问题,且并未被java 描述封装成对象,可以按照java封装问题的思想,将特有问题自定义异常封装
需求:除数是负数也视为无法进行的运算,那么就需要将这个问题进行自定义描述。
当函数内部出现throw 抛出异常的对象,要给出相应的处理动作
如下:
class FushuException extends Exception //自定义异常要继承Exception
{
private int value;
FushuException(String msg,int value)//构造函数初始化
{
super(msg);//引用指向父类的构造函数
this.value=value;
}
int getValue()
{
return value;
}
}
//在函数上声明让调用者处理
class Demo
{
int div(int a,int b) throws FushuException//函数上由throws声明异常,调用者处理异常
{
if(b<0)
throw new FushuException("除数是负数",b);//函数内部出现异常,由throw 抛出异常对象
return a/b ;
}
}
class ExceptionDemo
{
public static void main(String[] args)
{
Demo d=new Demo();
try
{
int x=d.div(4,-3);
System.out.println("x="+x);
}
catch(FushuException e)// 调用者处理异常
{
System.out.println(e.toString());
System.out.println("这个负数是:"+e.getValue());
}
System.out.println("over");
}
}
自定义异常注意:
必须是自定义类继承Exception,因为异常体系中,异常类和异常对象都被抛出,他们具有可抛性,可抛性是Throwable 体系独有的特点,只有体系中的类和对象可以使用throw 和throws。
throw 和throws 的区别:
throws 用在函数上,throw 用在函数内
throws 后可以跟多个异常类,throw 后面跟一个异常对象
RuntimeException :
如果函数内抛出该异常,函数上可以不用声明
如果函数上声明了该异常,调用者可以不用对该异常进行处理
ArithmeticException、NullPointerException、IndexOutofBoundException都是runtimeException 的子类
对于异常分为两种:
1,编译时被检测出的异常
2,编译时不被检测的异常(一般都是运行时异常,即RuntimeException及其子类)
finally:
Finally代码块内存放的是一定要执行的代码,通常用于关闭资源
异常的好处:
1,将问题封装
2,将正常流程代码和问题处理代码相分离,方便阅读
异常处理原则:
1,处理方式有两种,try catch 和throws
2,调用到抛出异常的功能时,抛出几个异常处理几个
3,多个catch块,父类的放在最下面
4,catch内定义针对性处理方式