• javase(6)_异常


    一、异常的概念

    1、java异常是Java提供的用于处理程序中错误的一种机制.

    2、所谓错误是程序在运行过程中发生的一些异常事件(如:除0,数组下标越界,文件不存在等).

    3、Java程序的执行过程中,如出现异常事件,可将其封装为一个异常对象,该异常对象封装了异常的信息,并将其交给Java运行时系统,该过程称为抛出异常(抛来抛去的都是异常对象).

    4、当java运行时系统收到异常对象时,会寻找能处理这一异常的代码,并把当前对象交给其处理,这一过程称为捕获异常.

    二、异常的分类

    1、Error,Throwable的子类,由Java虚拟机生成并抛出,用于表示合理的应用程序不应该试图捕获的严重问题,例:OutOfMemoryError,NoClassDefFoundError,以error结尾的都是错误,此处父类名作为子类后缀名,可以借鉴.

    2、Exception,Throwable的子类,所有异常类的父类,其子类有各种各样可能出现的异常事件,一般需要用户显示的声明或捕获.

    3、Runtime Exception,Exception的子类,Java 虚拟机正常运行期间抛出的异常的父类,如除0、下标越界等,其产生比较频繁,处理麻烦,如果显示的申明或捕获将会对程序的可读性和运行效率影响很大,因此由系统自动检测并将它们交给缺省的异常处理程序,用户可不必对其处理,也就是程序会直接停掉.

    三、异常体系

    异常类和异常对象都可被抛出,他们都具备可抛性,是Throwable体系独有特点,Throwable类是Java语言中所有错误或异常的超类,只有这个体系中的类和对象才可以通过Java虚拟机或者 Java throw语句抛出,类似地,只有此类或其子类之一才可以是catch子句中的参数类型.

    三、五个关键字

    try,catch,finally,throw,throws,throws用在函数上,抛出异常类,可以有多个,豆号分割,thorw定义在函数内,后面跟的是异常对象,一些方法(或者功能,比如IO的一些方法)通过throws excepiont,再加载方法后申明抛出异常(提高安全性,让调用者处理),我们调用这个方法时必须处理或继续抛出才可调用,否则编译错误,这里也体现了异常的两种处理方式一种处理,一种继续抛出.

    三、异常处理

    1、单异常处理

    try{
      //需要被检测的代码,抛出异常后,try部分下面的语句不再执行
    }catch(//异常类 变量){没有异常catch将被忽略,主要2法,getMessage(),printStackTrace()(这个是jvm默认调用的方法)
      //处理异常的代码,catch中不建议不处理或直接打印Stack或sysout,可以将异常记录日志文件
    }finally{  
      //一定执行的语句,如数据库连接不管报不报错执行完都要关闭
    }			

    2、多异常处理

    1、建议申明具体的异常,这样可针对性处理.

    2、多个异常多个catch,父类catch放在下面,否则执行不到,编译错误,相当于在return语句下面写代码

    3、函数当中有异常发生没处理时,这个函数就结束了,所以多个异常不会同时发生,可以利用多态传递个Exception类,但是没有针对性的处理

    4、catch中不写东西,相当于把问题隐藏了,程序继续往下执行.

    四、自定义异常

    1、既然java能对异常进行异常对象封装,我们也能对特定异常问题进行对象封装,这就是自定义异常,比如说我们可以规定除数不能小于0,否则抛异常.

    2、自定义的异常java不认识,只能手动抛出(throw),非自定义的Java识别会自动抛出,我们也可手动抛出java存在的异常.

    3、使用自定义异常有如下几步:

      1.通过继承java.lang.Excepion类来声明自己的异常类.

      2.在适当的位置生成自定义异常的实例,并用throw语句抛出.

      3.在方法的申明部分用throws语句申明该方法可能抛出的异常.

    public class MyException extends Exception{
        private int id;
        public MyException(String message,int id) {
            super(message);
            this.id=id;
        }
        public int getId(){
            return id;
        }
    }
    public class Test {
        public void regist(int num) throws MyException{
            if(num<0){
              throw new MyException("人数为负数,不合理",num);
            }
            System.out.println("登记人数:"+num);
        }
        public void manager(){
            try{
              regist(100);
            }catch(MyException e){
              System.out.println("登记失败,出错id:"+e.getId());//此处可写入日志
              e.printStackTrace();
            }
            System.out.println("操作结束");
        }
        public static void main(String[] args) {
            Test t = new Test();
            t.manager();
        }
    }

    PS:异常的误区和经验

    http://www.ibm.com/developerworks/cn/java/j-lo-exception-misdirection/  

  • 相关阅读:
    JMeter学习(二十三)关联
    最常用的DOS命令
    不同类型的操作系统
    分级存储管理的四大优点
    软件工程中数据库设计
    PPP(点对点协议(Point to Point Protocol)
    关键路径法
    什么是鲁棒性测试
    何为蠕虫病毒
    临界区
  • 原文地址:https://www.cnblogs.com/wangweiNB/p/4781062.html
Copyright © 2020-2023  润新知