zoukankan      html  css  js  c++  java
  • 1java异常详解

    语法错误、编译时错误
    语义错误、逻辑错误、运行时错误
    数组下标越界,c,c++不检查,需要程序员控制。

    1、注意:这里说的异常是运行期错误,不包括编译期错误。
    2、try尝试运行,catch捕获并处理,finally无论出错不出错都会执行。
    3、throw 用来手动抛出异常。
    4、throws 用来不捕获异常,抛给上一层;或者在手动抛出异常的情况下提醒别人我这个方法可能会抛出异常,手动抛出的异常如果是RunTimeException可以throws,也可以不throws,上一层方法可以处理,也可以不处理,可以继续throws,也可以不throws,手动抛出的异常如果是普通的Exception,必须要throws,否则通不过编译。
    5、异常类根类:Throwable
    Throwable又有两个子类,Error和Exception。Error不是我们关注的,不是我们能够处理的。
    Exception是必须处理或抛出的,不处理或不抛出通不过编译,一般JDK里声明方法后紧跟着throws 的方法,我们在调用它的时候必须处理,或者抛出。
    Exception还有一个子类,RuntimeException,可捕捉也可不捕捉,可以throws 也可以不throws。例如:
    public class TestException {
        public static void main(String[] args) {
            int i = add(1, 0);
            System.out.println(i);
        }
        public static int add(int i, int j) throws ArithmeticException {//这里没有写throws也可以
            if(j == 0) {
                throw new ArithmeticException("0不能作除数");//注意这种写法//请看控制台异常信息
            }
            return i/j;
        }
    }
    View Code
    6、注意:不要轻易地抛出异常,不要轻易地吞掉异常。
      该处理的一定要处理;处理不了,没关系,可以往外抛。在main方法上也可以抛异常,但永远都不要这样做,除非测试。
    7、printStackTrace()打印堆栈错误信息,一个地方出错可能是另一个地方引起的。
    8、e.getMessage()异常信息,异常类都有无参的构造方法,也都有一个有参的构造方法,用来让我们自定义异常信息。
    public class TestException {
        public static void main(String[] args) throws Exception {//主方法也必须捕获或抛出
            int i = add(1, 0);
            System.out.println(i);
        }
        public static int add(int i, int j) throws Exception {//这里必须写throws
            if(j == 0) {
                throw new Exception("0不能作除数");//注意这种写法//请看控制台异常信息
            }
            return i/j;
        }
    }
    View Code
    9、java异常处理机制:
      java程序执行过程中如出现异常,系统会监测到并自动生成一个相应的异常类对象(里面封装了异常信息),然后再将它交给运行时系统,这一过程称为抛出异常。自定义异常需要我们自己预测,并手动生成这个异常对象,然后抛出交给运行时系统。
      运行时系统再寻找程序里有没有catch这种异常,如果有,把这个异常对象交给catch语句块处理,这一过程称为捕获异常;如果没有,抛,main方法也没有,抛,缺省的异常处理程序处理,打印堆栈信息,程序结束。
          生成------>抛出------>捕获------>处理
    10、人工抛出异常
    java异常类对象除了在程序运行出错时由系统自动生成并抛出之外,也可根据需要人工创建并抛出。
    throw new IOException();
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    自定义异常示例:
    自定义异常可以继承RunTimeException,也可以继承Exception,区别:一个必须处理,一个可以不处理不抛出。
    自定义异常需要人工抛出。
    class MyException extends Exception {
     
        public MyException(String message) {
            super(message);
        }
    }
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    public class TestException {
        public void regist(int number) throws MyException {
            if (number < 0) {
                throw new MyException("人数不能为负数");
            }
        }
     
        public static void main(String[] args) {
            TestException t = new TestException();
            try{
                t.regist(-1);
            }catch(MyException m) {
                m.printStackTrace();
            }
        }
     
    }
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • 相关阅读:
    .NET Core CSharp初级篇 1-1 基础类型介绍
    ASP.NET Core 基于JWT的认证(二)
    ASP.NET Core 基于JWT的认证(一)
    HOJ 1096 Divided Product (DFS)
    HDU1698 Just a Hook (区间更新)
    独立写作(A or B)
    HDU1394 Minimum Inversion Number(线段树OR归并排序)
    HDU5441 Travel (离线操作+并查集)
    学生管理系统(list)
    HDU5437 Alisha’s Party (优先队列 + 模拟)
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/6619316.html
Copyright © 2011-2022 走看看