黑马程序员_07_异常

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ---------------------- 

异常体系:

Throwable

      |----Error

           ·通常出现重大问题如:运行的类不存在或者内存溢出等

           ·不编写针对代码对其处理。

      |----Exception

           ·在运行是出现一些情况,可以通过try catch finally处理。

Exception和Error的子类名都是以父类作为后缀名,这样方便阅读


异常:就是程序在运行时出现不正常情况。

异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。其实就是java对不正常情况进行描述后的对象体现。

对于问题的划分:两种:一种是严重的问题,一种非严重的问题。

对于严重的,java通过Error类进行描述。

      对于Error一般不编写针对性的代码对其进行处理。(虚拟机都处理不了了)

对与非严重的,java通过Exception类进行描述。

      对于Exception可以使用针对性的处理方式进行处理。

无论Error或者Exception都具有一些共性内容。这个抽取出来的共性内容就是Throwable

比如:不正常情况的信息,引发原因等。


异常的处理

java 提供了特有的语句进行处理。

try

{

      需要被检测的代码;

}

catch(异常类 变量)

{

      处理异常的代码;(处理方式)

}

finally

{

      一定会执行的语句;

}

class Demo
{
      int div(int a,int b) throws Exception
      {
           return a/b;
      }
}
class  ExceptionDemo
{
      public static void main(String[] args)
      {
           Demo d = new Demo();
          try
           {
                 int x = d.div(4,0);
                 System.out.println("x="+x);
           }
           catch (Exception e)
           {
                 System.out.println("除零啦");
                 System.out.println(e.getMessage());
                 System.out.println(e.toString());
                 e.printStackTrace();
           }
      }

异常声明

class Demo

{

      int div(int a,int b)throws Exception//在功能上通过throws的关键字声明了该功能有可能会出现问题。

      {//声明是开发者提示调用者这个方法有可能出现异常,不抛声明可以编译通过,但是有成运行出现错误。抛声明可以在编译时就提示

           return a/b;

      }

}

class  ExceptionDemo22

{

      public static void main(String[] args)//throws Exception。上面抛出声明以后,编译不通过,有两种方式可以解决

      {//一种是在调用函数后面继续抛声明,可以像上面一级抛出,直到抛给虚拟机,让虚拟机处理,如果有错误程序就停止

           Demo d = new Demo();

           try//第二种是自己处理,就try catch函数

           {

                 int x = d.div(4,0);

                 System.out.println("x="+x);

           }

           catch (Exception e)

           {

                 System.out.println(e.toString());

           }

           System.out.println("over");

      }

}

对多异常的处理。

1,声明异常时,建议声明更为具体的异常。这样处理的可以更具体。

2,对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。

      如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

建立在进行catch处理时,catch中一定要定义具体处理方式。

不要简单定义一句 e.printStackTrace(),

也不要简单的就书写一条输出语句。


自定义异常

因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。所以对于这些特有的问题可以按照java的对问题封装的思想。将特有的问题。进行自定义的异常封装。

需求:在本程序中,对于除数是-1,也视为是错误的是无法进行运算的。

那么就需要对这个问题进行自定义的描述。

当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。

要么在内部try catch处理。要么在函数上声明让调用者处理。

自定义异常必须是自定义类继承Exception。

继承Exception原因:

异常体系有一个特点:因为异常类和异常对象都被抛出。

他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。

只有这个体系中的类和对象才可以被throws和throw操作。


class FuShuException extends Exception  //自定义一个异常
{

      //private String msg;
      private int value;
      FuShuException (String msg,int value)//建立一个构造函数,FuShuException对象取什么字符串就返回到私有msg上
      {
           //this.msg = msg;
           super(msg);//可以直接调用父类的返回字符串函数
           this.value = value;
      }
      public int getValue()//获取这个值的函数
      {
           return value;
      }
     /*
      public String getMessage()//建议一个函数,返回msg
      {
           return msg;
      }*/
}
class Demo
{
//一般情况在,函数内出现异常,函数上需要声明。

//如果FuShuException没有继承异常的类,那么当前函数不能抛出到FuShuException。因为在Throwable体系中规定throws和throw使用的对象必须继承异常的类(如Exception何Error)

      int div(int a , int b)throws FuShuException
      {
           if(b<0)
                 throw new FuShuException("出现了除数是负数的情况",b);//手动通过throw关键字抛出一个自定义异常的对象
           return a/b;
      }
}
class  ExceptionDemo44
{
      public static void main(String[] args)
      {
           Demo d = new Demo();
           try
           {
                 int x =d.div(4,-1);
                 System.out.println("x="+x);
           }
           catch (FuShuException e)
           {
                 System.out.println(e.toString());
                 System.out.println("出现负数了,负数是"+e.getValue());
           }
      }
}



------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值