1,异常:就是程序在运行时出现了不正常的情况,由面对对象的思想,问题也是现实生活中的一个具体事物,所以可以通过java中类的形式进行描述,并封装成对象。对于异常可以分为两大类:Error(严重问题)和Exception(非严重问题)。对于严重的 问题,一般不编写针对性的代码进行处理。而对于非严重的问题,java通过Exception类进行描述,可以使用针对性的处理方式进行处理。对于Error和Exception都具有一些共性内容。比如,不正常情况的信息,引发的原因等。
2,异常体系中的所有类和对象都具备一个独有的特点:可抛性。如想要对异常进行自定义时,必须要继承异常体系,因为只有异常体系中的对象才具备可抛性,才可以被throws和throw关键字所操作。异常处理的格式:
try{需要被检测的代码} catch(异常类 变量名){异常处理代码} finally{一定会被执行的代码}
3,对于异常的处理:
3.1,声明异常时,建议声明更为具体的异常,这样处理得会更具体。
3.2,对方声明几个异常,就对应几个catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系时,父类异常 的catch块放在最下面。
3.3,当在函数内部出现了throw抛出异常对象时,那么必须要给出相应的处理动作。要么在内部进行try处理,要么在函数上声明让调用者处理。一般在函数内现出现了异常,函数上都需要声明(RuntimeException及其子类除外)。
4,throws和throw的区别:
1,throws使用在函数上,throw使用在函数内。
2,throws后跟的是异常类,可以跟多个,中间用逗号隔开。throw后跟的是异常对象。
3,throw单独存在时,下面不要定义语句,因为当发生异常时,程序会直接跳到catch中。
5,如何自定义异常信息?
因为父类中已经把异常信息的操作完成了,所以子类只要在构造时,将异常信息传递给父类通过super语句。那么就可以直接通过getMassage()方法获取自定义的异常信息。
class FuShuException extends Exception
{
FuShuException(String masg)
{super(masg);}
}
6,异常在子父类覆盖中的体现:
6.1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法只能抛出父类的异常或者是该异常的子类。
6.2,如果父类方法中抛出了多个异常,子类在覆盖该方法时,只能抛出父类异常的子类。
6.3,如果父类或者接口的方法中没有异常抛出,子类在覆盖方法时,也不可以抛出异常。如果子类方法发生了异常,就必须要在 内部进行try处理,绝对不能把异常抛出去。
7,异常的好处:
7.1,将问题代码进行封装。
7.2,将正常流程代码和问题处理代码相分离,方便于阅读。
8,异常处理的原则:
8.1,处理方式有两种,try或者throws;
8.2,调用到抛出异常的功能 时,抛出几个,就处理几个。一个try对应多个catch.
8.3,如有多个catch,父类catch放到最下面(如Exception)。
8.4,catch内要定义针对性的处理方式,当捕获到的异常本功能处理不了时,可以在catch中继续抛出。
try
{throw new AException();}
catch(AException e)
{throw new BException();}
练习:写一段代码计算出圆和长方形的面积。
思路:1,圆和长方形都有自己属性。如半径,长和宽等。
2,面积可以是定义成接口,因为当需要算面积时就可以实现这个接口,而并不是每个圆和长方形必须计算它们的面积
3,当调用者运行这个代码时可能会出现异常情况,如传入的数据有小于或等于零的情况,我们需要对其进行相对应的处理。
interface sharp
{void getArea();}
class NovalueException extends RuntimeException
{
NovalueException (String masg)
{super(masg);}
}
class Rec implements Sharp
{
private int len,wid;
Rec(int len,iint wid)
{
if(len<=0 || wid<=0)
throw new NovalueException("出现了非法值,请重新输入");
else{
this.len=len;
this.wid=wid;}
}
public void getArea()
{
System.out.println("长方形的面积:"+len*wid);
}
}
圆的面积和长方形的面积代码的思想一样,所以没写,参考上面长方形代码就可以了。
---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------