黑马程序员-3 异常
异常
是在运行时期发生的不正常情况
在Java中用类的形式对不正常情况进行了描述和封装对象;
描述不正常的情况的类,就称为异常类;
以前正常流程代码和问题处理代码相结合,
现在讲正常流程代码和问题处理代码分类,提高阅读性;
其实异常就是Java通过面向对象的思想将问题封装成了对象,
用异常类对其进行描述;
不同的问题用不同的类进行具体的描述;比如角标越界,空指针等;
问题很多,意味着描述的类也很多,
将其共性进行向上抽取,就形成了异常体系;
最终异常分为两大类:
Throwable:无论是Error还是异常,都是问题,问题发生就应该抛出,让调用者知道并处理。
该体系的特点:Throwable及其所有的子类都具有可抛性。
子类的后缀名都是用其父类名作为后缀,阅读性强;
2,异常的处理
java 提供了特有的语句进行处理。
try { //需要被检测的代码; } catch(异常类 变量) { //处理异常的代码;(处理方式) } finally { //一定会执行的语句; }
3,对捕获到的异常对象进行常见方法操作。
String getMessage():获取异常信息。
自定义异常。
当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
要么在内部try catch处理。
要么在函数上声明让调用者处理。
一般情况在,函数内出现异常,函数上需要声明。
发现打印的结果中只有异常的名称,却没有异常的信息。
因为自定义的异常并未定义信息。
如何定义异常信息呢?
因为父类中已经把异常信息的操作都完成了。
所以子类只要在构造时,将异常信息传递给父类通过super语句。
那么就可以直接通过getMessage方法获取自定义的异常信息。
自定义异常:
必须是自定义类继承Exception。
继承Exception原因:
异常体系有一个特点:因为异常类和异常对象都被抛出。
他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。
只有这个体系中的类和对象才可以被throws和throw操作。
throws和throw的区别
throws使用在函数上。
throw使用在函数内。
throws后面跟的异常类。可以跟多个。用逗号隔开。
throw后跟的是异常对象。
范例:
需求:在本程序中,对于除数是-1,也视为是错误的是无法进行运算的。
那么就需要对这个问题进行自定义的描述。
class FuShuException extends Exception //getMessage(); { private int value; FuShuException() { super(); } FuShuException(String msg,int value) { super(msg); this.value = value; } public int getValue() { return value; } } class Demo { int div(int a,int b)throws FuShuException { if(b<0) throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);//手动通过throw关键字抛出一个自定义异常对象。 return a/b; } } class ExceptionDemo3 { public static void main(String[] args) { Demo d = new Demo(); try { int x = d.div(4,-9); System.out.println("x="+x); } catch (FuShuException e) { System.out.println(e.toString()); //System.out.println("除数出现负数了"); System.out.println("错误的负数是:"+e.getValue()); } System.out.println("over"); } }