Java异常的总结-----黑马程序员

来源:互联网 发布:韩国人化妆品知乎 编辑:程序博客网 时间:2024/05/17 10:25

ASP.Net+Android+IOS开发------期待与您交流

 

<异常>

1. 异常体系

  * Throwable 所有异常和错误的父类

       * toString()

       * getMessage()

       * printStackTrace() 最长用,信息量最大,JVM调用的也是这样方法

    * Error

    * Exception 所有异常的父类

      * RuntimeException

      * 其他派系

2. 异常的第一种处理方法

   * try{

     检测的代码

     可能出现异常的代码

     如果出现以后,以后的代码(try内的)不在运行,跳转到catch去了

   }catch(异常类 变量){

     处理方法

   }

3. 方法内部抛出异常  (第二种异常处理方法,抛出异常)

  * 如果方法内部抛出异常,选择try catch来处理

  * 在方法的声明上,继续抛出  throws 异常类

  * 如果我们调用了抛出异常方法,可以选择try catch处理,也可以继续抛出

      但是,到了最终的调用者,不要在抛出了

   * throw throws

   * throw 作用在方法内,抛出异常对象,关键字后面跟随的是 new 异常对象

   * throws 作用在方法的声明生,后面跟随的是异常类

4. 编译时期异常与运行时期异常

  * 编译时期异常,调用了一个抛出异常的方法,没有进行处理,编译失败

  * 运行时期异常,运行时候,出现的异常

    * RuntimeException 运行时异常

      * 如果方法内部,抛出的是RuntimeException或者是它的子类的异常

      * 方法的声明生,无需在使用throws进行抛出

      * 对于调用者,不需要对异常进行处理

      * 原因是(********):

        运行时期异常,在程序运行中,是不允许出现了,如果出现了,java工程师,希望

程序停止运行,并让开发者,修改代码

抛出运行时期异常,不需要声明,也不需要处理,发生了就要停止程序了

 ClassCastException

 NullPointerException

 ArrayIndexOutOfBoundsException

5. 自定义异常

  * java中目前所有的异常对象,也可能不够我们使用

  * 自定义异常 前提,继承异常类Exception,入伙

  * 凡是异常类,都具备可抛性

  * 如果我们定义的是运行时期异常,继承RuntimeException

  * 需要将异常的信息,传递给自定义异常的 父类,用super();

自定义异常的代码演示

package cn.itcast.exception;/* * 演示自定义异常的案例 *///自定义负数异常class FuShuException extends RuntimeException{FuShuException(String message){super(message);}}class Demo2{public int getArea(int width,int heigth){if(width <=0)throw new FuShuException("长度出现非法数据,小于或者等于0");if(heigth <=0)throw new FuShuException("高度出现非法数据,小于或者等于0");return width * heigth;}}public class ExceptionDemo2 {public static void main(String[] args) {           Demo2 d = new Demo2();           int x = d.getArea(0, 23);           int y = d.getArea(11, 46);           if(x>y)           System.out.println("aaaaaaaaaaa");           else           System.out.println("bbbbbbbbbbb");}}


 

6. finally代码块

  * 配合try catch 处理 来进行使用

  * finally代码块中的程序,是一定要执行的

  * finally一般用于关闭资源 

finally的使用方法代码体现

package cn.itcast.exception;/* * finally代码块 */class Demo3{public void show()throws Exception{if(2==1)    //调用了windows中的功能throw new Exception();elseSystem.out.println("############");}}public class ExceptionDemo3 {public static void main(String[] args){          Demo3 d = new Demo3();          try{          d.show();          }catch(Exception e){}          finally{        //  System.out.println("+++++++++");        //释放资源          }}}


 

7. 继承中子类和父类类异常的抛出特点

  * 子类覆盖父类的方法,如果父类方法不抛异常,子类也不能抛出异常

  * 子类覆盖父类的方法,如果父类方法抛出异常,子类可以抛出,也可以不抛出异常

      但是,子类抛出的异常,不能"大于"父类抛出的异常

8. 异常练习题

  * 老师上课,用笔记本上

      笔记本会出现异常,蓝屏异常,冒烟异常

      笔记本有3个状体,正常状态上课

      老师调用笔记本的开机功能上课,如果出现异常,该怎么办?

      需要几个类 ,2个自定义异常类,一个是蓝屏,一个是冒烟

      笔记本类

      老师调用笔记本的功能上课

      测试运行的

下面是习题的代码实现:

package cn.itcast.exception;//自定义蓝屏和冒烟异常class LanPingException extends Exception{ LanPingException(String message) { super(message);}}class MaoYanException extends Exception{ MaoYanException(String message) { super(message);}}class StopException extends Exception{ StopException(String message) { super(message);}}//定义笔记本类,开机上课功能,3个状态class Computer{//定义状态变量  0 正常 1蓝屏 2冒烟int status = 2 ;public void open()throws LanPingException,MaoYanException{if(status == 0 ){System.out.println("老师开机上课了");}else if(status == 1){throw new LanPingException("笔记本蓝屏了");}else{throw new MaoYanException("笔记本冒烟了");}}//笔记本的重启功能public void reset(){System.out.println("笔记本重启了");status = 0 ;}}//定义老师类,调用笔记本上课功能class Teacher{String name;Computer c = null;Teacher(String name){this.name = name;c = new Computer();}public void teacher()throws StopException{try{c.open();}catch(LanPingException e){System.out.println("-----"+e.toString());c.reset();teacher();}catch(MaoYanException e){throw new StopException("课程无法继续");}}public void lianxi(){System.out.println("做练习了啊。。。。");}}/* * 老师调用笔记本上课,出现的异常情况 * 冯巍 */public class ExceptionTest {public static void main(String[] args) {            Teacher t = new Teacher("老师");            try{            t.teacher();            }catch(StopException e){            e.printStackTrace();            t.lianxi();            }}}


 

 

 

ASP.Net+Android+IOS开发------期待与您交流

 详细请查看:http://edu.csdn.net