异常

异常
       异常可以 使程序 有更好的容错性,更加健壮。程序运行出现意外情形时,系统自动生成Exception对象来通知程序,从而实现将业务功能实现代码和错误处理代码分离
       1.使用try... catch捕获异常
              将业务实现代码放在try块中定义,异常处理逻辑放在catch块中进行,try后面可以有多个catch块,但只有一个会被执行除非在catch使用continue执行循环。
       2.异常对象的常用方法
              getMessage():返回异常的详细描述字符串
              printStackTrace():将该异常的跟踪栈信息输出到标准错误输出
              printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定输出流。
              getStackTrace():返回该异常的跟踪栈信息
       3.finally回收资源
              try块有时会打开一些物理资源(数据库连接,网络连接,磁盘文件)这些资源需要显式回收。
        GC不会回收物理资源,只回收堆内存照片那个对象占用的内存。
              使用finally块,不管try中代码是否出现一场,不管哪一 个catch块被执行,finally总会执行,除非在try或者catch块中调用system.exit(1)来推出虚拟机。
              不要在finally中使用return 或者throw ,这种导致方法终止的语句会导致try、catch中的return/throw 失效
       4.异常运行流程
               程序执行try块、catch块遇到了return或者throw,两个语句都会导致该方法立即结束,系统不会立即执行这两个语句,而是去寻找异常处理流中是否包含finally块,如果没有finally块,程序立即执行return语句或throw语句,方法终止。如果有finally块,立即执行finally块,执行完了后才执行try/catch中的return/throw语句,如果finally中包含return/throw则方法结束,try/catch中的方法不再被执行
       5.使用throws声明抛出异常
              当前方法不知道如何处理这种异常的类型,该异常应该由上一级调用者处理,如果main方法也不知道该如何处理这种异常,也可以使用throws声明抛出异常,通常处理就是打印异常跟踪栈信息,并终止程序运行。
       6.使用throw抛出异常

        程序有时候需要自己抛出异常,使用throw语句


泛型
    就是允许在定义类、接口时制定类型形参,这个类型形参将在声明变量、创建对象时确定。
    public class Apple<T>();
    T可以作为形参类型 等到需要传入的时候输入类型
    但是Apple<T>作为父类的时候不可以保留未定义参数的泛型,只有定义方法的时候可以使用数据形参
    调用方法时必须为这些数据形参传入实际的数据
    泛型的类虽然是一个特殊的类,但并不是实际意义上的类,由于类型形参是调用的时候动态传入,所以在静态属性和方法中不能使用类型形参,instanceof后面也不能使用
    使用泛型如果在编译时没有遇到警告,在使用时就不会遇到ClassCastException
    Foo是Boo的子类型 但是G<Foo>不是G<Boo>的子类型
    当需要使用泛型父类的时候可以使用通配符<?> 但通配符不能用作实现类,仅作为父类使用
    泛型定义在类表示构造类需要固定类型
    泛型定义在方法表示方法参数是固定类型

   



你可能感兴趣的:(异常)