A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郁金香大公爵 中级黑马   /  2015-7-23 16:25  /  743 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


                        异常的概念:

其实jvm默认的异常处理机制,就是在调用printStackTrace方法,打印异常的堆栈跟踪信息

异常的由来:问题是现实生活中具体的事物,也可以被java的类所描述,并封装成对象。

严重问题是Error类进行描述,不编写针对性的代码对其进行处理
非严重的用Exception类进行描述,可以使用针对性的处理方式进行处理

Throwable是error和Exception的父类


   


                        异常的处理:

try{}       -->需要被检测的代码
catch(){}   -->处理异常的代码
finally{}   -->一定会执行的代码


当try捕获到异常时,try方法中异常以下的代码就不会在执行了,直接调用catch方法,但是主方法依然可以运行
对捕获到的异常对象进行常见方法操作:

getMessage();获取异常名字:/by zero;

toString();获取异常名字,还有异常的类名:

参数.printStackTrace();获取异常名字,异常的类名,还有异常出现的位置




在功能上通过throws Exception的关键字声明了该功能有可能会出现问题,而其他人则制定相应的catch处理方式

调用throws Exception声明的类时必须声明处理方式,(未报告的异常,必须对其进行捕获或声明以便抛出,要么捕获 要么抛出)否则编译失败,处理方式有两种:


捕获 -->当调用的方法throws Exception修饰,则说明此方法调用时有可能会出错,所以一般调用时写在try方法内部,并定义throws方法,以便在出问题时进行处理,处理完成后,主方法异常以下的代码继续执行。

抛出 -->可以在主方法添加throws Exception关键字抛出到虚拟机,出错后虚拟机自动处理了,调用了异常处理机制,主方法异常以下的代码不会继续执行。





                        当出现多异常时候的处理方式:

throws声明的类后边跟着多个异常类的名字,多个异常的声明用“ ,”隔开

声明了多少个异常类都应该用catch实现重载来声明更具体的异常解决方法

如果多个异常catch块中的异常出现继承关系,则父类catch块尽量往下边放

建议在catch进行处理时,catch一定要定义具体的处理方式,一般都是将异常保存在日志中,以便后期进行调试




                        自定义异常:


因为项目中会出现特有的问题,没有被java描述过

首先要自定义一个异常类 ,自定义的异常类必须继承Exception类,原因是因为异常体系有一个特点:异常类和异常对象都需要抛出

添加一个if条件语句 当不满足条件时手动抛出个异常,格式为:throw new 异常名字();

手动抛出异常,要么内部try catch处理,要么在函数上声明后让调用者处理,一般情况下,函数内出现异常,函数上需要声明

手动抛出异常时,有可能出现异常的类也要抛出异常,类后边修饰:throws +异常方法名称



                        自定义异常信息:


if条件选择时,不符合条件则throw new 异常名称("传入异常的信息");

自定义的异常只有异常名字,没有异常信息,可以覆写父类的方法,格式如下:

class 子类 extends Exception
{
        子类构造函数(String msg)
        {
                super(msg);
        }
}

因为父类已经把异常信息的操作都完成了,所以子类没必要去覆写,只要在子类的构造方法中super关键字调用父类的构造方法将数值传入就可以完成操作




                        RuntimeException的作用:

用if条件判断是否出现自定义的问题,将继承RuntimeException的类在if条件选择后边抛出throw new +子类名字,此类不用try、catch处理,有可能出现异常的类也不用throws抛出





                        throws与throw的区别

throws使用在函数上,throws使用在函数内

throws后边跟的是异常类,throws使用的是异常对象




                        finally的作用:

finally方法是当问题出现时,程序一定会执行的一个方法。

一些很重要的代码不管异常是否出现都需要执行,则使用finally方法块来执行。

finally是可以和try方法一起声明的,没有catch方法就代表该异常是检测时异常,那么就必须声明。


                        异常在子父类覆盖中的体现

子类在覆写父类方法时,如果父类的方法抛出异常,那么子类的覆写方法,只能抛出父类的异常或者该异常的子类

如果父类方法抛出多个异常,那么子类在覆写该方法时,只能抛出父类异常的子集,如果没有继承的子集,则只能用try、catch方法处理

如果父类或者接口的方法中没有异常抛出,那么子类在覆写方法时也不可以抛出异常,如果出现异常了只能进行try、catch处理




                        异常总结:


异常体系:
        
        Throwable
                |--Error
                |--Exception
                        L--RuntimeException

异常体系的特点:异常体系中的所有类以及建立的对象都具备可抛性,可以被throw和throws关键字所操作,只有异常体系具备这个特点

throw和throws的用法: throw定义在方法内,用于抛出异常对象
                      throws定义在函数上,用于抛出异常类,可以抛出多个,用“,”隔开

当方法内容有throw抛出异常对象,并未进行try处理,必须要在方法上声明,否则编译失败。注意,RuntimeException除外,也就是说,方法内如果抛出的是RuntimeException异常,方法上可以不用声明

如果方法上声明了异常,调用者需要进行处理,处理方法可以throws可以try

异常有两种:编译时被检测异常,一种是运行时异常(编译时不检测,运行时出错)

异常处理的语句:
try{}       -->需要被检测的代码
catch(){}   -->处理异常的代码
finally{}   -->一定会执行的代码


自定义异常,按照java的面向对象思想,将特有的问题进行封装
{
        Inter a =new Inter()
        {
                public void show(int a,int b){};
                public void func(){};
        };
        a.show(2,5);
        a.func();
}

13 个回复

倒序浏览
学习一下。。。
回复 使用道具 举报
  好帖~~   赞赞赞~  
回复 使用道具 举报
狮子王 发表于 2015-7-23 22:11
好帖~~   赞赞赞~

客气客气
回复 使用道具 举报
复习了一下,挺好
回复 使用道具 举报
一城一世界 来自手机 中级黑马 2015-7-24 09:21:42
地板
不错不错,楼主好人
回复 使用道具 举报
1556455422 来自手机 中级黑马 2015-7-24 09:24:20
7#
刚好要学这个,不错
回复 使用道具 举报
异常还没复习过,正好可以用来复习。
回复 使用道具 举报
似乎我们俩差不多进度,我刷到118了,你多少了,组队不
回复 使用道具 举报
学过不久,快忘了
回复 使用道具 举报
当出基础测试的时候要是看到这个帖子也不会今天这样吧
回复 使用道具 举报
今天刚学到,再看看。。
回复 使用道具 举报
。。。。。。。。。。。。。。。。。。。
回复 使用道具 举报
不错的总结,只是太晚没时间仔细看。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马