• 2.Java异常学习


    1.Java异常的概念

    • 异常的例子
    • 1.除法就是一个需要捕获异常的例子,除数又可能是0
    • 异常处理的基本流程如下
    • 一旦发生异常,就使得程序不按照原来的流程继续的运行下去
    • a.程序抛出异常
        • try{
        •     throw new Exception();
        • }
    • b.捕获异常
        • catch(Exception e){
          • //异常处理程序  
        • }
    • c.finally代码块
    • 必须注意的是:在finally块中不能抛出异常。
        • finally{
          • //一定会被执行
          • //除非catch中有System.exit(0);会推出Java虚拟机      
        • }
    • 总结:
    • 1.当程序中抛出一个异常后,程序从程序中导致异常的代码处跳出,java虚拟机检测寻找和try关键字匹配的处理该异常的catch块,如果找到,将控制权交到catch块中的代码,然后继续往下执行程序,try块中发生异常的代码不会被重新执行。如果没有找到处理该异常的catch块,则执行finally块代码。
    • 2.线程的run函数是不能抛出异常的(可以在函数内部捕获并处理,但是不能向上提交),run函数的异常被提交给uncaughtExceptionHandler处理,后变会详细介绍
    • 3.出了run函数其他的函数都可以把函数中抛出的异常向上级提交。
    • 异常的结构
    •                                 图1.异常结构(来自参考文献一)

    • 异常分类
    • 1.UnckeckedException--Error(不准确,但是Error确实是在运行时检查并抛出的)和RunTimeException-------程序中不需要进行补货
    • 2.checkedException-----IOException、ClassNotFoundException、CloneNotSupportedException
    • 这里的检查不检查针对的是编译器
    • 常见的RunTimeException-NullPointerException、数组越界、字符串越界、算数错误(a/b)、参数类型错误(Integer.parseInt(“abc"))
    • 在声明方法时候抛出异常

    • public void openFile() throws IOException{//code}
    • 一般函数申明的时候抛出的异常是chenckedException
    • 覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,所以,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样做的目的就是为了方便子类方法覆盖父类方法时可以抛出异常。
    • Cathch异常
    • 注意:一个try块可以处理多种类型的异常(最多只有一个catch模块会被执行,与switch不相同)
    • 逻辑上一个try后处理多个异常会报错—下面的代码会报错[先catch子类异常,之后再catch父类异常]
    • 因为后一个catch不可能被执行到
        • try{
        •      //code
        • }catch(Exception e){
        • }catch(RuntimeException e){//报错一定不会被执行到    
        • }
    • 自定义异常---就是继承自已有的异常
    • 最重要的其实是异常的名字
    • class MyException extends Exception{}
    • 默认的构造函数
    • 1.super() 调用基类的构造函数进行初始化
    • 2.super(message)

     参考文献:http://www.codeceo.com/article/java-exception-learn.html#0-tsina-1-56987-397232819ff9a47a7b7e80a40613cfe1

  • 相关阅读:
    [文摘20080731]小破孩的婚姻
    Response.Redirect和Server.Transfer(Execute)的区别小论集锦
    学习FotoVision 进行C# colorMatrix 对图片的处理 : 亮度调整 抓屏 翻转 随鼠标画矩形
    [转]通过分区(Partition)提升MySQL性能
    [书目20080829]软件测试技术经典教程
    [转]c# + mysql + 事务处理(转载于 《C#数据库事务原理及实践》)
    遭遇 VS 的 无法调试引用的类库项目(DLL)问题(生成下面的模块时,启用了优化或没有调试信息)
    [转]C#动态生成文字图片
    命令行 SC命令 及通过sc config 更该windows服务的启动类型等
    [转]flash 与 js 通讯方法
  • 原文地址:https://www.cnblogs.com/yangyunnb/p/6057646.html
Copyright © 2020-2023  润新知