博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
黑马程序员-3 异常
阅读量:4875 次
发布时间:2019-06-11

本文共 2038 字,大约阅读时间需要 6 分钟。

------- android培训、java培训、期待与您交流! ----------

 

异常

是在运行时期发生的不正常情况

在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");    }}

转载于:https://www.cnblogs.com/grjelf/archive/2012/10/16/2726496.html

你可能感兴趣的文章
Orale查询返回相似度基数个数
查看>>
python数据预处理
查看>>
Python之路,Day21 - 常用算法学习
查看>>
Android安全-代码安全1-ProGuard混淆处理
查看>>
部署core
查看>>
mysql 时间设置
查看>>
如何在 Xcode 中修改应用的名字
查看>>
[BZOJ5334][TJOI2018]数学计算(exgcd/线段树)
查看>>
[BZOJ4340][BJOI2015]隐身术(后缀数组)
查看>>
有关交换机——熟悉原理是必须的【转载】
查看>>
ACM(数学问题)——UVa202:输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。...
查看>>
【转】Android 读取doc文件
查看>>
P2602 [ZJOI2010]数字计数 (数位dp or 思维)
查看>>
C# 访问 C DLL
查看>>
Matlab与方程组
查看>>
NYOJ 477
查看>>
华为、科达、海康、大华等厂家摄像头通过非标方式(RTSP)接入流媒体服务实现WEB直播与录像...
查看>>
OSPF笔记
查看>>
PHP之abstract
查看>>
Rappid 消除试用版的弹出框
查看>>