异常和递归 作者:一衡 今天主要学习了异常和异常的处理方式和递归。 一、异常体系 Java代码在运行时期发生的问题就是异常。 异常的体系结构: Throwable(最顶层) Error:出现的不能够处理的严重问题 Exception:可以处理的问题 Exception有继承关系,它的父类是Throwable。Throwable是Java 语言中所有错误或异常的超类,即祖宗类。 二、Exception Exception是异常的根类是一个具体类。 Throwable类,异常Exception平级的有一个Error,它是Throwable的子类,它用来表示java程序中可能会产生的严重错误。解决办法只有一个,修改代码避免Error错误的产生。 在异常Exception类中,有一个子类要特殊说明一下,RuntimeException子类,RuntimeException及其它的子类只能在Java程序运行过程中出现。 三、异常处理。 1、JVM的默认异常处理。 如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因还有位置显示在命令行并且还终止了程序,异常后面的代码将不在执行。 2、try...catch的方式异常处理(捕获)。 try { //需要被检测的语句。 } catch(异常类 变量) { //参数。 //异常的处理语句。 } finally { //一定会被执行的语句。主要用于清理垃圾和释放内存 } A、可以有多个catch语句。就可以进行多个异常的处理 其中catch异常书写Exception e时可以表示任何运行异常 B、多个catch之间可以有子父类 平级之间没有顺序关系 如果有子父类,父类异常必须放在后面 3、throws方式处理异常(异常抛出) 格式: 权限修饰符 返回值类型 方法名(形参列表) throws 异常类型1,异常类型2….{} String getMessage() 返回此 throwable 的详细消息字符串 String toString() 返回此 throwable 的简短描述 void printStackTrace() 打印异常的堆栈的跟踪信息 4、编译时异常&运行时异常 A: 编译时期异常:是Exception的子类,非RuntimeExcpetion的子类,在编译时期必须处理 B:RuntimeException和他的所有子类异常,都属于运行时期异常。NullPointerException,ArrayIndexOutOfBoundsException等都属于运行时期异常. 运行时期异常的特点: 方法中抛出运行时期异常,方法定义中无需throws声明,调用者也无需处理此异常 运行时期异常一旦发生,需要程序人员修改源代码. 5、自定义异常 如何自定义一个异常类呢? 非常简单,写一个类去继承Exception或者RuntimeException,然后实现多个构造即可。 三、递归 1、递归,指在当前方法内调用自己的这种现象 public void method(){ System.out.println(“递归的演示”); //在当前方法内调用自己 method(); } 递归需要注意1、一定要有出口(内存溢出) 2、递归次数不宜过多(内存溢出) 2、斐波纳挈数列 代码表示 Public static int getNumber(int x){ if(x ==0){ return 0 } if(x ==1 && x==2){ return 1 ; }else { return getNumber(x-1)+getNumber(x-2); } }
|