zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    object c 基础语法
    Object-C 基础知识总结
    【POJ1475】Pushing Boxes-A*(或BFS?)
    【POJ1475】Pushing Boxes-A*(或BFS?)
    【POJ2286】The Rotation Game-迭代加深DFS+可行性剪枝
    【CodeVS1004】四子连棋-迭代加深搜索入门
    【CodeVS1004】四子连棋-迭代加深搜索入门
    【Poj2449】Remmarguts' Date-k短路(A*解法)
    【Poj2449】Remmarguts' Date-k短路(A*解法)
    【HDU4090】Gem and Prince-DFS+可行性剪枝
  • 原文地址:https://www.cnblogs.com/yangyunnb/p/6057646.html
Copyright © 2011-2022 走看看