• 第五周学习视频(一)


    一、 java中的异常处理

    将异常本身作为一个对象,产生异常就是产生一个异常对象。
    该异常对象中包括了异常事件的类型,发生异常时应用程序的状态和调用过程。
    可以将程序逻辑与异常处理分开编写。

    二、异常的分类

    (1)受检异常:在编译时就能被java编译器检测到。
    (2)非受检异常:不能在编译时检测到,包括:运行时异常(Runtime Exception);错误(Error)。

    三、Error

    动态链接失败,虚拟机错误等。通常Java程序不应该捕获这类异常,也不会抛弃这种异常。

    四、Exception

    (1)运行时异常:继承于RuntimeException的类都属于运行时异常。
    (2)非运行时异常--受检异常:除了运行时异常之外的其他由Exception继承来的异常类都是非运行时的异常,都是受检异常。Java编译器要求在程序中必须处理这种异常: 捕获异常或者声明抛弃异常
    (3)throw:用户自己定义的异常。

    五、处理异常

    java语言中有两种异常处理机制:捕获异常声明抛弃异常

    六、方法一:捕获异常

    捕获异常是通过 try-catch-finally 语句实现的。

    try{
       ...... //常规的代码
       [throw ...]
     } catch( ExceptionName1 e )  {
         ...... //处理异常1
     } catch( ExceptionName2 e ) {
        ...... //处理异常2
     }
           ......
     finally{
        ......  //不论发生什么异常(或者不发生任何异常),都要执行的部分
     } 
    

    七、try

    用try{…}选定捕获异常的范围。
    在try{…}这一部分,存放常规的代码,或可能出错的代码段。
    该代码块中的语句在执行过程中可能会生成异常对象并抛出。
    如果发生了异常,则try语句块中剩下的代码将会跳过。

    八、catch

    每个try代码块可以伴随一个或多个catch语句块,用于处理try代码块中所生成的异常事件。
    catch后跟一个形式参数指明它所能够捕获的异常类型,这个类必须是Throwable的子类。


    Jdk7允许捕获多个异常:catch( Type1 | Type2 | Type3 e)
    例如:

    catch (IOException|SQLException ex) {
        logger.log(ex);
        throw ex;
    }
    

    九、捕获异常的顺序

    try后跟的若干catch语句块可以捕获若干种异常,捕获异常的顺序和catch语句的顺序有关,当捕获到一个异常时,剩下的catch语句就不再进行匹配
    因此,在安排catch语句的顺序时:首先应该捕获最特殊的异常,然后再逐渐一 般化。也就是一般先安排子类,再安排父类。

    十、finally

    不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。
    若程序在try语句块之前调用了System.exit 方法退出,则不会执行finally。
    由于finally语句块几乎总是会执行,因此可用于保护资源免于泄漏。

    try {
         对文件进行处理的程序;
     } catch(IOException e) {
         //对文件异常进行处理;
     } finally {
        不论是否发生异常,都关闭文件;
     }
    

    十一、方法二:声明抛弃异常

    (1)使用throws关键字抛弃异常
    当一个类/方法中有异常被抛出了,就要做处理(try-catch)。
    但有时候一个类/方法中产生了异常,却不知道该怎么处理它,此时可对类/方法的头部使用throws关键字声明要抛弃的异常,当有异常抛出时就中断该方法,将异常抛到这个方法的调用者那里。
    eg.public static void main(String args[]) throws IOException,IndexOutOfBoundsException {…}
    栈解退:当抛出了异常,但还没有在特定的作用域中被捕获时,方法调用栈便被“解退”, 并试图在下一个外层try语句块中捕获这 个异常,此过程被称为“栈解退”。 此时抛出未捕获异常的方法将终止,这个方法中所有的局部变量都将超出作用域, 控制会返回到最初调用这个方法的语句。


    (2)使用throw语句将异常抛弃
    在java代码中如果发生异常的话,jvm会抛出异常对象,导致程序代码中断,这个 时候jvm做的操作就是:创建异常对象,然后抛出。
    但是有时候有些错误在jvm看来不是错误,例如年龄是负数,此时我们需要自己手动创建异常对象,并抛出该异常对象,这就是throw的作用。
    可以抛弃的异常必须是Throwable或其子类的实例。
    eg. IOException e=new IOException(); throw e;
    用户自定义异常:用户定义的异常类型必须是 Throwable 的直接或间接子类。Java 推荐用户的异常类型以 Exception 为直接父类。(即extends Exception)
    链式异常:抛出一个新的异常,将捕获的初始异常作为第二实参,这种方法可以使得新异常抛出时,异常对象 能包含来自于原始异常的完整的栈踪迹信息。(eg.throw new Exception( "Exception thrown in method2", exception ) )

    十二、小结:处理异常的常用方法

    (1) 一旦捕获异常,马上进行处理
    (2) 重新抛出异常
    (3) 捕获异常,但并不处理
    (4) 通过语句System.exit()退出应用程序

    十三、单体程序设计模式

    单体模式的特点:
    (1)单体类只能有一个实例。
    (2)单体类必须自己创建自己的唯一实例。
    (3)单体类必须给所有其他对象提供这一实例。

    //     单体类实现例程。
     public class J_Singleton {
         private static J_Singleton m_object = new J_Singleton( ); 
         // 定义构造方法: 不允许自行创建这个类的实例对象
         private J_Singleton( )     {
         } // J_Singleton构造方法结束 
         // 返回单体实例对象的引用
         public static J_Singleton mb_getObject( )     {
             return m_object;
         } // 方法mb_getObject结束
     } // 类J_Singleton结束  
    
    //单体类Runtime
     public class Runtime {
         private static Runtime currentRuntime = new Runtime( ); 
     
         public static Runtime getRuntime( )     {
              return currentRuntime;
         } 
     
        /** Don't let anyone else instantiate this class */
         private Runtime( )     {
         }
         // ... ...
     } 
    
  • 相关阅读:
    crash命令 —— mount
    crash命令 —— p
    crash命令 —— whatis
    crash命令 —— repeat
    crash命令 —— sym
    crash命令 —— foreach
    crash命令 —— ptob/btop
    kfence源码分析
    crash命令 —— pte
    crash命令 —— rd
  • 原文地址:https://www.cnblogs.com/caihan/p/12501973.html
Copyright © 2020-2023  润新知